Skip to content
This repository has been archived by the owner on May 12, 2021. It is now read-only.

Latest commit

 

History

History
132 lines (104 loc) · 4.71 KB

README.md

File metadata and controls

132 lines (104 loc) · 4.71 KB

kata-deploy

kata-deploy provides a Dockerfile, which contains all of the binaries and artifacts required to run Kata Containers, as well as reference daemonsets, which can be utilized to install Kata Containers on a running Kubernetes cluster.

Note, installation through daemonsets successfully installs kata-containers.io/kata-runtime on a node only if it uses either containerd or CRI-O CRI-shims.

Quick start:

Install Kata on a running Kubernetes cluster

kubectl apply -f kata-rbac.yaml
kubectl apply -f kata-deploy.yaml

Run a sample workload

Untrusted workloads can node-select based on kata-containers.io/kata-runtime=true, and are run through kata-containers.io/kata-runtime if they are marked with the appropriate CRIO or containerd annotation:

CRIO:           io.kubernetes.cri-o.TrustedSandbox: "false"
containerd:     io.kubernetes.cri.untrusted-workload: "true"

The following is a sample workload for running untrusted on a kata-enabled node:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
   annotations:
    io.kubernetes.cri-o.TrustedSandbox: "false"
    io.kubernetes.cri.untrusted-workload: "true"
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    kata-containers.io/kata-runtime: "true"

To run:

kubectl apply -f examples/nginx-untrusted.yaml

Now, you should see the pod start. You can verify that the pod is making use of kata-containers.io/kata-runtime by comparing the container ID observed with the following:

/opt/kata/bin/kata-containers.io/kata-runtime list
kubectl describe pod nginx-untrusted

The following removes the test pod:

kubectl delete -f examples/nginx-untrusted.yaml

Remove Kata from the Kubernetes cluster

kubectl delete -f kata-deploy.yaml
kubectl apply -f kata-cleanup.yaml
kubectl delete -f kata-cleanup.yaml
kubectl delete -f kata-rbac.yaml

kata-deploy Details

Dockerfile

The Dockerfile used to create the container image deployed in the DaemonSet is provided here. This image contains all the necessary artifacts for running Kata Containers.

Host artifacts:

  • kata-containers.io/kata-runtime: pulled from Kata GitHub releases page
  • kata-proxy: pulled from Kata GitHub releases page
  • kata-shim: pulled from Kata GitHub releases page
  • qemu-system-x86_64: statically built and included in this repo, based on Kata's QEMU repo
  • qemu/* : supporting binaries required for qemu-system-x86_64

Virtual Machine artifacts:

  • kata-containers.img: pulled from Kata github releases page
  • vmliuz.container: pulled from Kata github releases page

Daemonsets and RBAC:

A few daemonsets are introduced for kata-deploy, as well as an RBAC to facilitate applying labels to the nodes.

runtime-labeler:

This daemonset creates a label on each node in the cluster identifying the CRI shim in use. For example, kata-containers.io/container-runtime=crio or kata-containers.io/container-runtime=containerd.

CRI-O and containerd kata installer

Depending on the value of kata-containers.io/container-runtime label on the node, either the CRI-O or containerd kata installation daemonset executes. These daemonsets install the necessary kata binaries, configuration files, and virtual machine artifacts on the node. Once installed, the daemonset adds a node label kata-containers.io/kata-runtime=true and reconfigures either CRI-O or containerd to make use of Kata for untrusted workloads. As a final step the daemonset restarts either CRI-O or containerd and kubelet. Upon deletion, the daemonset removes the kata binaries and VM artifacts and updates the node label to kata-containers.io/kata-runtime=cleanup.

Kata cleanup:

This daemonset runs of the node has the label kata-containers.io/kata-runtime=cleanup. These daemonsets removes the kata-containers.io/container-runtime and kata-containers.io/kata-runtime labels as well as restarts either CRI-O or containerd systemctl daemon and kubelet. You cannot execute these resets during the preStopHook of the Kata installer daemonset, which necessitated this final cleanup daemonset.