环境 : CentOS 8.1 x86_64
kata 2 做了很多优化, 故使用kata 2 版本, 操作系统选用高内核, CentOS 8 (社区CentOS 7只支持kata 1) , 同时操作系统开启 ipv6
一、部署kubernetes 使用 kubespray 部署生产kubernetes集群 , CNI插件使用了kube-ovn
遇到网络问题,需离线下载镜像,以及确保能访问github(github加速 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 images=( kube-apiserver:v1.18.10 kube-controller-manager:v1.18.10 kube-scheduler:v1.18.10 kube-proxy:v1.18.10 pause:3.2 k8s-dns-node-cache:1.15.13 cluster-proportional-autoscaler-amd64:1.8.1 ) for imageName in ${images[@]} ; do docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName done
kubernetes部署步骤参考kubespray官网即可略
二、安装kata 2.0 2.1 安装kata 组件 Install the Kata Containers components with the following commands:
1 2 3 4 5 6 7 8 9 10 11 12 $ sudo -E dnf install -y centos-release-advanced-virtualization $ sudo -E dnf module disable -y virt:rhel $ source /etc/os-release $ cat <<EOF | sudo -E tee /etc/yum.repos.d/kata-containers.repo [kata-containers] name=Kata Containers baseurl=http://mirror.centos.org/$contentdir/$releasever/virt/$basearch/kata-containers enabled=1 gpgcheck=1 skip_if_unavailable=1 EOF $ sudo -E dnf install -y kata-containers
2.2 检测硬件是否支持 Kata Kata 对硬件的要求需要满足以下任意条件:
Intel VT-x technology.
ARM Hyp mode (virtualization extension).
IBM Power Systems.
IBM Z mainframes.
安装完 kata-runtime
之后,执行检测命令:
1 2 3 4 #kata-runtime kata-check System is capable of running Kata Containers System can currently create Kata Containers
这里的输出表示,运行环境支持 Kata Containers 。
2.3 配置集成kubelet
1 2 3 4 5 mkdir -p /etc/systemd/system/kubelet.service.d/ cat << EOF | sudo tee /etc/systemd/system/kubelet.service.d/0-containerd.conf [Service] Environment="KUBELET_EXTRA_ARGS=--container-runtime=remote --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock" EOF
1 2 systemctl daemon-reload systemctl restart kubelet
这里使用的是 containerd 。如果使用 CRI-O ,配置会不一样。
2.5 给 Kubernetes 提供 kata-runtime 通过直接创建 Container 可以使用 kata-runtime 。但在集群中,我们该如何告诉 Kubernetes 哪些负载需要使用 kata-runtime 呢?根据不同的版本,Kata 提供了不同的方式。
首先都需要生成 containerd 配置文件
1 containerd config default > /etc/containerd/config.toml
这种方式对相关组件版本有要求:
1 2 3 Kata Containers v1.5.0 or above (including 1.5.0-rc) Containerd v1.2.0 or above Kubernetes v1.12.0 or above
我所使用的是
kubernetes: 1.18.10
containerd: 1.2.13
kata : 1.10
在 config.toml 配置文件中,“no_pivot = false”下增加如下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [plugins.cri.containerd.runtimes] [plugins.cri.containerd.runtimes.runc] runtime_type = "io.containerd.runc.v1" [plugins.cri.containerd.runtimes.runc.options] NoPivotRoot = false NoNewKeyring = false ShimCgroup = "" IoUid = 0 IoGid = 0 BinaryName = "runc" Root = "" CriuPath = "" SystemdCgroup = false [plugins.cri.containerd.runtimes.kata] runtime_type = "io.containerd.kata.v2" [plugins.cri.containerd.runtimes.katacli] runtime_type = "io.containerd.runc.v1" [plugins.cri.containerd.runtimes.katacli.options] NoPivotRoot = false NoNewKeyring = false ShimCgroup = "" IoUid = 0 IoGid = 0 BinaryName = "/usr/bin/kata-runtime" Root = "" CriuPath = "" SystemdCgroup = false
这里 [plugins.cri.containerd.runtimes.kata]
中的 kata 将被作为 RuntimeClass handler 关键字。
使用 untrusted_workload_runtime
的方式
对于不符合上述版本要求的环境,可以使用之前的方式。
在配置文件中新增如下内容:
1 2 3 [plugins.cri.containerd.untrusted_workload_runtime] runtime_type = "io.containerd.runtime.v1.linux" runtime_engine = "/usr/bin/kata-runtime"
最后,都需要重启 containerd。
1 2 #systemctl daemon-reload #systemctl restart containerd
三、使用kata-runtime 3.1 RuntimeClass 方式
kata-runtime.yaml
1 2 3 4 5 kind: RuntimeClass apiVersion: node.k8s.io/v1beta1 metadata: name: kata-containers handler: kata
#kubectl create -f kata-runtime.yaml
也可以为 runc 创建 RuntimeClass
1 2 3 4 kubectl get runtimeclass NAME CREATED AT kata-containers 2020-08-30
1 2 3 4 5 6 7 8 9 10 11 12 apiVersion: v1 kind: Pod metadata: name: kata-nginx spec: runtimeClassName: kata-containers containers: - name: nginx image: nginx ports: - containerPort: 80
#kubectl apply -f kata-pod.yaml
检查hypervisor是否运行