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 无法更新证书。 您需要生成新引导程序令牌以再次加入并获取新证书。

解决问题

完成以下任务来解决问题:

  1. 下载 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
    
  2. 运行以下命令来生成新引导程序令牌:

    kubeadm --kubeconfig= /etc/cfc/conf/admin.kubeconfig token create --ttl 24h0m0s
    

    输出类似于以下示例:

    k5ojt0.ko1wov52mdvnqbg6
    

    注:保存此命令输出以供今后使用。

  3. 获取新证书:

    • 登录到发生故障的节点。

    • 编辑 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