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

时间:2017-08-16 08:00:53

标签: linux docker kubernetes kubeadm kubelet

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 enable docker&& systemctl start docker
  • setenforce 0
  • yum install -y kubelet kubeadm
  • systemctl enable kubelet&& systemctl start kubelet
  • systemctl daemon-reload
  • systemctl restart kubelet
  • kubelet log

环境

  • Kubernetes版本(使用kubectl version):1.7.3
  • 云提供商或硬件配置**:4核16G RAM
  • OS(例如来自/ 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

8 个答案:

答案 0 :(得分:3)

可能的原因

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

解决方案

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

看起来kubelet进程没有从错误消息中的var str = MYExecutionStrategy(3, TimeSpan.FromSeconds(1)); str.Execute(() => { using (DemoEntities objContext = GetWDemoEntities ()) { using (TransactionScope obj = new TransactionScope()) { Demo1 objDemo1 = new Demo1(); objDemo1.Title = "ABC"; objContext.Demo1.Add(objDemo1); objContext.SaveChanges(); // First SaveChanges() method called. Demo2 objDemo2 = new Demo2(); objDemo2.Title = "ABC"; objContext.Demo2.Add(objDemo2); objContext.SaveChanges();// Second SaveChanges() method called. obj.Complete(); } } } 加载正确的设置。

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

  1. 将kubelet和docker cgroup驱动程序切换为/etc/systemd/system/kubelet.service.d/10-kubeadm.conf 从下面的repo下载docker,默认情况下使用cgroupfs

    cgroupfs

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

  2. 在kubelet代码中添加更多日志以进行调试

    This是逻辑kubelet用于从双方获取conf

答案 3 :(得分:1)

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

答案 4 :(得分:1)

相反,最好使kubelet使用systemd

在Kubernetes网站上,他们建议使用systemd https://kubernetes.io/docs/setup/production-environment/container-runtimes/ 更多详细信息here

您可以通过以下命令将kubelet更改为使用systemd https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ 将此添加到/ etc / sysconfig / kubelet


cat /etc/sysconfig/kubelet 
KUBELET_EXTRA_ARGS=--cgroup-driver=systemd

答案 5 :(得分: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,这将解决您的问题。

答案 6 :(得分: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"
  ]
}

然后重新加载系统ctl 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 onfig参数启动您的minikube

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

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

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

祝一切顺利,玩得开心

答案 7 :(得分: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 driver相同。 旧内容:

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