排查 Huawei Cloud Stack 业务集群故障
本指南介绍通过 Cluster API 管理的 Huawei Cloud Stack (HCS) 业务集群的特定故障排查模式。
如果集群已达到 Cluster.status.phase = Provisioned,但导入流程未完成,并且由于缺少 CNI,业务节点仍处于 NotReady 状态,请先参阅与提供商无关的指南排查卡在 Provisioned 状态的业务集群。该指南介绍适用于所有 Alauda OS 基础设施提供商的通用诊断流程(global 集群导入控制器、sentry ServiceAccount、clusters.platform.tkestack.io 不变量)。
如果你已完成通用流程,并且也出现以下症状,请参阅本页介绍的 HCS 特定模式。
模式:主机名错误导致 kubeadm init 始终无法完成
症状 — 以下情况同时成立:
Cluster.status.phase=Provisioned、HCSCluster.status.ready=true,ELB 已启动。HCSMachine.status.instanceState=ACTIVE已填充InternalIP,但Machine.status.nodeRef始终未设置。KubeadmControlPlane.status.initialized为空,并且status.readyReplicas=0超过通常约 5 到 10 分钟的初始化时长。cluster-api-provider-hcs控制器日志(位于cpaas-system)反复显示针对控制平面 ELB VIP 的 6443 端口打印connect: connection refused。- 为节点选择的
HCSMachineConfigPool.spec.configs[].hostname值中包含点号(FQDN 格式,例如master-1.example.org)。
在早于 v1.0.1 的 cluster-api-provider-hcs 版本中,带点号的 HCSMachineConfigPool.spec.configs[].hostname 会在 cloud-init 中以完整 FQDN 字符串的形式写入 hostname 字段,并附带 prefer_fqdn_over_hostname: true。生成的节点具有包含点号的 POSIX 主机名,而 kubeadm init 无法处理这种主机名,因此 kube-apiserver 始终无法启动。
诊断
如果可以访问节点(HCS 控制台、跳板机或集群内调试 Pod):
表明你遇到此模式的迹象:
hostname返回完整的带点号字符串,而不只是短标签。hostname -f返回Name or service not known或Temporary failure in name resolution。/etc/hosts中不包含形如<node-ip> <fqdn> <short>的行。- 节点上的 cloud-init user-data 显示
prefer_fqdn_over_hostname: true,且未设置manage_etc_hosts。
缓解
将 global 集群上的 cluster-api-provider-hcs 插件升级到此版本提供的版本,然后触发受影响的控制平面和工作节点机器滚动替换,以便在全新启动的 VM 上运行新的 cloud-init。分步操作步骤请参阅在现有 HCS 集群上配置 FQDN 主机名。
在现有 Alauda OS 节点上手动修改 /etc/hostname 和 /etc/hosts 不会持久生效:每次启动时,cloud-init 都会重新生成这些文件,包括由 transactional-update、OS 修补或 systemctl reboot 触发的重启。滚动替换是受支持的迁移路径。
预防
使用此版本提供的 cluster-api-provider-hcs 插件创建集群可完全避免此问题。为 HCS 创建新清单时,在 HCSMachineConfigPool 中选择带点号或短主机名,请遵循集群创建页面上的节点上的主机名行为。
相关内容
- 排查卡在“已预配”状态的业务集群 — 与 provider 无关的 import-controller 诊断流程,适用于本页面中任何 HCS 特定模式之前。
- 在现有 HCS 集群上配置 FQDN 主机名 — 适用于在
cluster-api-provider-hcsv1.0.1 之前创建的集群的滚动替换迁移操作步骤。 - 在 Huawei Cloud Stack 上创建集群 — 新集群的清单参考,包括节点上的主机名行为。