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

问题描述 投票:3回答:7

cgroup driver的配置正确在/etc/systemd/system/kubelet.service.d/10-kubeadm.conf

Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"

我还用cli检查了Environment

$ systemctl show --property=Environment 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

KUBELET_CGROUP_ARGS=--cgroup-driver=systemd

如何重现它:

  • yum install -y docker-1.12.6
  • systemctl启用docker && systemctl启动docker
  • setenforce 0
  • yum install -y kubelet
  • systemctl enable backup && systemctl start kubelet
  • systemctl daemon-reload
  • systemctl重启kubelet
  • kubelet日志

环境:

  • Kubernetes版本(使用kubectl version):1.7.3
  • 云提供商或硬件配置**:4核16G RAM
  • 操作系统(例如来自/ etc / os-release):CentOS Linux 7(核心版)
  • 内核(例如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
linux docker kubernetes kubeadm kubelet
7个回答
3
投票

Possible cause

kubelet 1.7.3 not reading config file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf #50748

Solution

Troubleshooting kubeadm

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

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

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

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

这可以替换为:

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

2
投票

为了让MINOS在CentOS 7上运行,我需要按照--extra-config=kubelet.cgroup-driver=systemd的建议用https://github.com/kubernetes/minikube/issues/2192启动它。


1
投票

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

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

  1. 将kubelet和docker cgroup驱动程序切换到cgroupfs从下面的repo下载docker默认情况下使用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驱动程序。检查错误是否再次发生以及从其conf中加载的kubelet。
  2. 在kubelet代码中添加更多日志以进行调试 This是逻辑kubelet用来从双方获得conf

1
投票

编辑此文件/etc/systemd/system/kubelet.service.d/10-kubeadm.conf将systemd更改为cgroupfs“。然后重新启动kubelet systemctl restart kubelet


0
投票

首先安装docker:

yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm

yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.0.ce-1.el7.centos.x86_64.rpm

[root@cgfs-dock ~]# docker info | grep -i cgroup
Cgroup Driver: cgroupfs

然后安装kubelet,这将解决您的问题。


0
投票

在我的环境中,它只是相反的方式。设置systemd结果总是出错。这是我目前的设置

OS: CentOS 7.6.1810 
Minikube Version v1.0.0
Docker Version  18.06.2-ce

我的解决方案是:检查/etc/docker/daemon.json并将systemd更改为cgroupfs

{
  "exec-opts": ["native.cgroupdriver=cgroupfs"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}

然后重新加载systemctl systemctl daemon-reload杀死以前的minikub配置minikube delete并再次启动minikube minikube start --vm-driver=none

现在检查命令行输出应该在两个输出中找到cgroupfs

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

最后你应该看到

   kubectl is now configured to use "minikube"
=   Done! Thank you for using minikube!

简单的解决方案:使用Extra config参数启动minikube

--extra-config=kubelet.cgroup-driver=systemd

启动minikube的完整命令是下一行

minikube start --vm-driver=none --extra-config=kubelet.cgroup-driver=systemd

一切都很好,玩得开心


0
投票

这是由初始启动期间的错误配置引起的。例如,在执行kubeadm init命令之前伪造更改docker cgroup驱动程序。

要在CentOS下解决此问题,请打开/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf或在您的操作系统下找到该文件。使用EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env找到该条目。打开此文件并将--cgroup-driver的值更改为systemd或与docker cgroup驱动程序相同。旧内容:

KUBELET_KUBEADM_ARGS=--cgroup-driver=cgrouopfs --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1

新内容:

KUBELET_KUBEADM_ARGS=--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1
© www.soinside.com 2019 - 2024. All rights reserved.