1. 问题现象与背景分析
最近在维护一套基于vSphere 7.0的私有云环境时,遇到了一个棘手的问题:尝试移除Supervisor集群时,管理界面长时间卡在"正在移除"状态,进度条停滞超过6小时。这种状态在vSphere运维中并不罕见,但需要系统化的排查方法。
Supervisor是vSphere with Kubernetes的核心组件,负责管理Kubernetes控制平面与底层ESXi主机的协同工作。当移除流程卡住时,通常意味着底层资源清理、依赖关系解除或API通信等环节出现了阻塞。这种情况如果处理不当,可能导致集群状态不一致,甚至影响整个vSphere环境的稳定性。
2. 排查工具准备与环境检查
2.1 必备工具清单
在开始深入排查前,需要准备以下工具:
- SSH客户端(如PuTTY或OpenSSH)
- vSphere CLI工具包(包含esxcli、govc等)
- kubectl(配置好对应Supervisor集群的上下文)
- 日志收集脚本(后文会提供)
2.2 基础环境验证
首先确认基础环境状态:
bash复制# 检查vCenter服务状态
service-control --status --all
# 验证ESXi主机连接性
esxcli network ping --host <vCenter_IP> --count 3
# 检查Supervisor集群API可用性
kubectl --context=<your_context> get ns
注意:执行这些命令时如果出现超时或错误,可能是网络分区或服务异常导致的移除卡顿。
3. 核心日志定位与分析
3.1 关键日志文件位置
排查Supervisor移除问题需要检查以下日志:
-
vCenter日志:
- /var/log/vmware/vpxd/vpxd.log
- /var/log/vmware/vpxd/vpxd-svcs.log
-
Supervisor控制平面日志:
- /var/log/vmware/wcp/wcpsvc.log
- /var/log/vmware/wcp/partner-pod.log
-
ESXi主机日志(所有关联主机):
- /var/log/hostd.log
- /var/log/vmkernel.log
3.2 日志过滤技巧
使用grep高效过滤关键信息:
bash复制# 查找Supervisor移除相关操作记录
grep -i "supervisor.*remove" /var/log/vmware/vpxd/vpxd.log
# 检查Kubernetes资源清理错误
grep -i "error.*cleanup" /var/log/vmware/wcp/wcpsvc.log
# 追踪任务ID关联日志
tail -f /var/log/vmware/vpxd/vpxd.log | grep <task_id>
4. 典型问题场景与解决方案
4.1 场景一:资源依赖未解除
常见错误日志特征:
code复制[ERROR] Failed to delete namespace [xxxx]: resource quota [yyyy] still exists
解决方案步骤:
- 手动清理残留资源:
bash复制kubectl --context=<your_context> delete quota <quota_name> -n <ns_name>
- 强制移除命名空间:
bash复制kubectl --context=<your_context> patch ns <ns_name> -p '{"metadata":{"finalizers":null}}'
4.2 场景二:存储卷挂载残留
典型日志表现:
code复制[WARNING] Cannot remove volume [xxxx]: still attached to pod [yyyy]
处理流程:
- 确认Pod状态:
bash复制kubectl --context=<your_context> get pod -A -o wide | grep <pod_name>
- 强制删除Pod:
bash复制kubectl --context=<your_context> delete pod <pod_name> --grace-period=0 --force
- 清理PV/PVC:
bash复制kubectl --context=<your_context> delete pvc <pvc_name> -n <ns_name>
5. 高级排查与恢复操作
5.1 数据库状态检查
当常规方法无效时,需要检查vCenter数据库:
sql复制-- 查询卡住的任务
SELECT * FROM VPX_TASK WHERE DESCRIPTION LIKE '%Supervisor%';
-- 检查集群状态
SELECT * FROM VPX_CLUSTER WHERE NAME = '<cluster_name>';
警告:直接操作数据库存在风险,建议先备份数据库或联系VMware支持。
5.2 强制移除流程
作为最后手段的强制移除步骤:
- 停止相关服务:
bash复制service-control --stop wcp
- 清理持久化数据:
bash复制rm -rf /storage/db/vmware/wcp/
- 重启服务:
bash复制service-control --start wcp
6. 预防措施与最佳实践
6.1 移除前的检查清单
建议在执行Supervisor移除前:
- 确认所有工作负载已迁移
- 检查没有Pending状态的Kubernetes资源
- 验证存储卷的清理状态
- 确保vCenter有足够资源(CPU/内存)
6.2 日志收集脚本
创建自动化日志收集脚本:
bash复制#!/bin/bash
LOG_DIR="/tmp/supervisor_logs_$(date +%Y%m%d)"
mkdir -p $LOG_DIR
# 收集vCenter日志
cp /var/log/vmware/vpxd/* $LOG_DIR
cp /var/log/vmware/wcp/* $LOG_DIR
# 收集ESXi日志
for host in $(esxcli --server <vCenter> --vihost <host> network vm list | awk '{print $1}'); do
scp root@$host:/var/log/hostd.log $LOG_DIR/hostd_${host}.log
done
# 打包日志
tar -czvf supervisor_logs.tar.gz $LOG_DIR
7. 疑难问题记录与解决
在实际操作中遇到几个特殊案例值得记录:
案例一:DNS解析超时导致卡顿
- 现象:日志中出现大量"i/o timeout"错误
- 解决方案:
bash复制# 临时修改/etc/resolv.conf增加备用DNS # 重启网络服务 service network restart
案例二:证书过期引发的问题
- 排查命令:
bash复制openssl x509 -in /etc/vmware/wcp/wcp-ssl.crt -noout -dates - 修复步骤:
bash复制# 重新生成证书 /usr/lib/vmware-wcp/scripts/generate-certificate.sh # 重启服务 service-control --restart wcp
8. 性能优化建议
对于大规模环境,建议调整以下参数:
- 增加API处理超时:
bash复制kubectl --context=<your_context> patch cm wcp-config -n vmware-system-wcp --type merge -p '{"data":{"api-timeout":"300s"}}' - 调整资源配额:
yaml复制apiVersion: v1 kind: ConfigMap metadata: name: wcp-config namespace: vmware-system-wcp data: resource-limits: | cpu: 4000m memory: 8Gi
9. 后续监控与验证
移除完成后建议执行:
- 资源泄漏检查:
bash复制govc ls /<datacenter>/host/<cluster>/Resources | grep -i supervisor - API健康状态验证:
bash复制
curl -k https://<vCenter>/api/wcp/healthz - 存储空间回收确认:
bash复制df -h | grep -E 'vdb|vdc'
通过这套系统化的排查方法,我们成功解决了多个生产环境中遇到的Supervisor移除卡住问题。关键是要建立从日志分析到具体操作的完整链路,同时理解vSphere与Kubernetes集成的底层机制。