container ✓$ hyperctl run -t busybox echo helloworld • sub-second startup time* • only cost ~12MB extra memory ✓Hardware level virtualization, with independent guest kernel ✓$ hyperctl exec -t busybox uname -r • 4.4.12-hyper (or your provided kernel) ✓HyperContainer naturally match to the design of Pod * More details: http://hypercontainer.io/why-hyper.html
runtimes ✓Imperative container-centric interface ✓why not pod-centric? • Every container runtime implementation needs to understand the concept of pod. • Interface has to be changed whenever new pod-level feature is proposed. ✓Extensibility ✓Feature Velocity ✓Code Maintainability More details: kubernetes/kubernetes#17048 (by @feiskyer)
✓Guaranteed ✓Burstable ✓BestEffort ✓Resource accounting ✓Charge container overhead to the pod instead of the node • streaming server , containerd-shim (per-container in docker)
resource limits been set before start ✓Pod level cgroups values are used for pod sandbox’s resource spec ✓/sys/fs/cgroup/memory/kubepods/burstable/podID/ • Memory of VM = memory.limit_in_bytes ✓/sys/fs/cgroup/cpu/kubepods/burstable/podID/ • vCPU = cpu.cfs_quota_us/cpu.cfs_period_us ✓If not set: ✓1 vCPU, 64MB memory
set before start ✓Workflow in frakti: 1. Create a network NS for sandbox 2. plugin.SetUpPod(NS, podID) to configure this NS 3. Read the network info from the NS and cache it 4. Also checkpoint the NS path for future usage (TearDown) 5. Use cached network info to configure sandbox VM 6. Keep scanning /etc/cni/net.d/xxx.conf to update cached info HyperContainer A B eth0 vethXXX
be handled by hypervisor … ✓privileged ✓host namespace (network, pid, ipc) ✓user prefer to run them in Linux containers ✓And kubelet does not want deal with multiple runtimes on same node ✴complicated ✴break the current model
Agent kube-proxy kubelet Cinder Plugin v2 Pod Pod Pod Pod KeyStone Neutron Cinder Master Object: Network Ceph Object: Pod Object: … upgrade to frakti upgrade to TPR upgrade to CNI upgrade to flex volume plugin upgrade to RBAC + Keystone
integration work ✓eliminate pod centric runtime API ✓runtime lifecycle • PodSandbox & Container & Image API ✓Checkpoint • store the auxiliary data in runtime shim ✓streaming • leave to implementation to runtime shim • common streaming server library ✓Kubernetes plugins make re-innovation possible ✓Third Party Resource • for Network object management ✓CNI network • simple but powerful • while CNM is impossible to be used in runtime other than Docker ✓Enable more possibilities ✓Success of CRI is the success of orchestration project itself ✓think about containerd