排查 Huawei Cloud Stack 业务集群
本指南介绍通过 Cluster API 管理的 Huawei Cloud Stack(HCS)业务集群所特有的排查模式。
如果你的集群已达到 Cluster.status.phase = Provisioned,但导入流程未完成,并且由于缺少 CNI,业务节点一直处于 NotReady,请先参阅与提供程序无关的指南 排查卡在 Provisioned 的业务集群。该指南涵盖了适用于所有 Immutable Infrastructure provider 的通用诊断流程(global cluster import controller、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始终不会设置。- 超过通常约 5 到 10 分钟的初始化窗口后,
KubeadmControlPlane.status.initialized仍为空,并且status.readyReplicas=0。 cpaas-system中的cluster-api-provider-hcs控制器日志会反复打印针对控制平面 ELB VIP 6443 端口的connect: connection refused。- 为该节点选择的
HCSMachineConfigPool.spec.configs[].hostname值包含一个点(FQDN 风格,例如master-1.example.org)。
在 cluster-api-provider-hcs 早于 v1.0.1 的版本中,带点的 HCSMachineConfigPool.spec.configs[].hostname 会在 cloud-init 中被渲染为 hostname 字段里的完整 FQDN 字符串,并设置 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。
缓解
将 cluster-api-provider-hcs 插件升级到 v1.0.1 或更高版本,然后对受影响的控制平面和工作节点执行滚动替换,以便新的 cloud-init 在新启动的 VM 上运行。具体步骤已记录在 在现有 HCS 集群上配置 FQDN 主机名 中。
对现有不可变 OS 节点手动修改 /etc/hostname 和 /etc/hosts 不会持久生效:cloud-init 会在每次启动时重新生成这些文件,包括由 transactional-update、OS 补丁更新或 systemctl reboot 触发的重启。滚动替换是支持的迁移路径。
预防
如果在已安装 cluster-api-provider-hcs v1.0.1 或更高版本的情况下重新执行集群创建,就可以完全避免该模式。针对 HCS 的新 manifest 在 HCSMachineConfigPool 中选择带点主机名或短主机名时,应遵循集群创建页中的 节点上的主机名行为。
相关内容
- 排查卡在 Provisioned 的业务集群 — 适用于任何本页 HCS 特定模式之前的、与提供程序无关的 import-controller 诊断流程。
- 在现有 HCS 集群上配置 FQDN 主机名 — 适用于在
cluster-api-provider-hcsv1.0.1 之前创建的集群的滚动替换迁移操作步骤。 - 在 Huawei Cloud Stack 上创建集群 — 新集群的 manifest 参考,包括 节点上的主机名行为。