- tracing: Change runtime tracing tags to vars - shimv2: add logging to shimv2 api calls - drop qemu-lite support - runtime: delete types or const that no longer needed - runtime: Optimize the way slice created - virtcontainers: simplify tests - virtcontainers: clh: Upgrade to the openapi-generator v5.2.1 - build_image: Fix error soft link about initrd.img - ci: Temporarily skip agent shutdown test on s390x - Fix version parsing for firecracker version 0.25 and over - Osbuilder fixes - docs: update the GoDoc url from runtime project to kata-containers/sr… - docs: update `how-to` README file for Firecracker config - ci/openshift-ci: Pull centos from registry.centos.org - docs: update containerd CRI plugin url2250360bdocs: remove mentioning of qemu-litea9de761druntime: drop qemu-lite support8ae3edbcruntime: fix default hypervisor path0c7789faruntime: Add container field to logs72e3538eshimv2: add information to method comment8dadca9cshimv2: add logging to shimv2 api callsa99fcc3avirtcontainers: simplify tests39ffd8eeruntime: delete types or const that no longer neededff37f5c7runtime: Optimize the way slice created8f0f949atracing: Move dynamically added attributes to Trace()932ee41bvirtcontainers: clh: Workaround incorrect default valuesbff38e4fvirtcontainers: clh: Fix the unit testd967d3cbvirtcontainers: clh: Use constructors to ensure proper default value87de26bdtracing: Modify Trace() to accept multiple tag maps8058e972tracing: Change runtime tracing tags to varsa6a2e525virtcontainers: clh: Migrate to use the updated client APIs9de1129bosbuilder: Fix rootfs-builder when running in VMs65a1e131osbuilder: Allow running the tool several timesa4214738osbuilder: Fix Makefileb8717f35ci: Temporarily skip agent shutdown test on s390x938981bebuild_image: Fix error soft link about initrd.img2304f935docs: update the GoDoc url from kata 1.x to 2.x2a614577docs: update `how-to` README file for Firecracker config486baba7docs: update containerd CRI plugin url46eb07e1virtcontainers: clh: Re-generate the client code80fba4d6virtcontainers: clh: Upgrade to the openapi-generator v5.2.18594f80cci/openshift-ci: Pull centos from registry.centos.org87bbae1bfc: fix version parsing for fc >= 0.25 Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com>
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 katacontainers.io/kata-runtime on
a node only if it uses either containerd or CRI-O CRI-shims.
Kubernetes quick start
Install Kata on a running Kubernetes cluster
$ cd $GOPATH/src/github.com/kata-containers/kata-containers/tools/packaging/kata-deploy
$ kubectl apply -f kata-rbac/base/kata-rbac.yaml
$ kubectl apply -f kata-deploy/base/kata-deploy.yaml
or on a k3s cluster:
$ cd $GOPATH/src/github.com/kata-containers/kata-containers/tools/packaging/kata-deploy
$ kubectl apply -k kata-deploy/overlays/k3s
Run a sample workload
Workloads specify the runtime they'd like to utilize by setting the appropriate runtimeClass object within
the Pod specification. The runtimeClass examples provided define a node selector to match node label katacontainers.io/kata-runtime:"true",
which will ensure the workload is only scheduled on a node that has Kata Containers installed
runtimeClass is a built-in type in Kubernetes. To apply each Kata Containers runtimeClass:
$ cd $GOPATH/src/github.com/kata-containers/kata-containers/tools/packaging/kata-deploy/runtimeclasses
$ kubectl apply -f kata-runtimeClasses.yaml
The following YAML snippet shows how to specify a workload should use Kata with Cloud Hypervisor:
spec:
template:
spec:
runtimeClassName: kata-clh
The following YAML snippet shows how to specify a workload should use Kata with Firecracker:
spec:
template:
spec:
runtimeClassName: kata-fc
The following YAML snippet shows how to specify a workload should use Kata with QEMU:
spec:
template:
spec:
runtimeClassName: kata-qemu
To run an example with kata-clh:
$ cd $GOPATH/src/github.com/kata-containers/kata-containers/tools/packaging/kata-deploy/examples
$ kubectl apply -f test-deploy-kata-clh.yaml
To run an example with kata-fc:
$ cd $GOPATH/src/github.com/kata-containers/kata-containers/tools/packaging/kata-deploy/examples
$ kubectl apply -f test-deploy-kata-fc.yaml
To run an example with kata-qemu:
$ cd $GOPATH/src/github.com/kata-containers/kata-containers/tools/packaging/kata-deploy/examples
$ kubectl apply -f test-deploy-kata-qemu.yaml
The following removes the test pods:
$ cd $GOPATH/src/github.com/kata-containers/kata-containers/tools/packaging/kata-deploy/examples
$ kubectl delete -f test-deploy-kata-clh.yaml
$ kubectl delete -f test-deploy-kata-fc.yaml
$ kubectl delete -f test-deploy-kata-qemu.yaml
Remove Kata from the Kubernetes cluster
$ cd $GOPATH/src/github.com/kata-containers/kata-containers/tools/packaging/kata-deploy
$ kubectl delete -f kata-deploy/base/kata-deploy.yaml
$ kubectl apply -f kata-cleanup/base/kata-cleanup.yaml
$ kubectl delete -f kata-cleanup/base/kata-cleanup.yaml
$ kubectl delete -f kata-rbac/base/kata-rbac.yaml
$ kubectl delete -f runtimeclasses/kata-runtimeClasses.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, all of which are pulled from the Kata Containers release page.
Host artifacts:
cloud-hypervisor,firecracker,qemu-system-x86_64, and supporting binariescontainerd-shim-kata-v2kata-collect-data.shkata-runtime
Virtual Machine artifacts:
kata-containers.imgandkata-containers-initrd.img: pulled from Kata GitHub releases pagevmlinuz.containerandvmlinuz-virtiofs.container: pulled from Kata GitHub releases page
DaemonSets and RBAC
Two DaemonSets are introduced for kata-deploy, as well as an RBAC to facilitate
applying labels to the nodes.
Kata deploy
This DaemonSet installs the necessary Kata binaries, configuration files, and virtual machine artifacts on
the node. Once installed, the DaemonSet adds a node label katacontainers.io/kata-runtime=true and reconfigures
either CRI-O or containerd to register three runtimeClasses: kata-clh (for Cloud Hypervisor isolation), kata-qemu (for QEMU isolation),
and kata-fc (for Firecracker isolation). As a final step the DaemonSet restarts either CRI-O or containerd. Upon deletion,
the DaemonSet removes the Kata binaries and VM artifacts and updates the node label to katacontainers.io/kata-runtime=cleanup.
Kata cleanup
This DaemonSet runs of the node has the label katacontainers.io/kata-runtime=cleanup. These DaemonSets removes
the katacontainers.io/kata-runtime label as well as restarts either CRI-O or containerd systemctl
daemon. You cannot execute these resets during the preStopHook of the Kata installer DaemonSet,
which necessitated this final cleanup DaemonSet.