2

kubelet当我更改其中一个节点的主机名时,在服务中遇到以下错误:

Aug 24 14:28:32 k8s-worker03 kubelet[9255]: E0824 14:28:32.715201    9255 kubelet_node_status.go:103] Unable to register node "k8s-worker03" with API server: nodes "k8s-worker03" is forbidden: node "localhost.localdomain" cannot modify node "k8s-worker03

它首先是 localhost.localdomain 并成功加入集群。更改主机名后,它在输出中还没有准备好kubectl get nodes

我试图从集群中删除该节点,并在该特定节点上重新启动 kubelet 服务,但该错误再次出现,该节点无法注册到集群。

谢谢。

4

1 回答 1

0

在您的情况下,似乎在注册节点时,kubelet 将主机名作为“k8s-worker03”发送到 API 服务器,并且当您使用节点的主机名作为“localhost.localdomain”启动集群时,这与您节点的 etcd 数据库记录不匹配. 所以合适的解决方法是在你的 kubeadm.conf 文件中添加标志 --hostname-override <hostname_or_ip> 作为 $KUBELET_EXTRA_ARGS 的参数。

kubeadm.conf 文件的位置可以通过检查 kubelet 的状态来找到,我的位置是 /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

要更新的行是: ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_EXTRA_ARGS --hostname-override=k8s-worker03

然后执行 daemon reload 和 kubelet 重启。

如果这不起作用,你必须

  1. 删除节点
  2. 在该节点上重置 kubeadm
  3. 使用 --hostname-override=k8s-master03 标志更新 kubeadm.conf 文件
  4. kubeadm 加入/初始化
  5. 守护进程 reoload 和 kubelet 重启
于 2021-08-20T06:59:43.707 回答