8.5.8.3. 集群节点没有通过 DHCP 获得正确的主机名
在 IPv6 部署过程中,集群节点必须通过 DHCP 获得其主机名。有时 NetworkManager
不会立即分配主机名。Control Plane(master)节点可能会报告错误,例如:
Failed Units: 2 NetworkManager-wait-online.service nodeip-configuration.service
这个错误表示集群节点可能在没有从 DHCP 服务器收到主机名的情况下引导,这会导致 kubelet
使用 localhost.localdomain
主机名引导。要解决这个问题,强制节点更新主机名。
流程
检索
主机名
:[core@master-X ~]$ hostname
如果主机名是
localhost
,请执行以下步骤。注意其中
X
是 control plane 节点(也称为 master 节点)号。强制集群节点续订 DHCP 租期:
[core@master-X ~]$ sudo nmcli con up "<bare-metal-nic>"
将
<bare-metal-nic>
替换为与baremetal
网络对应的有线连接。再次检查
主机名
:[core@master-X ~]$ hostname
如果主机名仍然是
localhost.localdomain
,重启NetworkManager
:[core@master-X ~]$ sudo systemctl restart NetworkManager
-
如果主机名仍然是
localhost.localdomain
,请等待几分钟并再次检查。如果主机名还是localhost.localdomain
,重复前面的步骤。 重启
nodeip-configuration
服务:[core@master-X ~]$ sudo systemctl restart nodeip-configuration.service
此服务将使用正确的主机名引用来重新配置
kubelet
服务。因为 kubelet 在上一步中有所改变,所以重新加载单元文件定义:
[core@master-X ~]$ sudo systemctl daemon-reload
重启
kubelet
服务:[core@master-X ~]$ sudo systemctl restart kubelet.service
确保
kubelet
使用正确的主机名引导:[core@master-X ~]$ sudo journalctl -fu kubelet.service
如果集群节点在启动并运行集群后没有通过 DHCP 获得正确的主机名(例如在重启过程中),集群将会有一个待处理的 csr
。不要批准 csr
,否则可能会出现其他问题。
处理 csr
在集群上获取 CSR:
$ oc get csr
验证待处理的
csr
是否包含Subject Name: localhost.localdomain
:$ oc get csr <pending_csr> -o jsonpath='{.spec.request}' | base64 --decode | openssl req -noout -text
删除包含
Subject Name: localhost.localdomain
的任何csr
:$ oc delete csr <wrong_csr>