环境配置

# 1、前提条件 `OS:CentOS Stream 8` `Kubernetes:1.27.3` ![image.png](https://cos.easydoc.net/36024082/files/ludnfddh.png) `使用kubeadm部署集群` ![image.png](https://cos.easydoc.net/36024082/files/ludnfu32.png) `高层运行时:Containerd` `低层运行时:Kata Containers、runc` ![image.png](https://cos.easydoc.net/36024082/files/ludng1bh.png) `Master节点不能有Taint` ![image.png](https://cos.easydoc.net/36024082/files/ludng61w.png) `SELinux需设置为disabled` ![image.png](https://cos.easydoc.net/36024082/files/ludnga95.png) # 2、配置虚拟机 **修改服务器版本的虚拟机** ``` ls /etc/sysconfig/network-scripts/ ONBOOT=yes IPADDR=192.168.89.134 GATEWAY=192.168.89.2 DNS1=119.29.29.29 BOOTROTO=static ``` **更改主机名** ``` hostnamectl set-hostname coco uname -n ``` **映射主机地址** ``` vim /etc/hosts 192.168.89.134 coco ``` **修改静态ip** ``` cd /etc/sysconfig/network-scripts/ ``` **关闭防火墙** ``` systemctl disable firewalld systemctl stop firewalld firewall-cmd --state not running ``` **关闭SELinux** ``` sestatus sudo vim /etc/selinux/config disabled ``` **时间同步** ``` crontab -e 0 */1 * * * ntpdate timel.aliyun.com ``` **网桥过滤** ``` cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 vm.swappiness = 0 EOF ``` **开启 be_netfilter** ``` modprobe br_netfilter sysctl -p /etc/sysctl.d/k8s.conf lsmod | grep br_netfilter #自启动 touch /etc/modules-load.d/modules.conf vim /etc/modules-load.d/modules.conf 添加"br_netfilter" ``` **安装** ``` yum -y install ipset ipvsadm cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack EOF chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack ``` **关闭内存交换** ``` #临时关闭 swapoff -a free -m #永久关闭 vim /etc/fstab 注释掉 #/dev/mapper/cs-swap none swap defaults 0 0 重启 ``` **修改代理** ``` vim .bashrc export http_proxy="http://172.24.39.216:7890" export https_proxy="http://172.24.39.216:7890" source ~/.bashrc ``` **修改containerd代理** ``` vim /etc/systemd/system/containerd.service [Service] Environment="HTTP_PROXY=http://172.24.39.216:7890" Environment="HTTPS_PROXY=http://172.24.39.216:7890" systemctl daemon-reload systemctl restart containerd systemctl restart kubelet ``` **修改kubelet代理** ``` vim /usr/lib/systemd/system/kubelet.service [Service] Environment="HTTP_PROXY=http://172.24.39.216:7890" Environment="HTTPS_PROXY=http://172.24.39.216:7890" systemctl daemon-reload systemctl restart kubelet ``` **更新内核** ``` rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org #yum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm yum --enablerepo="elrepo-kernel" -y install kernel-lt.x86_64 grub2-set-default 0 grub2-mkconfig -o /boot/grub2/grub.cfg ``` # 3、安装containerd **下载并解压** ``` wget https://github.com/containerd/containerd/releases/download/v1.7.11/cri-containerd-cni-1.7.11-linux-amd64.tar.gz tar xf cri-containerd-cni-1.7.11-linux-amd64.tar.gz -C / ``` **删除文件** ``` ls /etc/cni/net.d mv /etc/cni/net.d/10-containerd-net.conflist /home ``` **配置containerd** ``` mkdir /etc/containerd containerd config default > /etc/containerd/config.toml vim /etc/containerd/config.toml 3.8 -> 3.9 ``` **开机自启动** ``` systemctl enable --now containerd containerd –version ``` # 4、kata containers安装(Linux):需开启嵌套虚拟化 (无需安装) **下载** ``` wget https://github.com/kata-containers/kata-containers/releases/download/3.2.0/kata-static-3.2.0-amd64.tar.xz ``` **解压** ``` tar xf kata-static-3.2.0-amd64.tar.xz ``` **移动文件** ``` sudo mv opt/kata /opt ``` **创建文件夹** ``` sudo mkdir /etc/kata-containers ``` **移动文件** ``` sudo cp /opt/kata/share/defaults/kata-containers/configuration.toml /etc/kata-containers/configuration.toml ``` **创建软链接** ``` ln -sf /opt/kata/bin/containerd-shim-kata-v2 /usr/local/bin/containerd-shim-kata-v2 ln -sf /opt/kata/bin/kata-runtime /usr/local/bin/kata-runtime ln -sf /opt/kata/bin/kata-monitor /usr/local/bin/kata-monitor ``` **解决VMW冲突问题** ``` cat > /etc/modprobe.d/blacklist-vmware.conf << EOF blacklist vmw_vsock_virtio_transport_common blacklist vmw_vsock_vmci_transport EOF ``` **重启** ``` init 6 或 sudo reboot ``` **测试是否安装成功** ``` kata-runtime check --no-network-checks ``` **启动br_netfilter** ``` modprobe br_netfilter ``` # 5、修改runc到kata containers **修改配置文件** ``` vim /etc/containerd/config.toml registry.k8s.io/pause:3.9 registry.aliyuncs.com/google_containers/pause:3.9 112行 runc -- kata [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata] runtime_type = "io.containerd.kata.v2" ``` **设置默认为kata** ``` Default Runtime_type=kata.v2 ``` **重启** ``` systemctl daemon-reload systemctl restart containerd systemctl restart kubelet ``` # 6、kubeadm、kubelet、kubectl安装 **下载源** ``` cat > /etc/yum.repos.d/k8s.repo << EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_ gpgcheck=1 gpgkey= https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF ``` **下载Kubeadm** ``` yum -y install kubeadm kubelet kubectl yum -y install kubeadm-1.27.3-0 kubelet-1.27.3-0 kubectl-1.27.3-0 yum list kubeadm.x86_64 –showduplicates | sort -r ``` **修改配置文件** ``` vim /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--cgroup-driver=systemd" ``` **自启动** ``` systemctl enable kubelet ``` **卸载kubeadm** ``` sudo yum remove -y kubeadm kubectl kubelet kubernetes-cni kube* sudo yum autoremove -y ``` # 7、部署集群 ==modprobe br_netfilter== **集群初始化** ``` kubeadm init --kubernetes-version=v1.27.3 --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.89.134 --cri-socket unix:///var/run/containerd/containerd.sock ``` **或** ``` kubeadm init --kubernetes-version=v1.27.3 --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.0.0.0/16 --apiserver-advertise-address=192.168.89.134 --cri-socket unix:///var/run/containerd/containerd.sock ``` **创建文件** ``` mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` **配置flannel** ``` kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml 或 kubectl apply -f kube-flannel.yml ``` **修改子网** ```yaml net-conf.json: | { "Network": "10.0.0.0/16", "Backend": { "Type": "vxlan" } } ``` **配置calico** ``` v3.26.4 kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/tigera-operator.yaml v3.27.2 kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.2/manifests/tigera-operator.yaml v3.26.4 wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/custom-resources.yaml v3.27.2 wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.2/manifests/custom-resources.yaml raw.githubusercontent.com 无法访问 vim /etc/hosts 加入185.199.108.133 raw.githubusercontent.com 修改子网 vim custom-resources.yaml cidr=10.244.0.0/16 配置 kubectl create -f custom-resources.yaml 删除 kubectl delete -f custom-resources.yaml kubectl get ns 命名空间 kubectl get pods -n calico-system watch kubectl get pods -n calico-system kubectl get nodes ``` **去Taints(使pod能在master节点运行)** ``` kubectl describe nodes coco |grep Taints 如果是pending状态: Taints: node-role.kubernetes.io/control-plane:NoSchedule kubectl taint node coco node-role.kubernetes.io/control-plane- ``` **重置集群** ``` kubeadm reset rm -rf $HOME/.kube rm -rf /var/lib/calico ``` # 8、执行Confidential Containers(CoCo) **添加 label** ``` kubectl get nodes kubectl label node "coco" "node-role.kubernetes.io/worker=" ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnjg5l.png) ![image.png](https://cos.easydoc.net/36024082/files/ludnjshh.png) **安装operator controller** ``` setenforce 0 export KUBECONFIG=/etc/kubernetes/admin.conf kubectl apply -k github.com/confidential-containers/operator/config/release?ref=v0.2.0 报错信息:没有git sudo yum install git git --version ``` **查看confidential-containers-system内的pod** ``` kubectl get pods -n confidential-containers-system ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnk5xy.png) **#安装ccruntime-ssh-demo 运行时** ``` kubectl apply -f https://raw.githubusercontent.com/confidential-containers/operator/v0.2.0/config/samples/ccruntime-ssh-demo.yaml ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnktob.png) **#查看confidential-containers-system内的pod** ``` kubectl get pods -n confidential-containers-system --watch ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnkyls.png) **第一个问题:镜像无法拉取** ``` kubectl describe pods cc-operator-controller-manager-86d9c5b45c-bvfdg -n confidential-containers-system ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnl9ez.png) ``` #修改containerd代理 vim /etc/systemd/system/containerd.service [Service] Environment="HTTP_PROXY=http://172.24.58.120:7890" Environment="HTTPS_PROXY=http://172.24.58.120:7890" systemctl daemon-reload systemctl restart containerd systemctl restart kubelet #修改kubelet代理 vim /usr/lib/systemd/system/kubelet.service [Service] Environment="HTTP_PROXY=http://172.24.58.120:7890" Environment="HTTPS_PROXY=http://172.24.58.120:7890" systemctl daemon-reload systemctl restart kubelet ``` **第二个问题:Kata Containers运行很慢** ``` 测试Kata Containers: kata-runtime check --no-network-checks ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnmk7s.png) ``` ctr image pull ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1 ctr run --runtime --rm -t ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1 test-kata 运行正常 ctr run --runtime "io.containerd.kata.v2" --rm -t ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1 test-kata 运行超时、死机 ctr image pull docker.io/library/busybox:latest ctr run --runtime "io.containerd.kata.v2" --rm -t docker.io/library/busybox:latest test-kata Linux内核版本太低,升级一下内核即可。 4.18-->5.4 ``` **重启dns pod** ``` kubectl delete pod -n kube-system -l k8s-app=kube-dns ``` ``` kubectl create secret docker-registry dockerhub-secret \ --docker-server=https://index.docker.io/v1/ \ --docker-username=2055331743 \ --docker-password=2002030209 \ --docker-email=2055331605@qq.com ``` **创建confidential pod** ``` vim coco-demo.yaml ``` ``` kind: Service apiVersion: v1 metadata: name: coco-demo spec: selector: app: coco-demo ports: - port: 22 --- kind: Deployment apiVersion: apps/v1 metadata: name: coco-demo spec: selector: matchLabels: app: coco-demo template: metadata: labels: app: coco-demo spec: runtimeClassName: kata #改为kata-clh containers: - name: coco-demo image: docker.io/katadocker/ccv0-ssh imagePullPolicy: Always ``` **执行yaml文件** ``` kubectl apply -f coco-demo.yaml ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnnjee.png) **查看pod** ``` kubectl get pods ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnnphg.png) **第三个问题:无法拉取加密的镜像** ``` kubectl delete service coco-demo kubectl delete deployment coco-demo ``` ``` kubectl delete pod --force --grace-period=0 ``` ``` kubectl delete -f https://raw.githubusercontent.com/confidential-containers/operator/v0.2.0/config/samples/ccruntime-ssh-demo.yaml find / -type d -name "keys" kubectl exec -it cc-operator-daemon-install-9jwpg -n confidential-containers-system -- /bin/sh Warning Failed 16s kubelet Failed to pull image "docker.io/katadocker/ccv0-ssh": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/katadocker/ccv0-ssh:latest": failed to extract layer sha256:1a058d5342cc722ad5439cacae4b2b4eedde51d8fe8800fcf28444302355c16d: Unable to get decryption keys in provided key path: lstat /etc/containerd/ocicrypt/keys/key.pem: no such file or directory Warning Failed 2m52s (x4 over 4m28s) kubelet Failed to pull image "docker.io/katadocker/ccv0-ssh": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/katadocker/ccv0-ssh:latest": failed to extract layer sha256:1a058d5342cc722ad5439cacae4b2b4eedde51d8fe8800fcf28444302355c16d: Unable to get decryption keys in provided key path: Unknown decryption key type ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnoc4b.png) ![1 1.png](https://cos.easydoc.net/36024082/files/ludo3jp1.png) ![image.png](https://cos.easydoc.net/36024082/files/ludnp5dh.png) **获取pod的ip地址** ``` echo $(kubectl get service coco-demo -o jsonpath="{.spec.clusterIP}") ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnph44.png) **下载SSH公钥** ``` curl -Lo ccv0-ssh https://raw.githubusercontent.com/confidential-containers/documentation/main/demos/ssh-demo/ccv0-ssh chmod 600 ccv0-ssh ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnppiw.png) **连接容器** ``` ssh -i ccv0-ssh root@10.111.147.157 ``` ![2 1.png](https://cos.easydoc.net/36024082/files/ludo2us2.png) ![image.png](https://cos.easydoc.net/36024082/files/ludnqhd0.png) ![image.png](https://cos.easydoc.net/36024082/files/ludnqmho.png) **验证容器运行在虚拟机内:** ``` ps aux | grep /opt/confidential-containers/bin/qemu-system-x86_64 ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnquog.png) **验证主机访问不到容器的镜像** ``` sudo ctr -n "k8s.io" image check name==docker.io/katadocker/ccv0-ssh ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnrd7p.png) ``` cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: busybox spec: containers: - name: busybox image: quay.io/prometheus/busybox:latest command: ['tail', '-f', '/dev/null'] EOF sudo ctr -n "k8s.io" image check name==quay.io/prometheus/busybox:latest ``` ![image.png](https://cos.easydoc.net/36024082/files/ludns1h9.png) ![image.png](https://cos.easydoc.net/36024082/files/ludnskng.png) ![image.png](https://cos.easydoc.net/36024082/files/ludnsxc1.png) **验证容器的镜像是加密的** ``` #下载skopeo dnf -y install skopeo-1.10.0 ``` ``` #查看镜像信息 skopeo inspect docker://docker.io/katadocker/ccv0-ssh:latest ``` ![3 1.png](https://cos.easydoc.net/36024082/files/ludo2856.png) ``` #安装Rust curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable source "$HOME/.cargo/env" ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnv060.png) ``` #安装attestation-agent git clone https://github.com/confidential-containers/attestation-agent ``` ![4 1.png](https://cos.easydoc.net/36024082/files/ludo4c84.png) ``` #启动attestation-agent cd attestation-agent git checkout v0.2.0 -b v0.2.0 ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnwhh8.png) ``` sudo dnf install -y cmake gcc gcc-c++ ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnwo1p.png) ``` make KBC=offline_fs_kbc ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnwua8.png) ``` ./app/target/x86_64-unknown-linux-gnu/release/attestation-agent --keyprovider_sock 127.0.0.1:50000 --getresource_sock 127.0.0.1:50001 & ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnx1lq.png) ``` cat /tmp/ocicrypt_config.json ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnx7cn.png) ``` cat /etc/aa-offline_fs_kbc-keys.json ``` ![image.png](https://cos.easydoc.net/36024082/files/ludnxe0j.png) ``` #解密镜像 OCICRYPT_KEYPROVIDER_CONFIG=/tmp/ocicrypt_config.json skopeo copy "docker://docker.io/katadocker/ccv0-ssh:latest" "oci:ccv0-ssh_decrypted:latest" --remove-signatures --insecure-policy --decryption-key "provider:attestation-agent:offline_fs_kbc::null" ``` ![5.png](https://cos.easydoc.net/36024082/files/ludo5qpq.png) ``` #查看解密之后的镜像 skopeo inspect "oci:ccv0-ssh_decrypted:latest" ``` ![6.png](https://cos.easydoc.net/36024082/files/ludo5zpg.png) # 9、解决集群不稳定 **不稳定的原因** ![ludnkyls.png](https://cos.easydoc.net/36024082/files/luqpwdjs.png) **pod有三个作用** **第一个作用:在/opt目录下创建confidential-containers** ![图片.png](https://cos.easydoc.net/36024082/files/luqpy29e.png) **第二个作用:在/etc/containerd/config.toml文件下写入以下内容** ```toml [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata] cri_handler = "cc" runtime_type = "io.containerd.kata.v2" privileged_without_host_devices = true pod_annotations = ["io.katacontainers.*"] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata.options] ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration.toml" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu] cri_handler = "cc" runtime_type = "io.containerd.kata-qemu.v2" privileged_without_host_devices = true pod_annotations = ["io.katacontainers.*"] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu.options] ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration-qemu.toml" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu-tdx] cri_handler = "cc" runtime_type = "io.containerd.kata-qemu-tdx.v2" privileged_without_host_devices = true pod_annotations = ["io.katacontainers.*"] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu-tdx.options] ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-tdx.toml" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu-tdx-eaa-kbc] cri_handler = "cc" runtime_type = "io.containerd.kata-qemu-tdx-eaa-kbc.v2" privileged_without_host_devices = true pod_annotations = ["io.katacontainers.*"] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu-tdx-eaa-kbc.options] ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-tdx-eaa-kbc.toml" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu-sev] cri_handler = "cc" runtime_type = "io.containerd.kata-qemu-sev.v2" privileged_without_host_devices = true pod_annotations = ["io.katacontainers.*"] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu-sev.options] ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-sev.toml" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-clh] cri_handler = "cc" runtime_type = "io.containerd.kata-clh.v2" privileged_without_host_devices = true pod_annotations = ["io.katacontainers.*"] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-clh.options] ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration-clh.toml" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-clh-tdx] cri_handler = "cc" runtime_type = "io.containerd.kata-clh-tdx.v2" privileged_without_host_devices = true pod_annotations = ["io.katacontainers.*"] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-clh-tdx.options] ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration-clh-tdx.toml" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-clh-tdx-eaa-kbc] cri_handler = "cc" runtime_type = "io.containerd.kata-clh-tdx-eaa-kbc.v2" privileged_without_host_devices = true pod_annotations = ["io.katacontainers.*"] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-clh-tdx-eaa-kbc.options] ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration-clh-tdx-eaa-kbc.toml" ``` **第三个作用:创建runtimeclass** ![图片.png](https://cos.easydoc.net/36024082/files/luqq11lt.png) **解决办法** **复制文件** ``` cp -r /opt/confidential-containers /home ``` **删除ccruntime运行时** ``` kubectl delete -f https://raw.githubusercontent.com/confidential-containers/operator/v0.2.0/config/samples/ccruntime-ssh-demo.yaml ``` **删除operator** ``` kubectl delete -k github.com/confidential-containers/operator/config/release?ref=v0.2.0 ``` **移动confidential-containers到/opt下** ``` mv /home/confidential-containers /opt ``` **在config.toml文件下添加配置** ``` vim /etc/containerd/config.toml ``` ```toml [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata] cri_handler = "cc" runtime_type = "io.containerd.kata.v2" privileged_without_host_devices = true pod_annotations = ["io.katacontainers.*"] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata.options] ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration.toml" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu] cri_handler = "cc" runtime_type = "io.containerd.kata-qemu.v2" privileged_without_host_devices = true pod_annotations = ["io.katacontainers.*"] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu.options] ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration-qemu.toml" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu-tdx] cri_handler = "cc" runtime_type = "io.containerd.kata-qemu-tdx.v2" privileged_without_host_devices = true pod_annotations = ["io.katacontainers.*"] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu-tdx.options] ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-tdx.toml" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu-tdx-eaa-kbc] cri_handler = "cc" runtime_type = "io.containerd.kata-qemu-tdx-eaa-kbc.v2" privileged_without_host_devices = true pod_annotations = ["io.katacontainers.*"] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu-tdx-eaa-kbc.options] ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-tdx-eaa-kbc.toml" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu-sev] cri_handler = "cc" runtime_type = "io.containerd.kata-qemu-sev.v2" privileged_without_host_devices = true pod_annotations = ["io.katacontainers.*"] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu-sev.options] ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-sev.toml" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-clh] cri_handler = "cc" runtime_type = "io.containerd.kata-clh.v2" privileged_without_host_devices = true pod_annotations = ["io.katacontainers.*"] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-clh.options] ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration-clh.toml" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-clh-tdx] cri_handler = "cc" runtime_type = "io.containerd.kata-clh-tdx.v2" privileged_without_host_devices = true pod_annotations = ["io.katacontainers.*"] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-clh-tdx.options] ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration-clh-tdx.toml" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-clh-tdx-eaa-kbc] cri_handler = "cc" runtime_type = "io.containerd.kata-clh-tdx-eaa-kbc.v2" privileged_without_host_devices = true pod_annotations = ["io.katacontainers.*"] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-clh-tdx-eaa-kbc.options] ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration-clh-tdx-eaa-kbc.toml" ``` **创建kata-qemu运行时** ``` vim kata-qemu.yaml ``` **写入以下内容** ```yaml apiVersion: node.k8s.io/v1 kind: RuntimeClass metadata: name: kata-qemu handler: kata-qemu ``` **运行** ``` kubectl apply -f kata-qemu.yaml ``` ![图片.png](https://cos.easydoc.net/36024082/files/luqqhsal.png) **另一个问题:以下两个Pod重启之后异常** ![图片.png](https://cos.easydoc.net/36024082/files/luqqjd0f.png) **解决办法** **重启dns pod** ``` kubectl delete pod -n kube-system -l k8s-app=kube-dns ``` **拉取机密容器镜像时显示Not authorized** ![QQ图片20240408171628.jpg](https://cos.easydoc.net/36024082/files/luqqnkln.jpg) **可能是网络问题,第二天重试即可** ``` kubectl apply -f coco-demo.yaml ``` ``` kubectl delete service coco-demo kubectl delete deployment coco-demo ``` ``` ssh -i ccv0-ssh root@$(kubectl get service coco-demo -o jsonpath="{.spec.clusterIP}") ```