containersvc

package
v0.9.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 6, 2018 License: Apache-2.0 Imports: 8 Imported by: 36

Documentation

Index

Constants

View Source
const (
	// TestBusyBoxContainerImage is the busybox image for unit test.
	TestBusyBoxContainerImage = common.OrgName + common.SystemName + "-busybox"
)

Variables

View Source
var (
	ErrContainerSvcTooManyTasks   = errors.New("The service has more than one tasks on the same ContainerInstance")
	ErrContainerSvcNoTask         = errors.New("The service has no task on the ContainerInstance")
	ErrInvalidContainerInstanceID = errors.New("InvalidContainerInstanceID")
	ErrInvalidCluster             = errors.New("InvalidCluster")
	ErrVolumeExist                = errors.New("Volume Exists")
)

Functions

func GenVolumeSourceForSwarm

func GenVolumeSourceForSwarm(source string) string

GenVolumeSourceForSwarm creates the volume mount source for swarm service. https://docs.docker.com/docker-for-aws/persistent-data-volumes/#use-a-unique-volume-per-task-using-ebs. so the volume driver could directly know which volume to mount.

func GenVolumeSourceName

func GenVolumeSourceName(source string, index int64) string

GenVolumeSourceName creates the volume source name.

Types

type CommonOptions

type CommonOptions struct {
	Cluster        string
	ServiceName    string
	ServiceUUID    string
	ServiceType    string // stateful or stateless
	ContainerImage string
	Resource       *common.Resources
	LogConfig      *cloudlog.LogConfig
}

type ContainerSvc

type ContainerSvc interface {
	// GetContainerSvcType gets the containersvc type, such as ecs, swarm, k8s.
	GetContainerSvcType() string

	// IsServiceExist checks if service exists. If not exist, return false & nil. If exists, return true & nil.
	// If meets any error, error will be returned.
	IsServiceExist(ctx context.Context, cluster string, service string) (bool, error)
	CreateService(ctx context.Context, opts *CreateServiceOptions) error
	UpdateService(ctx context.Context, opts *UpdateServiceOptions) error
	GetServiceStatus(ctx context.Context, cluster string, service string) (*common.ServiceStatus, error)
	// StopService stops the service on the container platform, and waits till all containers are stopped.
	// Expect no error (nil) if service is already stopped or does not exist.
	StopService(ctx context.Context, cluster string, service string) error
	// ScaleService scales the service containers up/down to the desiredCount. Note: it does not wait till all containers are started or stopped.
	ScaleService(ctx context.Context, cluster string, service string, desiredCount int64) error
	// DeleteService deletes the service on the container platform.
	// Expect no error (nil) if service does not exist.
	DeleteService(ctx context.Context, cluster string, service string) error
	// RollingRestartService restarts the tasks one after the other.
	RollingRestartService(ctx context.Context, cluster string, service string, opts *RollingRestartOptions) error
	// List the active (pending and running) tasks of the service.
	ListActiveServiceTasks(ctx context.Context, cluster string, service string) (serviceTaskIDs map[string]bool, err error)
	GetServiceTask(ctx context.Context, cluster string, service string, containerInstanceID string) (serviceTaskID string, err error)

	// One node (EC2) could crash at any time. So the task needs to be reentrant.
	// The container orchestration framework, such as ECS, usually does not retry the
	// task automatically, when a taks fails. The caller needs to check the task status
	// and decide whether to retry.
	// It may not be easy to know the task failure reason clearly.
	// For example, ECS task will reach the stopped status at many conditions,
	// http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_life_cycle.html.
	// The Task.StoppedReason records the detail reason,
	// http://docs.aws.amazon.com/AmazonECS/latest/developerguide/troubleshooting.html#stopped-task-errors.
	//
	// The caller could check whether a task succeeds or not by checking
	// both TaskStatus.Status and TaskStatus.StoppedReason. This does not sounds the best
	// option. It would be better that ECS could add the explicit task failure status.
	//
	// The other option is the task updates the status somewhere at the end,
	// and the caller could check that status to decide whether the task needs to be retried.
	// For example, the MongoDB init task will set the service initialized in the control plane.
	RunTask(ctx context.Context, opts *RunTaskOptions) (taskID string, err error)
	GetTaskStatus(ctx context.Context, cluster string, taskID string) (*common.TaskStatus, error)
	DeleteTask(ctx context.Context, cluster string, service string, taskType string) error

	// Create the service volume. This is only useful for k8s to create PV and PVC. And simply non-op for ECS and Swarm.
	CreateServiceVolume(ctx context.Context, service string, memberIndex int64, volumeID string, volumeSizeGB int64, journal bool) (existingVolumeID string, err error)
	DeleteServiceVolume(ctx context.Context, service string, memberIndex int64, journal bool) error
}

ContainerSvc defines the cluster, service and task related functions

type CreateServiceOptions

type CreateServiceOptions struct {
	Replicas int64
	Common   *CommonOptions

	// PortMappings include the ports exposed by the services. It includes a "ServicePort" field
	// for whether the port is a service port, used by k8s headless service for statefulset.
	// https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#creating-a-statefulset
	// https://kubernetes.io/docs/concepts/services-networking/service/#headless-services
	// https://kubernetes.io/docs/concepts/services-networking/service/#multi-port-services
	PortMappings []common.PortMapping
	// the placement constraints. If not specified, spread to all zones.
	Place  *Placement
	Envkvs []*common.EnvKeyValuePair

	// The volume mount for the service data, must exist.
	DataVolume *VolumeOptions
	// The volume mount for the service journal, optional.
	JournalVolume *VolumeOptions

	// Whether uses external DNS. For example, set to true if connect with AWS Route53.
	// If only use within k8s, set to false.
	ExternalDNS bool
	// Whether uses the external static IP. This is only for the services that require static ip, such as Redis, Consul.
	ExternalStaticIP bool
}

