kubelet 服务未在 Kubernetes 主节点上运行(波动)

kubelet 服务未在 Kubernetes 主节点上运行(波动)

我尝试使用 kubeadm 创建 Kubernetes 集群。我启动了 Ubuntu 18.04 服务器,安装了 docker(确保 docker.service 正在运行),安装了 kubeadm kubelet 和 kubectl。

以下是我执行的步骤:

sudo apt-get update
sudo apt-get install docker.io -y
sudo systemctl enable docker
sudo systemctl start docker
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt-get install kubeadm kubelet kubectl -y
sudo apt-mark hold kubeadm kubelet kubectl 
kubeadm version
swapoff –a

sudo hostnamectl set-hostname master-node
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

有一次我跑了sudo kubeadm init --pod-network-cidr=10.244.0.0/16,我收到以下错误:

root@ip-172-31-10-50:/home/ubuntu# sudo kubeadm init --pod-network-cidr=192.168.0.0/16
[init] 使用 Kubernetes 版本:v1.23.1
[preflight] 运行预检检查
[preflight] 提取设置 Kubernetes 集群所需的镜像
[preflight] 这可能需要一两分钟,具体取决于您的互联网连接速度
[preflight] 您也可以预先使用“kubeadm config images pull”执行此操作
[certs] 使用 certificateDir 文件夹“/etc/kubernetes/pki”
[certs] 使用现有的 ca 证书颁发机构
[certs] 使用磁盘上现有的 apiserver 证书和密钥
[certs] 使用磁盘上现有的 apiserver-kubelet-client 证书和密钥
[certs] 使用现有的 front-proxy-ca 证书颁发机构
[certs] 使用磁盘上现有的 front-proxy-client 证书和密钥
[certs] 使用现有的 etcd/ca 证书权限
[certs] 使用磁盘上现有的 etcd/server 证书和密钥
[certs] 使用磁盘上现有的 etcd/peer 证书和密钥
[certs] 使用磁盘上现有的 etcd/healthcheck-client 证书和密钥
[certs] 使用磁盘上现有的 apiserver-etcd-client 证书和密钥
[certs] 使用现有的“sa”密钥
[kubeconfig] 使用 kubeconfig 文件夹“/etc/kubernetes”
[kubeconfig] 使用现有的 kubeconfig 文件:“/etc/kubernetes/admin.conf” [kubeconfig] 使用现有的 kubeconfig 文件:“/
etc/kubernetes/kubelet.conf”
[kubeconfig] 使用现有的 kubeconfig 文件:“/etc/kubernetes/controller-manager.conf”
[kubeconfig] 使用现有的 kubeconfig 文件:“/etc/kubernetes/scheduler.conf”
[kubelet-start] 将带有标志的 kubelet 环境文件写入文件“/var/lib/kubelet/kubeadm-> flags.env”
[kubelet-start] 将 kubelet 配置写入文件“/var/lib/kubelet/config.yaml”
[kubelet-start] 启动 kubelet
[control-plane] 使用清单文件夹“/etc/kubernetes/manifests”
[control-plane] 为“kube-apiserver”创建静态 Pod 清单
[control-plane] 为“kube-controller-manager”
创建静态 Pod 清单 [control-plane] 为“kube-scheduler”创建静态 Pod 清单
[etcd] 在“/etc/kubernetes/manifests”中为本地 etcd 创建静态 Pod 清单
[wait-control-plane] 等待 kubelet 从目录“/etc/kubernetes/manifests”将控制平面作为静态 Pod 启动。这可能需要长达 4 分 0 秒
[kubelet-check] 初始超时已过 40 秒。
[kubelet-check] kubelet 似乎没有运行或运行不正常。
[kubelet-check] 等于“curl -sSL http://localhost:10248/healthz”的 HTTP 调用失败,错误为:获取“http://localhost:10248/healthz”:拨号 tcp 127.0.0.1:10248:连接:连接被拒绝。

我试着跑kubectl init——pod-network-cidr使用Flannel 的 CIDR(10.244.0.0/16)并且Calico 的 CIDR(192.168.0.0/16)。但是,我遇到了同样的错误。

此外,我还观察到库贝莱特在我的 EC2 实例中波动很大。当我运行systemctl status kubelet.service,有时它没有运行,有时 Kubelet 正在运行。这是自动发生的。认为这就是失败的原因kubectl initkubelet 检查明确指出:“看起来 kubelet 未运行或者不健康”

跑步后systemctl status kubelet.service, 错误:

root@ip-172-31-10-50:/home/ubuntu# systemctl status kubelet.service
● kubelet.service - kubelet:Kubernetes 节点代理
已加载:已加载(/lib/systemd/system/kubelet.service;已启用;供应商预设:已启用)
插入:/etc/systemd/system/kubelet.service.d
└─10-kubeadm.conf
活动:正在激活(自动重启)(结果:退出代码)自 2021-12-29 星期三 17:52:35 UTC;3 秒前
文档:https://kubernetes.io/docs/home/
进程:22901 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS(代码=已退出,状态=1/FAILURE)
主 PID:22901(代码=已退出,状态=1/FAILURE)

当我继续奔跑systemctl status kubelet.service,几秒钟后,kubectl.service似乎正在运行,几秒钟后,它再次失败。

...跳过...
● kubelet.service - kubelet:Kubernetes 节点代理
已加载:已加载(/lib/systemd/system/kubelet.service;已启用;供应商预设:已启用)
插入:/etc/systemd/system/kubelet.service.d
└─10-kubeadm.conf
活跃:自 2021-12-30 星期四 18:50:49 UTC;125 毫秒前起处于活跃(正在运行)
文档:https://kubernetes.io/docs/home/
主 PID:12895(kubelet)
任务:9(限制:4686)
CGroup:/system.slice/kubelet.service
└─12895 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf > --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/conf

我不确定为什么 kubelet 会这样波动。
有人知道如何解决这个问题吗?

答案1

错误日志中有你的答案:

无法运行 Kubelet:配置错误:kubelet cgroup 驱动程序:“systemd”与 docker cgroup 驱动程序“cgroupfs”不同

请参阅 Kubernetes 文档,了解如何配置cgroup 驱动程序

答案2

我可以通过编辑来修复 kubelet.service 问题/etc/systemd/system/kubelet.service.d/10-kubeadm.conf

在文件中,我添加了环境=“KUBELET_CGROUP_ARGS=--cgroup-driver=systemd”并注释掉环境=“KUBELET_CONFIG_ARGS = - config = / var / lib / kubelet / config.yaml”

/etc/systemd/system/kubelet.service.d/10-kubeadm.conf以供参考:

# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
#Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

然后跑:systemctl 守护进程重新加载systemctl 重启 kubelet
这样,kubelet.service 就一直运行。

谢谢!

相关内容