19

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

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

我还检查了Environmentwith cli

$ 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

如何重现它

  • 百胜安装 -y docker-1.12.6
  • systemctl enable docker && systemctl start docker
  • 设置强制 0
  • yum install -y kubelet kubeadm
  • systemctl enable kubelet && systemctl start kubelet
  • systemctl 守护进程重载
  • 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
4

11 回答 11

8

在我的环境中,它只能以相反的方式工作。设置 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"
  ]
}

然后 reload systemctlsystemctl daemon-reload 杀掉之前的 minikub configminikube delete 重新启动 minikubeminikube 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

一切顺利,玩得开心

于 2019-04-27T06:23:40.723 回答
6

可能的原因

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

解决方案

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
于 2017-12-14T07:35:37.433 回答
5

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

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

KUBELET_KUBEADM_ARGS=--cgroup-driver=cgroupfs --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
于 2019-06-18T20:43:18.397 回答
3

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

于 2018-06-11T12:23:09.743 回答
2

做相反的事情并让 kubelet 使用 systemd 可能会更好

在 Kubernetes 站点中,他们推荐使用 systemd https://kubernetes.io/docs/setup/production-environment/container-runtimes/ 更多细节在这里

您可以按照https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ 将其添加到 /etc/sysconfig/kubelet来更改 kubelet 以使用 systemd


cat /etc/sysconfig/kubelet 
KUBELET_EXTRA_ARGS=--cgroup-driver=systemd
于 2020-03-11T06:51:11.453 回答
2

看起来 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 驱动程序。检查错误是否再次发生以及 kubelet 从其 conf 加载的内容。

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

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

于 2017-08-16T08:31:07.567 回答
1

操作系统:Centos 7.4 因为 kubernetes 1.23.1 推荐使用 cgroup systemd,docker 20.10.20 使用 cgroup cgroupfs。因此,您必须更改 docker 服务文件。

step1:停止docker服务

systemctl stop docker

step2:更改文件/etc/systemd/system/multi-user.target.wants/docker.service/usr/lib/systemd/system/docker.service

从 :

`ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock`

至:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd

step3:启动docker服务和kubelet

systemctl start docker
kubeadm init phase kubelet-start
于 2021-12-20T13:13:12.437 回答
1

我在 Ubuntu 18.04 LTS 和 Kubernetes v1.22.6 以及最新版本的 Docker CE 和 Containerd 中按照以下步骤操作。

我已更改 docker 服务文件以将其更改为 systemd。在旧版本的 kubeadm、kubectl 和 kubelet 直到 1.21.1 都没有问题。

并且未来 docker 服务应该默认使用 systemd。

第 1 步:停止 docker 服务

    `systemctl stop docker`

第 2 步:更改文件 /etc/systemd/system/multi-user.target.wants/docker.service 和 /usr/lib/systemd/system/docker.service

注意:文件 /usr/lib/systemd/system/docker.service 在我的系统中不可用。

从 :

    `ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock`

至:

    `ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd`

第三步:启动docker服务和kubelet服务

    `systemctl daemon-reload`
    `systemctl start docker`
    

第 4 步:由于我运行了 kubeadm reset,我必须运行 kubeadm init。但它奏效了。

第 0 步:在所有这些之前,需要运行几个命令以使 containerd 能够使用 systemd。

猫 <<EOF | sudo tee /etc/modules-load.d/containerd.conf 覆盖 br_netfilter EOF

sudo modprobe 覆盖 sudo modprobe br_netfilter

设置所需的 sysctl 参数,这些参数在重新启动后仍然存在。

猫 <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF

应用 sysctl 参数而不重新启动

sudo sysctl --system

Kubernetes 容器运行时

于 2022-02-12T09:06:38.070 回答
0

https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/

使用 cgroupfs 驱动程序 如本指南所述,不建议将 cgroupfs 驱动程序与 kubeadm 一起使用。

要继续使用 cgroupfs 并防止 kubeadm upgrade 在现有设置上修改 KubeletConfiguration cgroup 驱动程序,您必须明确其值。这适用于您不希望未来版本的 kubeadm 默认应用 systemd 驱动程序的情况。

有关如何明确该值的详细信息,请参阅下面的“修改 kubelet ConfigMap”部分。

如果您希望将容器运行时配置为使用 cgroupfs 驱动程序,则必须参考您选择的容器运行时的文档

转到将配置 docker cgroupfs 更改为 systemd

编辑:/etc/docker/daemon.json

{
  "exec-opts": ["native.cgroupdriver=systemd"]
}

重启服务泊坞窗

systemctl daemon-reload && systemctl restart docker && systemctl restart kubelet

显示配置

docker info |grep Cgroup
于 2022-02-06T19:50:35.357 回答
0

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

于 2017-10-05T13:39:38.523 回答
0

更改此答案中提到的 dockers cgroup 驱动程序对我有用。

于 2021-10-13T14:44:18.073 回答