问题描述与现象
在 vSphere 8.0 U3 版本中,配置了 DRS 和 HA 的集群可能会遇到 vCLS(vSphere Cluster Services)Pod 无法部署的问题。典型现象包括:
- 集群中没有 vCLS PodVM 运行
- 启用和禁用“撤退模式(Retreat Mode)”可以删除和重新创建 vCLS ESX Agent,但 Pod 仍未出现
- 错误信息表明 pod 创建验证失败,提示主机名格式不符合 RFC 1123 标准
根本原因分析
问题的根本原因是ESXi 主机配置中的 FQDN(完全限定域名)包含尾随点(trailing dot)。例如,主机名格式为 esxi01.domain.local. 而非 esxi01.domain.local。
为什么尾随点会导致问题
1. 尾随点不符合 RFC 1123 标准对域名的要求
2. infravisor 服务无法验证无效的主机名格式
3. 这导致 infravisor 无法解析 /etc/vmware/infravisor/manifests/vcls.yaml 清单文件
4. 最终,vCLS PodVM 的部署过程失败
解决方案步骤
步骤一:连接到受影响的 ESXi 主机
使用 SSH 或直接控制台连接到有问题的 ESXi 主机。
步骤二:验证并修正主机名格式
1. 检查当前主机名配置:
esxcli system hostname get
2. 确认 FQDN 是否有尾随点。如果有,设置正确的主机名格式:
# 替换为正确的 FQDN,确保没有尾随点
esxcli system hostname set -f esxi01.domain.local
步骤三:检查并启用 Pod 配置
1. 检查 infravisor pods 的当前状态:
configstorecli config current get -c esx -g infravisor_pods -k vcls
2. 如果 vCLS pod 配置被禁用,启用它:
configstorecli config current set -c esx -g infravisor_pods -k vcls -p /pod_settings/enabled -v true
步骤四:重启 Infravisor 服务
1. 检查 infravisor 服务状态:
/etc/init.d/infravisor status
2. 重启 infravisor 服务以应用更改:
/etc/init.d/infravisor restart
步骤五:强制重新部署 vCLS Pods
1. 删除现有的 vCLS Pod 配置:
inf-cli kill -p /etc/vmware/infravisor/manifests/vcls.yaml
2. 验证 vCLS Pod 的部署状态:
inf-cli get pods -n vcls
使用 PowerCLI 自动化修复
对于大规模部署,可以使用 PowerCLI 自动化这些操作:
# 连接到 vCenter 服务器
Connect-VIServer -Server vcenter.example.com -User administrator -Password password# 获取所有受影响的 ESXi 主机
$esxiHosts = Get-VMHost | Where-Object { $_.Version -eq "8.0.3" }foreach ($esxiHost in $esxiHosts) {
Write-Host "Processing host: $($esxiHost.Name)" # 获取主机的 FQDN
$fqdn = $esxiHost.ExtensionData.Summary.Config.HostName + "." + $esxiHost.ExtensionData.Summary.Config.Product.FullName.Split(' ')[0] if ($fqdn.EndsWith('.')) {
Write-Host " Fixing trailing dot in FQDN"
$newFqdn = $fqdn.TrimEnd('.') # 通过 SSH 连接到 ESXi 主机并执行命令(需要使用 SSH.NET 库)
# 此处仅为示例,实际需要实现 SSH 连接
Write-Host " New FQDN: $newFqdn"
} # 检查并启用 pod 配置
$esxcli = Get-EsxCli -VMHost $esxiHost -V2 # 此处需要通过 PowerCLI 直接访问 configstorecli
Write-Host " Checking and enabling pod settings..." # 重启 infravisor 服务
Write-Host " Restarting infravisor service..."
}# 断开连接
Disconnect-VIServer -Confirm:$false
验证与测试
验证步骤
1. 检查 infravisor.log 中是否还有主机名验证错误
2. 在 vCenter 中确认 vCLS Pod 已成功部署
3. 验证 DRS 和 HA 功能正常工作
4. 检查集群中的资源分配是否合理
常见问题排查
1. DNS 解析问题:确保主机名在 vCenter 所在的网络中能够正常解析
2. 网络连接:检查 ESXi 主机与 vCenter 之间的网络连接
3. 服务状态:确认 infravisor 服务是否正在运行
4. 配置一致性:确保所有 ESXi 主机的主机名格式都符合标准
预防措施
1. 主机名标准化:确保所有 ESXi 主机的 FQDN 符合 RFC 1123 标准,不包含尾随点
2. 配置验证:在部署新的 ESXi 主机或修改配置时,检查主机名格式
3. 自动化检查:使用脚本定期扫描 ESXi 主机的主机名配置
4. 遵循最佳实践:按照 VMware 的官方最佳实践配置 ESXi 主机
运维经验总结
vCLS 是 vSphere 8.0 中的核心功能,对 DRS 和 HA 的正常运行至关重要。当 vCLS Pod 无法部署时,整个集群的资源管理和高可用性功能都会受到影响。
解决问题的关键是识别并修复主机名格式问题。通过正确的配置和验证,可以确保 vCLS Pod 能够正常部署和运行,从而保证集群的稳定性。
相关资源
通过以上方法,你可以有效地解决 vCLS Pods 在 DRS 和 HA 启用的集群中无法部署的问题,恢复集群的正常功能。
Reference: VMware KB 425726







