使用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

有关文档关于这个的说明

官方文档说明:

posted @ 2022-07-05 11:32  哈喽哈喽111111  阅读(1888)  评论(0编辑  收藏  举报