type Info

type Info interface {
	GetLocalContainerInstanceID() string
	GetContainerClusterID() string
}

Info defines the operations for the container related info

type MemContainerSvc

type MemContainerSvc struct {
	// contains filtered or unexported fields
}

func NewMemContainerSvc

func NewMemContainerSvc() *MemContainerSvc

func (*MemContainerSvc) AddServiceTask

func (m *MemContainerSvc) AddServiceTask(ctx context.Context, cluster string, service string, taskID string, containerInstanceID string) error

func (*MemContainerSvc) CreateService

func (m *MemContainerSvc) CreateService(ctx context.Context, opts *CreateServiceOptions) error

func (*MemContainerSvc) CreateServiceVolume added in v0.9.3

func (m *MemContainerSvc) CreateServiceVolume(ctx context.Context, service string, memberIndex int64, volumeID string, volumeSizeGB int64, journal bool) (existingVolumeID string, err error)

func (*MemContainerSvc) DeleteService

func (m *MemContainerSvc) DeleteService(ctx context.Context, cluster string, service string) error

func (*MemContainerSvc) DeleteServiceVolume added in v0.9.3

func (m *MemContainerSvc) DeleteServiceVolume(ctx context.Context, service string, memberIndex int64, journal bool) error

func (*MemContainerSvc) DeleteTask

func (m *MemContainerSvc) DeleteTask(ctx context.Context, cluster string, service string, taskType string) error

func (*MemContainerSvc) GetContainerSvcType added in v0.9.3

func (m *MemContainerSvc) GetContainerSvcType() string

func (*MemContainerSvc) GetServiceStatus

func (m *MemContainerSvc) GetServiceStatus(ctx context.Context, cluster string, service string) (*common.ServiceStatus, error)

func (*MemContainerSvc) GetServiceTask

func (m *MemContainerSvc) GetServiceTask(ctx context.Context, cluster string, service string, containerInstanceID string) (taskID string, err error)

func (*MemContainerSvc) GetTaskStatus

func (m *MemContainerSvc) GetTaskStatus(ctx context.Context, cluster string, taskID string) (*common.TaskStatus, error)

func (*MemContainerSvc) IsServiceExist

func (m *MemContainerSvc) IsServiceExist(ctx context.Context, cluster string, service string) (bool, error)

func (*MemContainerSvc) ListActiveServiceTasks

func (m *MemContainerSvc) ListActiveServiceTasks(ctx context.Context, cluster string, service string) (taskIDs map[string]bool, err error)

func (*MemContainerSvc) RollingRestartService added in v0.9.4

func (m *MemContainerSvc) RollingRestartService(ctx context.Context, cluster string, service string, opts *RollingRestartOptions) error

func (*MemContainerSvc) RunTask

func (m *MemContainerSvc) RunTask(ctx context.Context, opts *RunTaskOptions) (taskID string, err error)

func (*MemContainerSvc) ScaleService added in v0.9.2

func (m *MemContainerSvc) ScaleService(ctx context.Context, cluster string, service string, desiredCount int64) error

func (*MemContainerSvc) StopService

func (m *MemContainerSvc) StopService(ctx context.Context, cluster string, service string) error

func (*MemContainerSvc) UpdateService added in v0.9.5

func (m *MemContainerSvc) UpdateService(ctx context.Context, opts *UpdateServiceOptions) error

type MockContainerSvcInfo

type MockContainerSvcInfo struct {
}

func NewMockContainerSvcInfo

func NewMockContainerSvcInfo() *MockContainerSvcInfo

func (*MockContainerSvcInfo) GetContainerClusterID

func (m *MockContainerSvcInfo) GetContainerClusterID() string

func (*MockContainerSvcInfo) GetLocalContainerInstanceID

func (m *MockContainerSvcInfo) GetLocalContainerInstanceID() string

type Placement added in v0.8.1

type Placement struct {
	Zones []string
}

type RollingRestartOptions added in v0.9.4

type RollingRestartOptions struct {
	Replicas int64
	// serviceTasks is a list of tasks for ECS, a list of pods for K8s.
	// swarm currently does not need it.
	ServiceTasks  []string
	StatusMessage string
}

type RunTaskOptions

type RunTaskOptions struct {
	Common   *CommonOptions
	TaskType string
	Envkvs   []*common.EnvKeyValuePair
}

type UpdateServiceOptions added in v0.9.5

type UpdateServiceOptions struct {
	Cluster     string
	ServiceName string
	// update cpu and memory limits
	MaxCPUUnits     *int64
	ReserveCPUUnits *int64
	MaxMemMB        *int64
	ReserveMemMB    *int64
	// update port mappings
	PortMappings []common.PortMapping
	// Whether uses external DNS. For example, set to true if connect with AWS Route53.
	// If only use within k8s, set to false.
	ExternalDNS bool
	// update the release version, such as 0.9.5. empty means no change.
	ReleaseVersion string
}

type VolumeOptions added in v0.9.2

type VolumeOptions struct {
	MountPath  string
	VolumeType string
	SizeGB     int64
	Iops       int64
	Encrypted  bool
}

Directories

Path Synopsis
k8s
k8s-test
Note: the example only works with the code within the same release/branch.
Note: the example only works with the code within the same release/branch.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL