containersvc

package
v0.9.6 Latest Latest
Warning

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

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

Documentation

Index

Constants

View Source
const (
	// The journal volume name prefix, the journal volume name will be journal-serviceuuid,
	// the mount path will be /mnt/journal-serviceuuid
	JournalVolumeNamePrefix = "journal"

	// 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, memberName string) string

GenVolumeSourceName creates the volume source name.

func GetServiceJournalVolumeName added in v0.9.6

func GetServiceJournalVolumeName(serviceUUID string) string

GetServiceJournalVolumeName adds the volume name prefix

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, memberName string, volumeID string, volumeSizeGB int64, journal bool) (existingVolumeID string, err error)
	DeleteServiceVolume(ctx context.Context, service string, memberName string, 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, memberName string, 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, memberName string, 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