2016
In the beginning…
(2012)
The Go Landscape
2012
Apcera Platform
The Instance Manager
Instance Manager
State Machine Apocalypse
● Started out simple, but naive about the future
● Few small libraries…
● … but all integration logic was central
● 8 states
● 53 function handlers
Existing Weight
● Ubuntu base OS
● CAPS deployment
● .deb packaging
● Operational tooling
System Skew is a Problem
● Deploys non-atomic
● Different lifecycle per host
● Operational access
A New Model
Kurma
● Minimize host dependencies
● Everything is a container
● Simple notions that could be easily extended
● Simple, well defined APIs
What is Kurma made of?
Existing
● Go + C
● App Container (AppC)
● Apcera’s existing
instrumentation
Coming soon
● Go + C
● AppC
● libcontainer based
● CNI for networking
What is Kurma made of?
Existing
● Go + C
● App Container (AppC)
● Apcera’s existing
instrumentation
Coming soon
● Go + C
● AppC
● libcontainer based
● CNI for networking
Delivery
kurmad
● Existing host
● Download and run
● Immediately benefit
● Depends on host kernel
and libc
kurmaOS
● Minimalist distro
● Services as containers
● A/B partition model
● Console is just a
container
Delivery
kurmad
● Existing host
● Download and run
● Immediately benefit
● Depends on host kernel
and libc
kurmaOS
● Minimalist distro
● Services as containers
● A/B partition model
● Console is just a
container
Kurma
Process Model
Kurma
Stager Process
Kurma
User Processes
Stager
Pluggable Process Orchestration
● Responsible for instrumenting the pod
● Packaged as a signed, trusted ACI image
● Gets own mount and network namespace
Stager API
● Simplest unit of work: an executable
● Setup via image ‘Exec’ setting
● Other calls through expected executables
– /opt/stager/run
– /opt/stager/status
– /opt/stager/logs
– ...
Kurma
Reusable Unit
Kurma
Reusable Unit for Extensibility
Networking API
● ACI image
● Passes along JSON configuration
● Executes commands to setup networking on
other containers
– /opt/network/add <ns> <container-id>
– /opt/network/del <ns> <container-id>
Kurma
Reusable Unit for Extensibility
/opt/stager/run cni /opt/network/add ...
Kurma
Extensibility Through Reuse
Kurma
Extensibility Through Reuse
Kurma
Extending Boundries with Semantics
Kurma
Remote API
Kubernetes + Kurma
Why?
● Kurma usage outside Apcera
● Increased platform flexibility
● Integrating with broader community
Kubelet
● Has existing Runtime interface
● Rich interface for engine communication
● Kubelet is a bit of a leaky abstraction
● Workarounds for Dockerisms
Testing
● Mystical
● Documentation gaps
● Excellent Github/PR integration
Codebase
● Godep pains
● “hack” directory?
● Documentation gaps
● Interface movement
Runtime.ConvertPodStatusToAPIPodStatus()
Kurmanetes
● Maturing Kurma based on Kubernetes needs
– Pods
– Networking
– Image management
● Runtime abstraction nearly complete
Kurmanetes
● Done
– Pod management
– Image retrieval and management
● Remaining
– Landing Kurma’s pod/stager branch
– cAdvisor integration
– Integration testing
– Work towards improving the abstraction leaks
Questions?
Resources
Kurma
kurma.io
github.com/apcera/kurma
Me
ken@apcera.com
@krobertson
We’re hiring for the Kurma team.

KURMA - A Containerized Container Platform - KubeCon 2016