kubelet失败,kubelet cgroup驱动程序:“cgroupfs”与docker cgroup驱动程序不同:“systemd”

cgroup driveconfiguration在/etc/systemd/system/kubelet.service.d/10-kubeadm.conf中是正确的

环境= “KUBELET_CGROUP_ARGS = – cgroup的驱动程序= systemd”

我也用cli检查了Environment

$ systemctl show –property =环境kubelet | cat Environment = KUBELET_KUBECONFIG_ARGS = – kubeconfig = / etc / kubernetes / kubelet.conf \ x20 – require-kubeconfig = true KUBELET_SYSTEM_PODS_ARGS = – pod-manifest-path = / etc / kubernetes / manifests \ x20 – allow-privileged = true KUBELET_NETWORK_ARGS = – network-plugin = cni \ x20 – cni-conf-dir = / etc / cni / net.d \ x20 – cni-bin-dir = / opt / cni / bin KUBELET_DNS_ARGS = – cluster- dns = 10.96.0.10 \ x20 – cluster-domain = cluster.local KUBELET_AUTHZ_ARGS = – authorization-mode = Webhook \ x20 – client-ca-file = /etc/kubernetes/pki/ca.crt KUBELET_CADVISOR_ARGS = – cadvisor -port = 0 KUBELET_CGROUP_ARGS = – cgroup-driver = systemd

如何重现它

  • yum install -y docker-1.12.6
  • systemctl启用docker && systemctl启动docker
  • setenforce 0
  • yum install -y kubelet kubeadm
  • systemctl启用kubelet && systemctl启动kubelet
  • systemctl守护进程重新加载
  • systemctl重启kubelet
  • Kubelet日志

环境

  • Kubernetes版本(使用kubectl version ):1.7.3
  • 云提供商或硬件configuration**:4核16G RAM
  • 操作系统(例如从/ etc / os-release):CentOS Linux 7(Core)
  • 内核(例如uname -a ):Linux 10-8-108-92 3.10.0-327.22.2.el7.x86_64#1 SMP Thu Jun 23 17:05:11 UTC 2016 x86_64 x86_64 x86_64 GNU / Linux
  • 安装工具:kubeadm

它看起来像kubelet进程没有加载从/etc/systemd/system/kubelet.service.d/10-kubeadm.conf从错误消息告诉正确的设置。

从聊天中获得更多信息后,我认为有几种可行的方法:

  1. 将kubelet和docker cgroup驱动程序切换到cgroupfs从下面的repo下载cgroupfs ,默认情况下使用cgroupfs

     [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7 enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg 

    并在kubelet conf中更改cgroup驱动程序。 检查错误是否再次发生,以及kubelet从conf中加载的内容。

  2. 在kubelet代码中添加更多的日志来debugging它

    这是kubelet用来从双方获得conf的逻辑

编辑这个文件/etc/systemd/system/kubelet.service.d/10-kubeadm.confsystemd改为cgroupfs “,然后重启kubelet systemctl restart kubelet

可能的原因

kubelet 1.7.3不读configuration文件/etc/systemd/system/kubelet.service.d/10-kubeadm.conf#50748

疑难解答kubeadm

如果您使用CentOS并在设置主节点时遇到困难,请确认您的Docker cgroup驱动程序与kubelet config相匹配:

 docker info | grep -i cgroup cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 

如果Docker cgroup驱动程序和kubeletconfiguration不匹配,请将kubeletconfiguration更改为与Docker cgroup驱动程序匹配。 您需要更改的标志是–cgroup-driver。 如果它已经设置,你可以像这样更新:

 sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 

这可以被replace为:

 CG=$(sudo docker info 2>/dev/null | sed -n 's/Cgroup Driver: \(.*\)/\1/p') sed -i "s/cgroup-driver=systemd/cgroup-driver=$CG/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf