使用kubeoperator安装的k8s集群以及采用的containerd容器运行时,关于采用的是cgroup 驱动还是systemd 驱动的说明
使用kubeoperator安装的k8s集群,默认使用的是systemd驱动
# kubectl get cm -n kube-system
NAME DATA AGE
calico-config 4 3d22h
coredns 1 3d23h
extension-apiserver-authentication 6 3d23h
ingress-controller-leader 0 3d22h
ingress-nginx 0 3d22h
kube-proxy 2 3d23h
kube-root-ca.crt 1 3d23h
kubeadm-config 1 3d23h
kubelet-config-1.22 1 3d23h
node-local-dns 1 3d22h
tcp-services 0 3d22h
udp-services 0 3d22h
# kubectl edit cm kubelet-config-1.22 -n kube-system
但是与之对应的containerd容器运行时使用的 cgroupfs 驱动
# cat /etc/containerd/config.toml
若是修改containerd容器运行时使用的 systemd 驱动,创建pod失败,报错如下:
要使用systemdcgroup驱动程序,请在/etc/containerd/config.toml中进行设置plugins.cri.systemd_cgroup = true。
Warning FailedCreatePodSandBox 2m56s (x16 over 3m11s) kubelet (combined from similar events): Failed to create pod sandbox: rpc error: code = Unknown desc = failed to create containerd task: OCI runtime create failed: runc create failed: expected cgroupsPath to be of format "slice:prefix:name" for systemd cgroups, got "/kubepods/besteffort/pode7f89a1a-7b40-4178-9ce4-4ad863bf08bb/7cd207ac8d8df9cde147d233bcd5c646c403f4b99048208c661aefd06cc5137d" instead: unknown
注意:更改已加入集群的节点的 cgroup 驱动是一项敏感的操作。 如果 kubelet 已经使用某 cgroup 驱动的语义创建了 pod,更改运行时以使用 别的 cgroup 驱动,当为现有 Pods 重新创建 PodSandbox 时会产生错误。 重启 kubelet 也可能无法解决此类问题。如果你有切实可行的自动化方案,使用其他已更新配置的节点来替换该节点, 或者使用自动化方案来重新安装。
意思是说只能通过 先配置containerd为systemd 驱动后,再给集群添加新节点的方式来解决
或者等kubeoperator 版本更新,后续修改containerd容器运行时使用驱动systemd
有关文档关于这个的说明
官方文档说明: