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