kuberntes/manifest 更新后 kubelet 不会启动

kubelet won't start after kuberntes/manifest update

这在我们的 K8 集群中是一种奇怪的行为。

当我们尝试部署新版本的应用程序时,我们得到:

Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "<container-id>" network for pod "application-6647b7cbdb-4tp2v": networkPlugin cni failed to set up pod "application-6647b7cbdb-4tp2v_default" network: Get "https://[10.233.0.1]:443/api/v1/namespaces/default": dial tcp 10.233.0.1:443: connect: connection refused

我用了kubectl get cs,发现controllerscheduler处于Unhealthy状态。

作为描述者 here 更新 /etc/kubernetes/manifests/kube-scheduler.yaml/etc/kubernetes/manifests/kube-controller-manager.yaml 通过评论 --port=0

当我检查 systemctl status kubelet 时它正在工作。

Active: active (running) since Mon 2020-10-26 13:18:46 +0530; 1 years 0 months ago

我重新启动了 kubelet 服务,controllerscheduler 显示健康。

但是 systemctl status kubelet 显示(重启 kubelet 后不久它显示 运行 状态)

Active: activating (auto-restart) (Result: exit-code) since Thu 2021-11-11 10:50:49 +0530; 3s ago<br>
    Docs: https://github.com/GoogleCloudPlatform/kubernetes<br>  Process: 21234 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET

已尝试按照 here 所述将 Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true --fail-swap-on=false" 添加到 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf,但仍然无法正常工作。

还删除了上述清单中的 --port=0 评论并尝试重新启动,结果仍然相同。

编辑: 此问题是由于 kubelet 证书已过期并已按照 these 步解决。如果有人遇到此问题,请确保 /var/lib/kubelet/pki/kubelet-client-current.pem 证书和密钥值在 /etc/kubernetes/kubelet.conf

上进行了 base64 编码

许多其他人再次建议 kubeadm init。但是这个集群是使用 kubespray 创建的,没有手动添加节点。

我们在 Ubuntu 18.04 上有裸机 k8 运行。 K8: v1.18.8

我们想知道任何调试和修复建议。

PS:
当我们尝试从任何节点 telnet 10.233.0.1 443 时,第一次尝试失败,第二次尝试成功。

编辑:在 kubelet 服务日志中找到这个

Nov 10 17:35:05 node1 kubelet[1951]: W1110 17:35:05.380982    1951 docker_sandbox.go:402] failed to read pod IP from plugin/docker: networkPlugin cni failed on the status hook for pod "app-7b54557dd4-bzjd9_default": unexpected command output nsenter: cannot open /proc/12311/ns/net: No such file or directory

将评论作为社区 wiki 答案发布以获得更好的知名度


此问题是由于 kubelet 证书已过期并已在 these steps 后修复。如果有人遇到此问题,请确保 /var/lib/kubelet/pki/kubelet-client-current.pem 证书和密钥值在 /etc/kubernetes/kubelet.conf

上进行了 base64 编码