Kubernetes kata-runtime 集群部署
Kata Containers
旨在构建一个安全且与 OCI
兼容的容器运行时,通过使用硬件虚拟化将每个容器工作负载放入轻量级虚拟机中,从而增强容器工作负载的安全性和隔离性。每个虚拟机都运行自己的内核。
最初,英特尔推出了一个项目Clear Containers,旨在通过虚拟化解决容器中的CoW(Copy on Write)安全问题。后来它与 Hyper.sh RunV 项目合并,现在将其称为 Kata Containers。
Kata on Kubernetes
Kubernetes
集群中Node节点,Kubelet
通过CRI容器运行时Interface
(例如containerd或cri-o) 与 runC
进行通信,runC
负责运行pod 中的容器.
而 在Kata Containers
用于在轻量级 VM kata-runtime
中运行容器,为此需要containerd或cri-o。需要一个与 kata 容器兼容的containerd-shim-kata-v2
,Kata Containers
的运行时类在隔离的内核和命名空间中运行容器。
Kata 容器部署
前提条件
- 使用kubeadm、kubectl 和 kubelet引导和安装的 Kubernetes 集群
- 容器运行时接口 (CRI) - Containerd或cri-o
- Host kernel 开启 kvm 内核模块:qemu-system-x86_64
Kata容器部署
安装Kata Containers
,但在集群中安装它的首选方法是通过kata-deploy。这将作为kube-system命名空间内的 pod 运行,并将安装运行 Kata
容器所需的所有二进制文件和工件,以及可用于在运行的 Kubernetes
集群中安装 Kata
容器的 DaemonSet
- 为kata-deploy pod创建和提供不同的 RBAC 角色
dongjiang@MacBook Pro:~ $ kubectl apply -f https://raw.githubusercontent.com/kata-containers/kata-containers/main/tools/packaging/kata-deploy/kata-rbac/base/kata-rbac.yaml
- 创建一个kata-deploy pod
dongjiang@MacBook Pro:~ $ kubectl apply -f https://raw.githubusercontent.com/kata-containers/kata-containers/main/tools/packaging/kata-deploy/kata-deploy/base/kata-deploy-stable.yaml
- 检查命名空间内的kata-deploy pod状态kube-system。
dongjiang@MacBook Pro:~ $ kubectl get pod -A | grep "kata-deploy"
kube-system kata-deploy-2h42n 1/1 Running 0 47h
kube-system kata-deploy-hqkjm 1/1 Running 0 47h
- 检查节点上的 Kata-Containers 标签
dongjiang@MacBook Pro:~ $ kubectl get nodes --show-labels | grep kata-runtime
kcs-kata-s-kvbgb Ready <none> 5d20h v1.21.5 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=ecloud-compute-6248R-2.0-000400160040,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=SZJD,failure-domain.beta.kubernetes.io/zone=ecloud_compute_c3_zone,katacontainers.io/kata-runtime=true,kcs.topology.csi.ecloud.com/zone=SZJD,kubernetes.io/arch=amd64,kubernetes.io/hostname=kcs-kata-s-kvbgb,kubernetes.io/os=linux,machine.ecloud.cmss.com/machine-name=kata-node-zxnkx,machine.ecloud.cmss.com/machine-type=VM,node.kubernetes.io/cloud=,node.kubernetes.io/instance-type=ecloud-compute-6248R-2.0-000400160040,topology.kubernetes.io/region=SZJD,topology.kubernetes.io/zone=ecloud_compute_c3_zone
kcs-kata-s-pwm44 Ready <none> 5d20h v1.21.5 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=ecloud-compute-6248R-2.0-000400160040,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=SZJD,failure-domain.beta.kubernetes.io/zone=ecloud_compute_c3_zone,katacontainers.io/kata-runtime=true,kcs.topology.csi.ecloud.com/zone=SZJD,kubernetes.io/arch=amd64,kubernetes.io/hostname=kcs-kata-s-pwm44,kubernetes.io/os=linux,machine.ecloud.cmss.com/machine-name=kata-node-45dkf,machine.ecloud.cmss.com/machine-type=VM,node.kubernetes.io/cloud=,node.kubernetes.io/instance-type=ecloud-compute-6248R-2.0-000400160040,topology.kubernetes.io/region=SZJD,topology.kubernetes.io/zone=ecloud_compute_c3_zone
kata 容器使用
创建运行时
创建 kind:RuntimeClass
kind: RuntimeClass
apiVersion: node.k8s.io/v1
metadata:
name: kata-qemu
handler: kata-qemu
overhead:
podFixed:
memory: "160Mi"
cpu: "250m"
scheduling:
nodeSelector:
katacontainers.io/kata-runtime: "true"
在运行时类pod overhead
中定义了容器资源的内存和 CPU 使用限制设置。
部署案例
部署 runtimeClassName
为kata-qemu
服务
apiVersion: v1
kind: Pod
metadata:
name: nginx-kata
spec:
runtimeClassName: kata-qemu
containers:
- name: nginx
image: nginx:latest
dongjiang@MacBook Pro:kubernetes $ kubectl get pod nginx-kata
NAME READY STATUS RESTARTS AGE
nginx-kata 1/1 Running 0 53s
dongjiang@MacBook Pro:kubernetes $ kubectl get pod nginx-kata -o jsonpath='{.spec.runtimeClassName}'
kata-qemu
「如果这篇文章对你有用,请随意打赏」
如果这篇文章对你有用,请随意打赏
使用微信扫描二维码完成支付