今天遇到一个非常顽固的问题——在 vSphere 8.x 中使用所需状态配置时,集群持续报告不兼容,尽管修复任务看起来成功完成。搞了好久,最后发现原来这是一个 vSwitch0 bridge/nics 配置存储不匹配的问题。
故障现象还原
当你遇到这个问题时,会看到以下现象:
1. 不兼容状态持续存在
- 集群所需状态配置报告不兼容
- 不兼容路径:
reportprofile/esx/network_vss/switches/0/bridge/nics - 集群值显示为:
[] - 修复任务完成后,不兼容状态仍然存在
2. 配置存储对比
通过对比有问题节点和工作正常节点的 configstore,可以发现明显的不同:
有问题节点的 vSwitch0 配置:
{
"name": "vSwitch0",
"bridge": {
"link_discovery_protocol": {
"protocol": "CDP",
"operation": "LISTEN"
},
"nics": []
},
...
}
工作正常节点的 vSwitch0 配置:
{
"name": "vSwitch0",
"bridge": {
"link_discovery_protocol": {
"protocol": "CDP",
"operation": "LISTEN"
}
},
...
}
核心原因分析
诊断TS了好久,这个问题是由 ESXi 版本特定的行为导致的:
1. ESXi 7.x 行为
在 ESXi 7.x 中,当从 vSwitch0 中移除最后一个物理 NIC 时,”nics” 属性会保留在 configstore 中,但值为空数组 []。
2. ESXi 8.0.3 行为
ESXi 8.0.3 修正了这个问题,当最后一个 NIC 被移除时,”nics” 属性会自动删除。
3. 不兼容的根本原因
集群中如果有 ESXi 7.x 升级到 8.x 的节点,就可能会保留这种有问题的配置,导致与新部署的 8.x 节点之间的配置不兼容。
解决方案:使用 fixBridgeNic.py 脚本
VMware 提供了一个专门的脚本来解决这个问题.
1. 下载并复制脚本
1. 从 KB 文章中下载 fixBridgeNic.py 脚本,见底底
2. 使用 WinSCP 等工具将脚本复制到所有受影响的 ESXi 主机上
2. 在每个 ESXi 主机上执行脚本
# 登录到受影响的 ESXi 主机
ssh root@
# 运行脚本
python fixBridgeNic.py
# 检查脚本执行结果
ls -la
3. 验证修复是否成功
1. 再次检查集群的所需状态配置
2. 确认不兼容问题已解决
3. 执行修复任务(如果需要)
4. 验证配置是否一致
脚本功能说明
fixBridgeNic.py 脚本的主要功能是:
1. 检测并识别 configstore 中包含 nics: [] 的 vSwitch0 配置
2. 从配置中移除这个不必要的属性
3. 确保所有主机的 configstore 结构一致
4. 恢复集群的合规性状态
预防措施
1. 在升级前检查配置
在将 ESXi 7.x 主机升级到 8.x 前:
1. 检查每个主机的 vSwitch0 配置
2. 确保没有空的 nics 属性
3. 可以使用脚本提前清理有问题的配置
2. 使用所需状态配置进行一致性检查
定期运行所需状态配置检查:
1. 确保集群配置的一致性
2. 及时发现和修复配置不匹配问题
3. 使用修复任务自动修复简单问题
3. 监控升级过程
在升级过程中:
1. 监控每个主机的配置变化
2. 确保升级后配置符合预期
3. 遇到问题时可以快速回滚
如何验证配置
1. 检查 configstore 内容
# 在 ESXi 主机上检查 configstore
esxcli system settings advanced list | grep -i configstore
# 查看网络配置
esxcli network vswitch standard list
# 查看 vSwitch0 的详细配置
esxcli network vswitch standard portgroup list
2. 使用所需状态配置检查
1. 在 vSphere Client 中选择集群
2. 点击“配置”标签页 → “所需状态配置”
3. 点击“检查合规性”
4. 查看详细的不兼容报告
常见问题解答
Q:为什么修复任务完成后问题仍然存在?
A:因为修复任务没有正确处理 configstore 中的空 nics 属性,需要使用专门的脚本。
Q:这个问题会影响虚拟机网络性能吗?
A:通常不会,但会导致集群配置不兼容,可能影响后续的配置变更。
Q:是否可以手动编辑 configstore 文件?
A:不建议,configstore 有特定的结构和格式,手动编辑可能导致严重问题。
Q:脚本执行会影响主机可用性吗?
A:脚本执行通常非常快,不会影响主机的可用性,但建议在维护窗口执行。
总结
通过使用 fixBridgeNic.py 脚本,我们可以快速修复 vSwitch0 bridge/nics configstore 不匹配的问题,恢复集群的合规性状态。
记住,当遇到所需状态配置不兼容且修复任务无法解决的问题时,应该考虑检查配置存储的细微差异,这往往是解决问题的关键。
Reference: VMware KB 429323
https://knowledge.broadcom.com/external/article?articleNumber=429323






