Yuw*_*Yan 6 linux docker kubernetes kubelet kubeadm
配置cgroup driver
正确/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
Run Code Online (Sandbox Code Playgroud)
我也Environment
用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
Run Code Online (Sandbox Code Playgroud)
KUBELET_CGROUP_ARGS=--cgroup-driver=systemd
如何复制它:
环境:
kubectl version
):1.7.3uname -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在我的环境中,它只能以相反的方式工作。设置 systemd 总是会导致错误。这是我当前的设置
OS: CentOS 7.6.1810
Minikube Version v1.0.0
Docker Version 18.06.2-ce
Run Code Online (Sandbox Code Playgroud)
我的解决方案是:检查/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"
]
}
Run Code Online (Sandbox Code Playgroud)
然后重新加载systemctlsystemctl daemon-reload
杀死之前的minikub配置minikube delete
并再次启动minikubeminikube start --vm-driver=none
现在检查命令行输出应该 cgroupfs
在两个输出中找到
docker info | grep -i cgroup
cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Run Code Online (Sandbox Code Playgroud)
最后你应该看到
kubectl is now configured to use "minikube"
= Done! Thank you for using minikube!
Run Code Online (Sandbox Code Playgroud)
简单的解决方案: 使用 Extra config 参数启动你的 minikube
--extra-config=kubelet.cgroup-driver=systemd
Run Code Online (Sandbox Code Playgroud)
启动 minikube 的完整命令是下一行
minikube start --vm-driver=none --extra-config=kubelet.cgroup-driver=systemd
Run Code Online (Sandbox Code Playgroud)
祝一切顺利,玩得开心
这是由于初始启动期间配置错误造成的。例如,在执行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=cgroupfs --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1
Run Code Online (Sandbox Code Playgroud)
新内容:
KUBELET_KUBEADM_ARGS=--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1
Run Code Online (Sandbox Code Playgroud)
最好做相反的事情,让 kubelet 使用 systemd
在 Kubernetes 站点中,他们建议使用 systemd https://kubernetes.io/docs/setup/product-environment/container-runtimes/ 更多详细信息请参见此处
您可以按照 https://kubernetes.io/docs/setup/product-environment/tools/kubeadm/install-kubeadm/ 将其添加到 /etc/sysconfig/kubelet来更改 kubelet 以使用 systemd
cat /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS=--cgroup-driver=systemd
Run Code Online (Sandbox Code Playgroud)
kubelet 1.7.3 不读取配置文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf #50748
如果您使用 CentOS,在设置主节点时遇到困难?验证您的 Docker cgroup 驱动程序是否与 kubelet 配置匹配:
docker info | grep -i cgroup
cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Run Code Online (Sandbox Code Playgroud)
如果 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
Run Code Online (Sandbox Code Playgroud)
这可以替换为:
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
Run Code Online (Sandbox Code Playgroud)
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
从错误消息来看,kubelet 进程似乎没有加载正确的设置。
从聊天中获得更多信息后,我认为有几种可能的方法:
将 kubelet 和 docker cgroup 驱动程序切换为从默认cgroupfs
使用的下面的存储库下载 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
Run Code Online (Sandbox Code Playgroud)
并更改 kubelet conf 中的 cgroup 驱动程序。检查错误是否再次发生以及 kubelet 从其conf中加载了什么内容。
在 kubelet 代码中添加更多日志以进行调试
这是 kubelet 用于从双方获取 conf 的逻辑
归档时间: |
|
查看次数: |
15195 次 |
最近记录: |