复现场景

环境

  • 系统:Centos7
  • kubernetes:1.18.5
  • docker:19.03.9

复现步骤

1、通过 yumrpm 安装 kubelet kubectl kubeadm,并 systemctl enable --now kubelet

2、安装 docker 并配置 (kubernetes官方推荐docker等使用systemd作为cgroupdriver)

mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"data-root": "/data/docker"
}
EOF

3、kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.18.5 提示 [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/,到最后初始化失败,提示kubelet 健康状态不正常

4、查看 kubelet 状态 systemctl status kubelet,提示error: failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"

解决方案

1、只修改docker

docker 不再设置native.cgroupdriver=systemd,或将 systemd 改成 cgroupfs,重启docker systemctl daemon-reload && systemctl restart docker

检查 docker info|grep "Cgroup Driver" 是否输出 Cgroup Driver: cgroupfs

kubelet 默认cgroupdriver是cgroupfs,但是它竟然推荐用systemd,interesting!

2、分别修改docker与控制平台的kubelet为systemd 【官方推荐】

鉴于用的k8s版本有点新,本文只记录当前1.18.x的修改方式,其他版本请参详官方:

重置未初始化成功的kubeadm配置

echo y|kubead reset

修改docker,只需在/etc/docker/daemon.json中,添加"exec-opts": ["native.cgroupdriver=systemd"]即可,本文最初的docker配置可供参考。

修改kubelet:

cat > /var/lib/kubelet/config.yaml <<EOF
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
EOF

重启docker 与 kubelet:

systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet

检查 docker info|grep "Cgroup Driver" 是否输出 Cgroup Driver: systemd

再次执行kubeadm init时,我发现kubeadm将cgroupDriver的配置到了/var/lib/kubelet/kubeadm-flags.env

后续检查/var/lib/kubelet/config.yaml 发现,里边已经被新的配置替换掉了;

另外,在配置期间,我这里一直出现kubelet健康状态不正常的问题,重置了kubeadm,删除了执行用户的家目录下的~/.kube,之后正常了

ps: 有趣的是,kubelet自启动后,会周期性重启,还是会提示docker的cgroup driver是与kubelet不同,等kubeadm初始化成功就不这样了。

本文参考自官方文档,版本1.18.5

最新文章

  1. SQLMAP使用笔记
  2. Seafile内部云盘
  3. ssh连接linux服务器只显示-bash-4.1#不显示路径解决方法
  4. python 拷贝文件夹下所有的文件到指定文件夹(不包括目录)
  5. 【转】在Eclipse中配置tomcat
  6. html圆角提示效果
  7. C++ 学习笔记(一)
  8. Asp.net动态调用WebService
  9. Android -- Support包特性
  10. 《征服c指针》学习笔记-----统计文本单词数目的程序word_count
  11. javascript 关闭窗口,弹出新窗口并带有确认关闭对话框解决办法
  12. document.ready()的用法
  13. Mybatis中的CDATA标签
  14. MySQL8.0 优化
  15. C++Primer笔记之复制控制
  16. 微信小程序获取腾讯经纬度,得到具体地址
  17. oracle hint inline materialize
  18. 【ecshop】使用sql 清除测试数据
  19. 安装redis环境
  20. 史上最严管控,Android P非SDK接口管控特性解读及适配

热门文章

  1. Java实现蓝桥杯 算法提高 线段和点
  2. Java实现 蓝桥杯VIP 算法训练 接水问题
  3. Java实现 蓝桥杯VIP 算法训练 删除多余括号
  4. Java实现 蓝桥杯VIP 算法提高 打水问题
  5. Java实现 LeetCode 56 合并区间
  6. Java实现 LeetCode 50 Pow(x,n)
  7. Java中继承的详细用法
  8. Java实现第九届蓝桥杯方格计数
  9. Spring Data Jpa Specification 调用Oracle 函数/方法
  10. vue的第一个commit分析