Documentation
¶
Overview ¶
Package podtask maps Kubernetes pods to Mesos tasks.
Index ¶
- Constants
- Variables
- func InstallDebugHandlers(reg Registry, mux *http.ServeMux)
- func MakePodKey(ctx api.Context, id string) (string, error)
- func MinimalPodResourcesPredicate(t *T, offer *mesos.Offer) bool
- func MinimalPodResourcesProcurement(t *T, details *mesos.Offer) error
- func NodeProcurement(t *T, offer *mesos.Offer) error
- func NodeSelectorPredicate(t *T, offer *mesos.Offer) bool
- func ParsePodStatusResult(taskStatus *mesos.TaskStatus) (result api.PodStatusResult, err error)
- func PodFitsResourcesPredicate(t *T, offer *mesos.Offer) bool
- func PodResourcesProcurement(t *T, offer *mesos.Offer) error
- func PortsPredicate(t *T, offer *mesos.Offer) bool
- func PortsProcurement(t *T, offer *mesos.Offer) error
- func ValidateProcurement(t *T, offer *mesos.Offer) error
- func ValidationPredicate(t *T, offer *mesos.Offer) bool
- type AllOrNothingProcurement
- type DuplicateHostPortError
- type FitPredicate
- type FlagType
- type HostPortMapper
- type HostPortMapping
- type HostPortMappingType
- type PortAllocationError
- type Procurement
- type Registry
- type RequireAllPredicate
- type RequireSomePodResources
- type Spec
- type StateType
- type T
Constants ¶
const (
Launched = FlagType("launched")
Bound = FlagType("bound")
Deleted = FlagType("deleted")
)
const (
//TODO(jdef) move this somewhere else
PodPath = "/pods"
)
const PortMappingLabelKey = "k8s.mesosphere.io/portMapping"
Variables ¶
var (
DefaultMinimalPredicate = RequireAllPredicate([]FitPredicate{
ValidationPredicate,
NodeSelectorPredicate,
MinimalPodResourcesPredicate,
PortsPredicate,
}).Fit
DefaultMinimalProcurement = AllOrNothingProcurement([]Procurement{
ValidateProcurement,
NodeProcurement,
MinimalPodResourcesProcurement,
PortsProcurement,
}).Procure
)
var DefaultPredicate = RequireAllPredicate([]FitPredicate{
ValidationPredicate,
NodeSelectorPredicate,
PodFitsResourcesPredicate,
PortsPredicate,
}).Fit
Functions ¶
func InstallDebugHandlers ¶
func InstallDebugHandlers(reg Registry, mux *http.ServeMux)
TODO(jdef) we use a Locker to guard against concurrent task state changes, but it would be really, really nice to avoid doing this. Maybe someday the registry won't return data ptrs but plain structs instead.
func MakePodKey ¶
func MakePodKey(ctx api.Context, id string) (string, error)
makePodKey constructs etcd paths to pod items enforcing namespace rules.
func MinimalPodResourcesPredicate ¶ added in v1.1.0
func MinimalPodResourcesPredicate(t *T, offer *mesos.Offer) bool
func MinimalPodResourcesProcurement ¶ added in v1.1.0
func MinimalPodResourcesProcurement(t *T, details *mesos.Offer) error
func NodeProcurement ¶ added in v1.1.0
func NodeProcurement(t *T, offer *mesos.Offer) error
NodeProcurement updates t.Spec in preparation for the task to be launched on the slave associated with the offer.
func NodeSelectorPredicate ¶ added in v1.1.0
func NodeSelectorPredicate(t *T, offer *mesos.Offer) bool
func ParsePodStatusResult ¶
func ParsePodStatusResult(taskStatus *mesos.TaskStatus) (result api.PodStatusResult, err error)
func PodFitsResourcesPredicate ¶ added in v1.1.0
func PodFitsResourcesPredicate(t *T, offer *mesos.Offer) bool
func PodResourcesProcurement ¶ added in v1.1.0
func PodResourcesProcurement(t *T, offer *mesos.Offer) error
PodResourcesProcurement converts k8s pod cpu and memory resource requirements into mesos resource allocations.
func PortsPredicate ¶ added in v1.1.0
func PortsPredicate(t *T, offer *mesos.Offer) bool
func PortsProcurement ¶ added in v1.1.0
func PortsProcurement(t *T, offer *mesos.Offer) error
PortsProcurement convert host port mappings into mesos port resource allocations.
func ValidateProcurement ¶ added in v1.1.0
func ValidateProcurement(t *T, offer *mesos.Offer) error
ValidateProcurement checks that the offered resources are kosher, and if not panics. If things check out ok, t.Spec is cleared and nil is returned.
func ValidationPredicate ¶ added in v1.1.0
func ValidationPredicate(t *T, offer *mesos.Offer) bool
Types ¶
type AllOrNothingProcurement ¶ added in v1.1.0
type AllOrNothingProcurement []Procurement
AllOrNothingProcurement provides a convenient wrapper around multiple Procurement objectives: the failure of any Procurement in the set results in Procure failing. see AllOrNothingProcurement.Procure
type DuplicateHostPortError ¶
type DuplicateHostPortError struct {
// contains filtered or unexported fields
}
type FitPredicate ¶ added in v1.1.0
type FitPredicate func(*T, *mesos.Offer) bool
FitPredicate implementations determine if the given task "fits" into offered Mesos resources. Neither the task or offer should be modified.
type HostPortMapper ¶
type HostPortMapper interface {
// abstracts the way that host ports are mapped to pod container ports
Generate(t *T, offer *mesos.Offer) ([]HostPortMapping, error)
}
type HostPortMapping ¶
type HostPortMapping struct {
ContainerIdx int // index of the container in the pod spec
PortIdx int // index of the port in a container's port spec
OfferPort uint64
}
type HostPortMappingType ¶
type HostPortMappingType string
const (
// maps a Container.HostPort to the same exact offered host port, ignores .HostPort = 0
HostPortMappingFixed HostPortMappingType = "fixed"
// same as HostPortMappingFixed, except that .HostPort of 0 are mapped to any port offered
HostPortMappingWildcard = "wildcard"
)
func MappingTypeForPod ¶
func MappingTypeForPod(pod *api.Pod) HostPortMappingType
type PortAllocationError ¶
type PortAllocationError struct {
PodId string
Ports []uint64
}
type Procurement ¶ added in v1.1.0
type Procurement func(*T, *mesos.Offer) error
Procurement funcs allocate resources for a task from an offer. Both the task and/or offer may be modified.
func NewDefaultProcurement ¶ added in v1.1.0
func NewDefaultProcurement(c mresource.CPUShares, m mresource.MegaBytes) Procurement
NewDefaultProcurement returns the default procurement strategy that combines validation and responsible Mesos resource procurement. c and m are resource quantities written into k8s api.Pod.Spec's that don't declare resources (all containers in k8s-mesos require cpu and memory limits).
type Registry ¶
type Registry interface {
// register the specified task with this registry, as long as the current error
// condition is nil. if no errors occur then return a copy of the registered task.
Register(*T, error) (*T, error)
// unregister the specified task from this registry
Unregister(*T)
// update state for the registered task identified by task.ID, returning a copy of
// the updated task, if any.
Update(task *T) error
// return the task registered for the specified task ID and its current state.
// if there is no such task then StateUnknown is returned.
Get(taskId string) (task *T, currentState StateType)
// return the non-terminal task corresponding to the specified pod ID
ForPod(podID string) (task *T, currentState StateType)
// update the task status given the specified mesos task status update, returning a
// copy of the updated task (if any) and its state.
UpdateStatus(status *mesos.TaskStatus) (*T, StateType)
// return a list of task ID's that match the given filter, or all task ID's if filter == nil.
List(filter func(*T) bool) []*T
}
state store for pod tasks
func NewInMemoryRegistry ¶
func NewInMemoryRegistry() Registry
type RequireAllPredicate ¶ added in v1.1.0
type RequireAllPredicate []FitPredicate
type RequireSomePodResources ¶ added in v1.1.0
type RequireSomePodResources struct {
// contains filtered or unexported fields
}
type Spec ¶
type Spec struct {
SlaveID string
AssignedSlave string
CPU mresource.CPUShares
Memory mresource.MegaBytes
PortMap []HostPortMapping
Ports []uint64
Data []byte
}
type StateType ¶
type StateType int
const (
StatePending StateType = iota
StateRunning
StateFinished
StateUnknown
)
type T ¶
type T struct {
ID string
Pod api.Pod
Spec Spec
Offer offers.Perishable // thread-safe
State StateType
Flags map[FlagType]struct{}
CreateTime time.Time
UpdatedTime time.Time // time of the most recent StatusUpdate we've seen from the mesos master
// contains filtered or unexported fields
}
A struct that describes a pod task.
func New ¶
func New(ctx api.Context, id string, pod api.Pod, executor *mesos.ExecutorInfo) (*T, error)
func RecoverFrom ¶
func RecoverFrom(pod api.Pod) (*T, bool, error)
reconstruct a task from metadata stashed in a pod entry. there are limited pod states that support reconstruction. if we expect to be able to reconstruct state but encounter errors in the process then those errors are returned. if the pod is in a seemingly valid state but otherwise does not support task reconstruction return false. if we're able to reconstruct state then return a reconstructed task and true.
at this time task reconstruction is only supported for pods that have been annotated with binding metadata, which implies that they've previously been associated with a task and that mesos knows about it.
assumes that the pod data comes from the k8s registry and reflects the desired state.
func (*T) BuildTaskInfo ¶
func (t *T) BuildTaskInfo() *mesos.TaskInfo
func (*T) Clone ¶
func (t *T) Clone() *T
mostly-clone this pod task. the clone will actually share the some fields:
- executor // OK because it's read only
- Offer // OK because it's guarantees safe concurrent access
func (*T) GetOfferId ¶
func (t *T) GetOfferId() string
func (*T) HasAcceptedOffer ¶
func (t *T) HasAcceptedOffer() bool
func (*T) Reset ¶
func (t *T) Reset()
Clear offer-related details from the task, should be called if/when an offer has already been assigned to a task but for some reason is no longer valid.
func (*T) SaveRecoveryInfo ¶
func (t *T) SaveRecoveryInfo(dict map[string]string)