首页 > 解决方案 > 无法使用 kubeadm 在 Kubernetes v1.15 中设置外部 etcd 集群

问题描述

我正在尝试使用多主和外部 etcd 集群设置 Kubernetes 集群。按照kubernetes.io中所述的这些步骤进行操作。执行第 7 步后,我能够在 /etc/kubernetes/manifests 文件夹中的所有 3 台主机中创建静态清单 pod 文件。

之后,当我执行命令“ sudo kubeadmin init ”时,由于 kubelet 错误,初始化失败。还验证了 journalctl 日志,错误表明 cgroup 驱动程序配置错误,类似于此SO 链接

我按照上面的 SO 链接进行了尝试,但无法解决。

请帮我解决这个问题。

对于 docker、kubeadm、kubectl 和 kubelet 的安装,我只关注 kubernetes.io 站点。

环境:

云:AWS

EC2 实例操作系统:Ubuntu 18.04

码头工人版本:18.09.7

谢谢

标签: amazon-ec2kuberneteshigh-availabilitykubeadmetcd

解决方案


在搜索了几个链接并做了一些跟踪之后,我能够解决这个问题。

如 Container runtime setup中所述,Docker cgroup 驱动程序是 systemd。但是 Kubelet 的默认 cgroup 驱动程序是 cgroupfs。因此,由于 Kubelet 单独无法自动识别 cgroup 驱动程序(如kubernetes.io文档中所述),我们必须在运行 Kubelet 时在外部提供 cgroup-driver,如下所示:

cat << EOF > /etc/systemd/system/kubelet.service.d/20-etcd-service-manager.conf

[服务]

执行开始=

ExecStart=/usr/bin/kubelet --cgroup-driver=systemd --address=127.0.0.1 --pod->manifest-path=/etc/kubernetes/manifests

重启=总是

EOF

systemctl 守护进程重载

systemctl 重启 kubelet

此外,无需运行 sudo kubeadm init,因为我们为 Kubelet 提供了 --pod-manifest-path,它将 etcd 作为静态 POD 运行。

为了调试,可以使用以下命令检查 Kubelet 的日志

journalctl -u kubelet -r

希望能帮助到你。谢谢。


推荐阅读