rundmc

package
v0.0.0-...-cf22b21 Latest Latest
Warning

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

Go to latest
Published: Mar 21, 2018 License: Apache-2.0 Imports: 20 Imported by: 0

README

RunDMC - Diminuatively Managed RunC Containers

RunDMC is a small wrapper around runC.

High Level Architecture

Each container is stored as a subdirectory of a directory called 'the depot'. The depot is the source of truth for RunDMC, when a container is created, this amounts to creating an Open Container Spec compliant container as a subdirectory of the depot directory. The subdirectory is named after the container's handle. Looking up a container amounts to checking for the presence of a subdirectory with the right name.

To execute processes in a container, we launch the runc binary inside the container directory and pass it a custom process spec. Since we want to control the container lifecycle via the API without the restriction that the container dies when its first process dies, the containers are always created with a no-op initial process that never exits. User processes are all executed using runc exec.

The process_tracker allows reattaching to running containers when RunDMC is restarted. It holds on to process input/output streams and allows reconnecting to them later.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetMountOptions

func GetMountOptions(path string) ([]string, error)

func IsMountPoint

func IsMountPoint(path string) (bool, error)

func NewEventStore

func NewEventStore(props Properties) *events

func NewStateStore

func NewStateStore(props Properties) *states

Types

type BundleLoader

type BundleLoader interface {
	Load(path string) (goci.Bndl, error)
}

type BundleTemplate

type BundleTemplate struct {
	Rules []BundlerRule
}

func (BundleTemplate) Generate

func (b BundleTemplate) Generate(spec spec.DesiredContainerSpec, containerDir string) (goci.Bndl, error)

type BundlerRule

type BundlerRule interface {
	Apply(bndle goci.Bndl, desiredContainerSpec spec.DesiredContainerSpec, containerDir string) (goci.Bndl, error)
}

type Containerizer

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

Containerizer knows how to manage a depot of container bundles

func New

func New(depot Depot, runtime OCIRuntime, loader BundleLoader, nstarRunner NstarRunner, stopper Stopper, events EventStore, states StateStore, rootfsFileCreator RootfsFileCreator, peaCreator PeaCreator, peaUsernameResolver PeaUsernameResolver) *Containerizer

func (*Containerizer) Attach

func (c *Containerizer) Attach(log lager.Logger, handle string, processID string, io garden.ProcessIO) (garden.Process, error)

func (*Containerizer) Create

Create creates a bundle in the depot and starts its init process

func (*Containerizer) Destroy

func (c *Containerizer) Destroy(log lager.Logger, handle string) error

Destroy deletes the container and the bundle directory

func (*Containerizer) Handles

func (c *Containerizer) Handles() ([]string, error)

Handles returns a list of all container handles

func (*Containerizer) Info

func (c *Containerizer) Info(log lager.Logger, handle string) (spec.ActualContainerSpec, error)

func (*Containerizer) Metrics

func (*Containerizer) RemoveBundle

func (c *Containerizer) RemoveBundle(log lager.Logger, handle string) error

func (*Containerizer) Run

Run runs a process inside a running container

func (*Containerizer) Stop

func (c *Containerizer) Stop(log lager.Logger, handle string, kill bool) error

Stop stops all the processes other than the init process in the container

func (*Containerizer) StreamIn

func (c *Containerizer) StreamIn(log lager.Logger, handle string, spec garden.StreamInSpec) error

StreamIn streams files in to the container

func (*Containerizer) StreamOut

func (c *Containerizer) StreamOut(log lager.Logger, handle string, spec garden.StreamOutSpec) (io.ReadCloser, error)

StreamOut stream files from the container

type Depot

type Depot interface {
	Create(log lager.Logger, handle string, desiredContainerSpec spec.DesiredContainerSpec) error
	Lookup(log lager.Logger, handle string) (path string, err error)
	Destroy(log lager.Logger, handle string) error
	Handles() ([]string, error)
}

type EventStore

type EventStore interface {
	OnEvent(id string, event string) error
	Events(id string) []string
}

type MountOptionsGetter

type MountOptionsGetter func(path string) ([]string, error)

func (MountOptionsGetter) GetMountOptions

func (g MountOptionsGetter) GetMountOptions(path string) ([]string, error)

type MountPointChecker

type MountPointChecker func(path string) (bool, error)

func (MountPointChecker) IsMountPoint

func (c MountPointChecker) IsMountPoint(path string) (bool, error)

type NstarRunner

type NstarRunner interface {
	StreamIn(log lager.Logger, pid int, path string, user string, tarStream io.Reader) error
	StreamOut(log lager.Logger, pid int, path string, user string) (io.ReadCloser, error)
}

func NewNstarRunner

func NewNstarRunner(nstarPath, tarPath string, runner commandrunner.CommandRunner) NstarRunner

type OCIRuntime

type OCIRuntime interface {
	Create(log lager.Logger, bundlePath, id string, io garden.ProcessIO) error
	Exec(log lager.Logger, bundlePath, id string, spec garden.ProcessSpec, io garden.ProcessIO) (garden.Process, error)
	Attach(log lager.Logger, bundlePath, id, processId string, io garden.ProcessIO) (garden.Process, error)
	Kill(log lager.Logger, bundlePath string) error
	Delete(log lager.Logger, force bool, bundlePath string) error
	State(log lager.Logger, id string) (runrunc.State, error)
	Stats(log lager.Logger, id string) (gardener.ActualContainerMetrics, error)
	WatchEvents(log lager.Logger, id string, eventsNotifier runrunc.EventsNotifier) error
}

type PeaCreator

type PeaCreator interface {
	CreatePea(log lager.Logger, processSpec garden.ProcessSpec, pio garden.ProcessIO, sandboxHandle, sandboxBundlePath string) (garden.Process, error)
}

type PeaUsernameResolver

type PeaUsernameResolver interface {
	ResolveUser(log lager.Logger, bundlePath, handle string, image garden.ImageRef, username string) (int, int, error)
}

type Properties

type Properties interface {
	Set(handle string, key string, value string)
	Get(handle string, key string) (string, bool)
}

type RootfsFileCreator

type RootfsFileCreator interface {
	CreateFiles(rootFSPath string, pathsToCreate ...string) error
}

type StateStore

type StateStore interface {
	StoreStopped(handle string)
	IsStopped(handle string) bool
}

type Stopper

type Stopper interface {
	StopAll(log lager.Logger, cgroupName string, save []int, kill bool) error
}

Directories

Path Synopsis
cgroupsfakes
Code generated by counterfeiter.
Code generated by counterfeiter.
depotfakes
Code generated by counterfeiter.
Code generated by counterfeiter.
peasfakes
Code generated by counterfeiter.
Code generated by counterfeiter.
processwaiter/processwaiterfakes
Code generated by counterfeiter.
Code generated by counterfeiter.
Code generated by counterfeiter.
Code generated by counterfeiter.
runruncfakes
Code generated by counterfeiter.
Code generated by counterfeiter.
signalsfakes
Code generated by counterfeiter.
Code generated by counterfeiter.
stopperfakes
Code generated by counterfeiter.
Code generated by counterfeiter.

Jump to

Keyboard shortcuts

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