排查 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):

# On the affected node
hostname
hostname -f
cat /etc/hosts
sudo cat /var/lib/cloud/instance/user-data.txt | head -40
sudo journalctl -u cloud-init -b 0 | grep -E "hostname|fqdn|update_etc_hosts"

表明你遇到此模式的迹象:

  • 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 中选择带点号或短主机名,请遵循集群创建页面上的节点上的主机名行为。

相关内容