Kubelet 无法启动
kubelet 无法启动。 请了解有关场景、症状和原因的信息。
场景 1:由于证书未经授权,kubelet 无法启动
症状
Kubelet 无法启动并显示类似于以下输出的消息:
hyperkube[1554]: E0814 05:07:21.428053 1554 bootstrap.go:195] Part of the existing bootstrap client certificate is expired: 2018-08-14 03:46:00 +0000 UTC
hyperkube[1554]: F0814 05:07:21.438534 1554 server.go:262] failed to run Kubelet: cannot create certificate signing request: Unauthorized
原因
kubelet 所使用的客户机证书已到期。 Kubelet 无法更新证书。 您需要生成新引导程序令牌以再次加入并获取新证书。
解决问题
完成以下任务来解决问题:
-
下载
kubeadm
二进制并使用以下命令登录到主节点:curl -L -o /usr/local/bin/kubeadm https://storage.googleapis.com/kubernetes-release/release/v1.11.1/bin/linux/amd64/kubeadm chmod +x /usr/local/bin/kubeadm
-
运行以下命令来生成新引导程序令牌:
kubeadm --kubeconfig= /etc/cfc/conf/admin.kubeconfig token create --ttl 24h0m0s
输出类似于以下示例:
k5ojt0.ko1wov52mdvnqbg6
注:保存此命令输出以供今后使用。
-
获取新证书:
-
登录到发生故障的节点。
-
编辑 kubelet 配置。 从
/etc/cfc/kubelet/kubelet-bootstrap-config
中,将users.user.token
替换为从步骤 2 保存的值,即k5ojt0.ko1wov52mdvnqbg6
。 - 重新启动 kubelet。
-
场景 2:由于内核标记无效,kubelet 无法启动
症状
从 3.1.1 升级到 3.1.2 时,kubelet 无法启动,并显示类似于以下输出的消息:
hyperkube[804]: F1023 17:02:19.964867 804 kubelet.go:1333] Failed to start ContainerManager [Invalid kernel flag: vm/overcommit_memory, expected value: 1, actual value: 0, Invalid kernel flag: kernel/panic, expected value: 10, actual value: 0, Invalid kernel flag: kernel/panic_on_oops, expected value: 1, actual value: 0]
原因
在 IBM Cloud Private 3.1.2 中,缺省情况下,在 /etc/cfc/kubelet/kubelet-service-config
中,protectKernelDefaults
设置为 true
以满足 CIS 需求。
解决问题
要在升级时解决此问题,请在安装之前或之后将 protectKernelDefaults
设置为 false
。
-
安装前
更新
cluster/config.yaml
以设置kubelet_extra_args: ["--protect-kernel-defaults=false"]
。 -
安装后
- 遵循在实时集群中重新配置 Kubelet 步骤 1-5 以重新配置 kubelet。
- 在步骤 2 编辑配置文件中,设置
protectKernelDefaults: false
。