从备份还原 主管 后,将在还原完成后删除在执行备份后创建的所有 K8s 资源。如果其中某些资源与对象(例如虚拟机或磁盘)关联,这些对象在 vCenter Server 中将处于孤立状态。必须从 vCenter Server 中清理孤立对象。
过程
- 列出 vSphere 命名空间 的所有虚拟机。
- 通过在 主管 控制平面虚拟机上运行以下命令,检索 vSphere 命名空间 的 folderMoId:
root@421c9fa40208448fecc15d277bdca66d [ ~ ]# kubectl get availabilityzone -o json { "apiVersion": "v1", "items": [ { "apiVersion": "topology.tanzu.vmware.com/v1alpha1", "kind": "AvailabilityZone", "metadata": { ... }, "spec": { "clusterComputeResourceMoIDs": [ "domain-c50" ], "clusterComputeResourceMoId": "domain-c50", "namespaces": { "pod-ns": { "folderMoId": "group-v81", <--- this is the folderMoId that you need for next step ... }, "vmsvc-ns": { "folderMoId": "group-v83", <--- this is the folderMoId that you need for next step ... } } } } ], "kind": "List", "metadata": { "resourceVersion": "" } }
- 通过运行以下 DCLI 命令,列出 vSphere 命名空间 上的所有现有虚拟机:
本示例使用 pod-ns 命名空间
root@sc2-10-186-199-30 [ ~ ]# dcli +i +username ‘[email protected]’ +password <password> Welcome to VMware Datacenter CLI (DCLI) usage: <namespaces> <command> To auto-complete and browse DCLI namespaces: [TAB] If you need more help for a command: vcenter vm get --help If you need more help for a namespace: vcenter vm --help To execute dcli internal command: env For detailed information on DCLI usage visit: http://vmware.com/go/dcli dcli> com vmware vcenter vm list --folders group-v81 |---------------|-----|-----------------------------------------|-----------|---------| |memory_size_MiB|vm |name |power_state|cpu_count| |---------------|-----|-----------------------------------------|-----------|---------| |512 |vm-84|deployment-before-backup-778449d88d-c9gnc|POWERED_ON |1 | |512 |vm-85|deployment-before-backup-778449d88d-4jtqj|POWERED_ON |1 | |512 |vm-86|deployment-before-backup-778449d88d-tqwbh|POWERED_ON |1 | |512 |vm-91|deployment-after-backup-778449d88d-khkxx |POWERED_OFF|1 | |512 |vm-92|deployment-after-backup-778449d88d-7dgcc |POWERED_OFF|1 | |512 |vm-93|deployment-after-backup-778449d88d-sxbcf |POWERED_OFF|1 | |---------------|-----|-----------------------------------------|-----------|---------|
。
- 通过在 主管 控制平面虚拟机上运行以下命令,检索 vSphere 命名空间 的 folderMoId:
- 找到并清理孤立的命名空间。
如果在执行 主管 备份后删除某个命名空间,则会在还原 主管 后重新创建该命名空间作为 Kubernetes 资源。必须删除该 K8s 资源。
- 通过列出 vCenter Server 的所有命名空间来找到孤立的命名空间。
dcli> com vmware vcenter namespaces instances list
- 列出所有命名空间 K8s 资源。
root@423f9d75bef000dc828a535c6ac0bd4b [ ~ ]# k get ns -A
- 查找步骤 A 和步骤 B 中生成的对象之间的差异,并清理孤立的命名空间 K8s 资源。
root@423f9d75bef000dc828a535c6ac0bd4b [ ~ ]# k delete ns test-set-workload-ns namespace "test-set-workload-ns" deleted
- 通过列出 vCenter Server 的所有命名空间来找到孤立的命名空间。
- 找到并清理与 VirtualMachine 资源关联的孤立虚拟机。
从该备份还原 主管 后,执行 主管 备份后创建的 VirtualMachine Kubernetes 资源将导致虚拟机处于孤立状态。必须从 vCenter Server 清单中清理这些孤立虚拟机。
- 找到与 VirtualMachine 资源关联的孤立虚拟机。
接下来的步骤以 vmsvc-ns 命名空间为例。
- 列出 vCenter Server 清单中的所有虚拟机。示例代码片段将列出 vCenter Server 中的所有虚拟机,因为 group-96 与 vmsvc-ns 命名空间相关联。
dcli> com vmware vcenter vm list --folders group-v96 |---------------|------|------------|-----------|---------| |memory_size_MiB|vm |name |power_state|cpu_count| |---------------|------|------------|-----------|---------| |2048 |vm-104|vmsvc-after |POWERED_ON |2 | |2048 |vm-97 |vmsvc-before|POWERED_ON |2 | |---------------|------|------------|-----------|---------|
- 列出所有 VirtualMachine K8s 资源。运行
kubectl get
以获取有关任一控制平面虚拟机的资源详细信息,然后在输出中搜索 uniqueID。在本示例中,与 K8s 资源关联的虚拟机列表为 vm-97。root@42344b596f57bfcf9441179fa1ed1a5c [ ~ ]# k get vm -n vmsvc-ns -o json { "apiVersion": "v1", "items": [ { "apiVersion": "vmoperator.vmware.com/v1alpha1", "kind": "VirtualMachine", ... "uniqueID": "vm-97", ... }
- 比较上述步骤生成的两个列表。
- vCenter Server 中的虚拟机列表:<vm-104, vm-97>
- 与 k8s 资源关联的虚拟机列表:<vm-97>
因此,孤立虚拟机列表为:<vm-104>。
- 列出 vCenter Server 清单中的所有虚拟机。示例代码片段将列出 vCenter Server 中的所有虚拟机,因为 group-96 与 vmsvc-ns 命名空间相关联。
- 清理孤立的虚拟机。
dcli> com vmware vcenter vm power stop --vm vm-104 dcli> com vmware vcenter vm delete --vm vm-104
- 找到与 VirtualMachine 资源关联的孤立虚拟机。
- 找到并清理与 Pod 资源关联的孤立虚拟机。
还原 主管 后,执行 主管 备份后创建的 Pod K8s 资源将导致 vCenter Server 中出现孤立的虚拟机。按照以下步骤找到并清理它们。
这些示例使用命名空间 pod-ns。
- 列出 vCenter Server 清单中的所有虚拟机。
在本示例中,虚拟机组 group-v83 与命名空间 pod-ns 相关联。虚拟机列表为 vm-88、 vm-89、 vm-90、 vm-101、 vm-102 和 vm-103。
dcli> com vmware vcenter vm list --folders group-v83 |---------------|------|-----------------------------------------|-----------|---------| |memory_size_MiB|vm |name |power_state|cpu_count| |---------------|------|-----------------------------------------|-----------|---------| |512 |vm-101|deployment-after-backup-778449d88d-ldvn8 |POWERED_OFF|1 | |512 |vm-102|deployment-after-backup-778449d88d-v29dd |POWERED_OFF|1 | |512 |vm-103|deployment-after-backup-778449d88d-zdbl9 |POWERED_OFF|1 | |512 |vm-88 |deployment-before-backup-778449d88d-fgq5b|POWERED_ON |1 | |512 |vm-89 |deployment-before-backup-778449d88d-mp7td|POWERED_ON |1 | |512 |vm-90 |deployment-before-backup-778449d88d-cjhq6|POWERED_ON |1 | |---------------|------|-----------------------------------------|-----------|---------|
- 列出 K8s 资源。
运行
kubectl get
以获取有关任一控制平面虚拟机的资源详细信息,然后在输出中搜索 vmware-system-vm-moid。与 K8s 资源关联的虚拟机列表为 vm-88、 vm-89 和 vm-90。root@42344b596f57bfcf9441179fa1ed1a5c [ ~ ]# k get pod -n pod-ns -o json { "apiVersion": "v1", "items": [ { "apiVersion": "v1", "kind": "Pod", "metadata": { "annotations": { ... "vmware-system-vm-moid": "vm-90:5a5198fc-c5cb-4b89-a70f-331025b40539", ... }, ... "vmware-system-vm-moid": "vm-88:5a5198fc-c5cb-4b89-a70f-331025b40539", ... "vmware-system-vm-moid": "vm-89:5a5198fc-c5cb-4b89-a70f-331025b40539", ... }
- 比较上述步骤生成的两个列表。
- vCenter Server 中的虚拟机列表为:<vm-88, vm-89, vm-90, vm-101, vm-102, vm-103>
- 与 K8s 资源关联的虚拟机列表为:<vm-88, vm-89, vm-90>
因此,孤立虚拟机列表为:<vm-101, vm-102, vm-103>
- 清理孤立的虚拟机。
dcli> com vmware vcenter vm delete --vm vm-101 dcli> com vmware vcenter vm delete --vm vm-102 dcli> com vmware vcenter vm delete --vm vm-103
- 列出 vCenter Server 清单中的所有虚拟机。
- 找到并清理与 Tanzu Kubernetes Grid 集群关联的孤立虚拟机和资源池。
还原 主管 后,执行 主管 备份后创建的 Tanzu Kubernetes Grid 集群也将导致 vCenter Server 中出现孤立的虚拟机。
注:如果在执行还原操作后创建 TKG 集群时遇到问题,则必须按照当前步骤中的说明清理孤立的虚拟机。
- 查找孤立 Tanzu Kubernetes Grid 集群列表。
使用 kubectl 获取任一控制平面虚拟机上的 Tanzu Kubernetes Grid 集群 K8s 资源列表: <test-cluster, test-cluster-e2e-script, tkc-before-backup>。
root@4239f4159c7063d5608cf3fc0bdd532e [ ~ ]# k get tkc -A NAMESPACE NAME CONTROL PLANE WORKER TKR NAME AGE READY TKR COMPATIBLE UPDATES AVAILABLE selfservice-tkc-ns test-cluster 1 1 v1.23.8---vmware.3-tkg.1 19h True True test-gc-e2e-demo-ns test-cluster-e2e-script 3 1 v1.23.8---vmware.3-tkg.1 18h False True tkc-ns tkc-before-backup 3 1 v1.23.8---vmware.3-tkg.1 16h True True
使用 DCLI 获取与命名空间或 Tanzu Kubernetes Grid 集群关联的所有资源池,然后获取 vCenter Server 中的 Tanzu Kubernetes Grid 集群列表:<test-cluster, test-cluster-e2e-script, tkc-before-backup, tkc-after-backup>
dcli> com vmware vcenter resourcepool list |-----------------------|-------------| |name |resource_pool| |-----------------------|-------------| |Resources |resgroup-10 | |Resources |resgroup-23 | |Namespaces |resgroup-56 | |selfservice-tkc-ns |resgroup-62 | <--- this is a namespace |test-cluster |resgroup-66 | <--- Tanzu Kubernetes Grid cluster |test-gc-e2e-demo-ns |resgroup-70 | <--- this is a namespace |test-cluster-e2e-script|resgroup-74 | <--- Tanzu Kubernetes Grid cluster |tkc-ns |resgroup-80 | <--- this is a namespace |tkc-before-backup |resgroup-89 | <--- Tanzu Kubernetes Grid cluster |tkc-after-backup |resgroup-96 | <--- Tanzu Kubernetes Grid cluster |-----------------------|-------------|
- 比较上述步骤中的两个列表,孤立 Tanzu Kubernetes Grid 集群列表为: <tkc-after-backup>
- 清理与孤立 Tanzu Kubernetes Grid 集群关联的虚拟机。
通过使用关联的资源池 <resgroup-96>,使用 DCLI 获取与孤立 Tanzu Kubernetes Grid 集群关联的所有虚拟机:
dcli> com vmware vcenter vm list --resource-pools resgroup-96 |---------------|------|-----------------------------------------------|-----------|---------| |memory_size_MiB|vm |name |power_state|cpu_count| |---------------|------|-----------------------------------------------|-----------|---------| |2048 |vm-100|tkc-after-backup-zlcdm-wk5xf |POWERED_ON |2 | |2048 |vm-101|tkc-after-backup-zlcdm-76q4h |POWERED_ON |2 | |2048 |vm-98 |tkc-after-backup-zlcdm-9fv2w |POWERED_ON |2 | |2048 |vm-99 |tkc-after-backup-workers-4hdqb-657fb58d45-d7pqg|POWERED_ON |2 | |---------------|------|-----------------------------------------------|-----------|---------|
然后逐个删除这些虚拟机:dcli> com vmware vcenter vm power stop --vm vm-100 dcli> com vmware vcenter vm delete --vm vm-100
- 清理与孤立 Tanzu Kubernetes Grid 集群关联的资源池。
<dcli> com vmware vcenter resourcepool delete --resource-pool resgroup-96
您还可以从 vSphere Client 中删除孤立的资源池。
- 查找孤立 Tanzu Kubernetes Grid 集群列表。
- 找到并清理与持久卷 (PV) 关联的孤立第一类磁盘 (FCD)。
还原 主管 后,执行 主管 备份后创建的 PV K8s 资源将导致 vCenter Server 中出现孤立的 FCD。按照以下步骤找到并清理它们。
- 找到与 PV 关联的孤立 FCD。
- 安装将用于查找孤立 FCD 的 govc。govc 是一个用户友好的 CLI,可用于替代 UI 且非常适合执行自动化任务。
curl -L -o - "https://github.com/vmware/govmomi/releases/latest/download/govc_$(uname -s)_$(uname -m).tar.gz" | tar -C /usr/local/bin -xvzf - govc
有关更多安装选项,请访问 https://github.com/vmware/govmomi/tree/main/govc#installation。
- 运行以下 bash 脚本,列出 主管 上存在的 PV。
#!/bin/bash export GOVC_INSECURE=1 export GOVC_USERNAME='[email protected]' export GOVC_PASSWORD=<password> export GOVC_URL=https://<vc ip>/sdk # datastore path example - /test-vpx-1688432886-30489-wcp.wcp-sanity/datastore/sharedVmfs-0 govc volume.ls -l -ds=<datastore path>
结果如下:peiyangs@peiyangs-a01 govc % sudo bash orphanedPV.sh 590c8e31-f5bf-4179-9250-5cdd66bf591c pvc-843c932b-8974-475d-8f8a-9b165137169d 1.0GB KUBERNETES vSphereSupervisorID-7f88d7b3-12ac-4fcf-a101-b80eb76becdf 37f8ad5b-dfe6-465b-b0f0-11591a2968dc pvc-77c42590-f0b0-457f-9743-6a3ebca55078 1.0GB KUBERNETES vSphereSupervisorID-7f88d7b3-12ac-4fcf-a101-b80eb76becdf 28a265b8-2e6b-421c-b16d-046ffc7aeea7 pvc-1b88c923-4354-4537-a7cb-a8a6d763d5e7 1.0GB KUBERNETES vSphereSupervisorID-7f88d7b3-12ac-4fcf-a101-b80eb76becdf
- 运行以下 bash 脚本,列出 vCenter Server 中的所有磁盘:
#!/bin/bash export GOVC_INSECURE=1 export GOVC_USERNAME='[email protected]' export GOVC_PASSWORD=<password> export GOVC_URL=https://<vc ip>/sdk # datastore path example - /test-vpx-1688432886-30489-wcp.wcp-sanity/datastore/sharedVmfs-0 govc disk.ls -l -ds=<datastore path>
结果如下:peiyangs@peiyangs-a01 govc % sudo bash orphanedPV.sh 28a265b8-2e6b-421c-b16d-046ffc7aeea7 pvc-1b88c923-4354-4537-a7cb-a8a6d763d5e7 1.0G Jul 4 02:33:27 <--- this is the disk correspondings to PV 37f8ad5b-dfe6-465b-b0f0-11591a2968dc pvc-77c42590-f0b0-457f-9743-6a3ebca55078 1.0G Jul 4 02:32:41 <--- this is the disk correspondings to PV 3a7517c2-f8c2-46a9-b0d5-18c665759311 vmware-sv-img-cache-domain-c50 26.0M Jul 4 02:36:41 590c8e31-f5bf-4179-9250-5cdd66bf591c pvc-843c932b-8974-475d-8f8a-9b165137169d 1.0G Jul 4 02:30:45 <--- this is the disk correspondings to PV 68ba220c-0f83-49eb-b77a-d60471e24844 pvc-92f83ae0-7c2d-46d9-ab85-19858462ddd1 5.0G Jul 4 18:27:02 <--- this is the disk correspondings to PV 72dbe8c5-a3b5-4298-8203-ea1cb86116e6 vmware-sv-img-cache-domain-c50 3.0M Jul 4 02:38:39 79e233a6-0134-40e7-8ba8-3133442324f9 vmware-sv-img-cache-domain-c50 195.0M Jul 4 18:26:12 a1a0a9d7-0baf-4592-9041-8c0feb960246 vmware-sv-img-cache-domain-c50 7.0M Jul 4 02:35:37 cec2af09-80af-4086-a069-34140e2480dc vmware-sv-img-cache-domain-c50 193.0M Jul 4 02:31:12
- 比较上述步骤中的两个列表。
- PV 列表:<590c8e31-f5bf-4179-9250-5cdd66bf591c, 37f8ad5b-dfe6-465b-b0f0-11591a2968dc, 28a265b8-2e6b-421c-b16d-046ffc7aeea7>
- FCD 列表:<590c8e31-f5bf-4179-9250-5cdd66bf591c, 37f8ad5b-dfe6-465b-b0f0-11591a2968dc, 28a265b8-2e6b-421c-b16d-046ffc7aeea7, 68ba220c-0f83-49eb-b77a-d60471e24844>
孤立的 FCD 为:<68ba220c-0f83-49eb-b77a-d60471e24844>
- 安装将用于查找孤立 FCD 的 govc。govc 是一个用户友好的 CLI,可用于替代 UI 且非常适合执行自动化任务。
- 删除孤立的 FCD。
使用 govc 删除孤立的 FCD,示例脚本:
#!/bin/bash export GOVC_INSECURE=1 export GOVC_USERNAME='[email protected]' export GOVC_PASSWORD=<password> export GOVC_URL=https://<vc ip>/sdk # datastore path example - /test-vpx-1688432886-30489-wcp.wcp-sanity/datastore/sharedVmfs-0 govc disk.rm -ds=<datastore path> 68ba220c-0f83-49eb-b77a-d60471e24844
结果如下:peiyangs@peiyangs-a01 govc % sudo bash orphanedPV.sh [06-07-23 11:36:27] Deleting 68ba220c-0f83-49eb-b77a-d60471e24844...OK
- 找到与 PV 关联的孤立 FCD。