[번역] vtopology – Insights into vSphere infrastructure from kubectl

출처 : https://cormachogan.com/2020/01/03/vtopology-insights-into-vsphere-infrastructure-from-kubectl/

vSphere 위에서 쿠버네티스를 실행하는 것에 점점 익숙해짐에 따라, 특히 kubectl을 통해 쿠버네티스로부터 vSphere 인프라를 쿼리할 수 있는 것이 유용할 수 있다는 것을 깨닫게 되었다. 예를 들어 마스터 노드 및 워커 노드에 대한 몇 가지 세부 정보(예: 해당 노드가 속해 있는 ESXi 호스트, 리소스 사용량)를 알고 싶다. 또한 영구 볼륨이 있는 경우 어떤 vSphere 데이터스토어가 켜져 있는지, 어떤 정책을 사용하고 있는지, VMDK에 대한 경로는 무엇인지 쿼리하려면 어떻게 해야 하는가? 따라서 나는 이 정보를 보고 싶을 때마다 vSphere Client에 로그온하지 않고도 이 정보를 검색할 수 있는 툴(vtopology)에 대한 작업을 시작했다.

vtopology는 vSphere 토폴로지를 kubectl에서 표시하는 bash와 Powershell/PowerCLI의 조합이다. 아이디어는 쿠버네티스 오브젝트(예: 노드, PV)를 vSphere 개체(예: 가상 시스템, VMDK)에 매핑할 수 있어야 한다는 것이다. 일단 설치되면 사용자는 vtopology를 실행하고 기본 vSphere 인프라 구성 요소를 표시하여 해당 Kubernetes 클러스터가 vSphere 리소스를 어떻게 소비하는지 확인할 수 있다.

PowerShell과 PowerCLI가 모두 필요하다. Ubuntu의 PowerShell 및 PowerCLI에 대한 배포 지침은 여기에서 확인할 수 있다. 지침은 Ubuntu 16.04에 대한 것이므로 OS 버전에 맞는 저장소를 가리키도록 지침을 약간 수정하기만 하면 된다. Ubuntu 17.04를 배치하기 위해 같은 단계를 성공적으로 수행했다. 이 도구는 Ubuntu 17.04에서 테스트 및 검증되었다.

vtopology는 간단한 파워셀 스크립트로 사용할 수 있지만, 툴도 krew 플러그인으로 실행할 수 있도록 구성되었다. 이는 사용자가 도구를 'kubectl vtopology' 명령으로 실행할 수 있음을 의미한다. krew 설치 방법에 대한 자세한 내용은 다음과 같다. krew를 설치하면 다음과 같이 vtopology 플러그인을 설치할 수 있다.

$ kubectl krew install --manifest=vtopology.yaml --archive=vtopology.tar.gz 
Installing plugin: vtopology 
CAVEATS: 
\ 
 | This plugin needs the following programs: 
 | * PowerShell and PowerCLI 
/ 
Installed plugin: vtopology

일단 설치되면, 툴은 kubectl에서 직접 실행될 수 있다.

$ kubectl vtopology -h

Usage: kubectl vtopology <connect-args> <args>

where connect-args (optionally) includes the following:
-vc | --vcenter
-u | --username
-p | --password

and where args is one of the following:
-e | --hosts
-v | --vms
-n | --networks
-d | --datastores
-k | --k8svms
-s | --spbm
-t | --tags
-a | --all
-h | --help

Advanced args
-pv <pv_id> - display vSphere storage details about a Persistent Volume
-kn <node_name> - display vSphere VM details about a Kubernetes node
-sp <policy> - display details of storage policy

Note this tool requires PowerShell with PowerCLI, as well as kubectl

여기 vtopology가 유용할 수 있는 몇 가지 예가 있다.

K8s 클러스터를 확장하고 싶다. 사용 가능한 vSphere 리소스는?

이미 여러 마스터 노드와 작업자 노드로 구성된 쿠버네티스 클러스터를 구축한 상태 입니다. K8s 클러스터를 확장하여 추가 작업자 노드를 확보하고자 한다. 현재 vSphere 환경의 사용량을 확인하고 사용 가능한 리소스가 있는지 확인할 수 있는가?

$ kubectl vtopology -vc vcsa-06-b.rainpole.com -u administrator@vsphere.local -p ****. -e

*** This command is being run against the following Kubernetes configuration context: cork8s-csi-01

*** To switch to another context, use the kubectl config use-context command ***

Found DataCenter: CH-Datacenter

  Found Cluster: CH-Cluster

    Found ESXi HOST: esxi-dell-g.rainpole.com

    vSphere Version : 6.7.0
    Build Number : 14320388
    Connection State : Connected
    Power State : PoweredOn
    Manufacturer : Dell Inc.
    Model : PowerEdge R630
    Number of CPU : 20
    Total CPU (MHz) : 43980
    CPU Used (MHz) : 4236
    Total Memory (GB) : 127.91
    Memory Used (GB) : 78.55

  ESXi HOST esxi-dell-g.rainpole.com is part of Host Group PKS-AZ-1

  Found ESXi HOST: esxi-dell-h.rainpole.com

    vSphere Version : 6.7.0
    Build Number : 14320388
    Connection State : Connected
    Power State : PoweredOn
    Manufacturer : Dell Inc.
    Model : PowerEdge R630
    Number of CPU : 20
    Total CPU (MHz) : 43980
    CPU Used (MHz) : 4439
    Total Memory (GB) : 127.91
    Memory Used (GB) : 100.28

  ESXi HOST esxi-dell-h.rainpole.com is part of Host Group PKS-AZ-1

  Found ESXi HOST: esxi-dell-f.rainpole.com

    vSphere Version : 6.7.0
    Build Number : 14320388
    Connection State : Connected
    Power State : PoweredOn
    Manufacturer : Dell Inc.
    Model : PowerEdge R630
    Number of CPU : 20
    Total CPU (MHz) : 43980
    CPU Used (MHz) : 2003
    Total Memory (GB) : 127.91
    Memory Used (GB) : 85.69

  ESXi HOST esxi-dell-f.rainpole.com is part of Host Group PKS-AZ-1

  Found ESXi HOST: esxi-dell-e.rainpole.com

    vSphere Version : 6.7.0
    Build Number : 14320388
    Connection State : Connected
    Power State : PoweredOn
    Manufacturer : Dell Inc.
    Model : PowerEdge R630
    Number of CPU : 20
    Total CPU (MHz) : 43980
    CPU Used (MHz) : 1674
    Total Memory (GB) : 127.91
    Memory Used (GB) : 113.75

  ESXi HOST esxi-dell-e.rainpole.com is part of Host Group PKS-AZ-2

보시다시피, 나는 또한 호스트가 Host Group의 일부인지 아닌지를 보고한다. 이는 이제 호스트 그룹이 Availability Zone과 통합되어 쿠버네티스 구성요소의 배치를 결정할 수 있는 Enterprise PKS에서 유용할 수 있다. 작업자 노드 수를 확장하기 위해 AZ에 ESXi 호스트를 추가해야 하는 동시에 장애(예: 랙 정전)가 애플리케이션에 영향을 미치지 않도록 해야 할 수 있다. Enterprise PKS 및 호스트 그룹에 대한 자세한 내용은 여기를 참조하기 바란다.

다른 앱을 배치하고 싶다. 사용 가능한 워커 리소스는 무엇인가?

노드를 쿼리하기 위한 몇 가지 kubectl 명령이 있지만, 자원 관점에서는 많은 세부사항을 주지 않는다.

$ kubectl get nodes
NAME          STATUS   ROLES    AGE    VERSION
k8s-master    Ready    master   136d   v1.14.2
k8s-worker1   Ready    <none>   136d   v1.14.2
k8s-worker2   Ready    <none>   136d   v1.14.2
k8s-worker3   Ready    <none>   14d    v1.14.2
k8s-worker4   Ready    <none>   14d    v1.14.2
k8s-worker5   Ready    <none>   14d    v1.14.2

확장된 정보를 얻을 수 있는 옵션:

$ kubectl get nodes -o wide
NAME          STATUS   ROLES    AGE    VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
k8s-master    Ready    master   136d   v1.14.2   10.27.51.39   10.27.51.39   Ubuntu 18.04.3 LTS   4.15.0-58-generic   docker://18.6.0
k8s-worker1   Ready    <none>   136d   v1.14.2   10.27.51.40   10.27.51.40   Ubuntu 18.04.3 LTS   4.15.0-72-generic   docker://18.6.0
k8s-worker2   Ready    <none>   136d   v1.14.2   10.27.51.41   10.27.51.41   Ubuntu 18.04.3 LTS   4.15.0-72-generic   docker://18.6.0
k8s-worker3   Ready    <none>   14d    v1.14.2   10.27.51.31   10.27.51.31   Ubuntu 18.04.3 LTS   4.15.0-58-generic   docker://18.6.0
k8s-worker4   Ready    <none>   14d    v1.14.2   10.27.51.32   10.27.51.32   Ubuntu 18.04.3 LTS   4.15.0-58-generic   docker://18.6.0
k8s-worker5   Ready    <none>   14d    v1.14.2   10.27.51.30   10.27.51.30   Ubuntu 18.04.3 LTS   4.15.0-58-generic   docker://18.6.0

vtopology에서 -k 옵션을 사용하여 노드에 대한 자세한 정보를 얻을 수 있다.

$ kubectl vtopology -vc vcsa-06-b.rainpole.com -u administrator@vsphere.local -p **** -k

*** This command is being run against the following Kubernetes configuration context: cork8s-csi-01

*** To switch to another context, use the kubectl config use-context command ***


Kubernetes Node VM Name : k8s-master

    IP Address : 10.27.51.39
    Power State : PoweredOn
    On ESXi host : esxi-dell-h.rainpole.com
    Folder : ubuntu64Guest
    Hardware Version : vmx-10
    Number of CPU : 4
    Cores per Socket : 1
    Memory (GB) : 4
    Provisioned Space (GB) : 114.55
    Used Space (GB) : 114.55


Kubernetes Node VM Name : k8s-worker1

    IP Address : 10.27.51.40
    Power State : PoweredOn
    On ESXi host : esxi-dell-e.rainpole.com
    Folder : ubuntu64Guest
    Hardware Version : vmx-15
    Number of CPU : 4
    Cores per Socket : 1
    Memory (GB) : 4
    Provisioned Space (GB) : 75.62
    Used Space (GB) : 75.62


Kubernetes Node VM Name : k8s-worker2

    IP Address : 10.27.51.41
    Power State : PoweredOn
    On ESXi host : esxi-dell-h.rainpole.com
    Folder : ubuntu64Guest
    Hardware Version : vmx-15
    Number of CPU : 4
    Cores per Socket : 1
    Memory (GB) : 4
    Provisioned Space (GB) : 88.78
    Used Space (GB) : 88.78

etc, etc.

노드가 VM/호스트 그룹의 일부인 경우 위의 출력에도 보고될 수 있다.

앱에 영구 스토리지가 필요하다. 사용 가능한 데이터스토어는?

많은 애플리케이션에는 영구 스토리지가 필요하다. 그러나 볼륨 프로비저닝에 사용할 수 있는 데이터스토어는? 그리고 그들에게 얼마나 많은 공간이 있는가? vtopology에서 -d 옵션을 사용하면 도움이 될 수 있다.

$ kubectl vtopology -vc vcsa-06-b.rainpole.com -u administrator@vsphere.local -p **** -d

*** This command is being run against the following Kubernetes configuration context: cork8s-csi-01

*** To switch to another context, use the kubectl config use-context command ***


Found Datastore: 5TB-VMFS6
        State            :  Available
        Datastore Type   :  VMFS
        Capacity (GB)    :  4,998.75
        Free Space (GB)  :  3,514.90
        Connected hosts :
                 esxi-dell-g.rainpole.com
                 esxi-dell-h.rainpole.com
                 esxi-dell-f.rainpole.com
                 esxi-dell-e.rainpole.com


Found Datastore: pksvol
        State            :  Available
        Datastore Type   :  VMFS
        Capacity (GB)    :  999.75
        Free Space (GB)  :  519.66
        Connected hosts :
                 esxi-dell-g.rainpole.com
                 esxi-dell-h.rainpole.com
                 esxi-dell-f.rainpole.com
                 esxi-dell-e.rainpole.com


Found Datastore: pure-iscsi-vol1
        State            :  Unavailable
        Datastore Type   :  VMFS
        Capacity (GB)    :  99.75
        Free Space (GB)  :  48.34
        Connected hosts :
                 esxi-dell-h.rainpole.com


Found Datastore: vsanDatastore
        State            :  Available
        Datastore Type   :  vsan
        Capacity (GB)    :  5,961.63
        Free Space (GB)  :  3,574.25
        Connected hosts :
                 esxi-dell-g.rainpole.com
                 esxi-dell-h.rainpole.com
                 esxi-dell-f.rainpole.com
                 esxi-dell-e.rainpole.com


Found Datastore: vVolDatastore
        State            :  Available
        Datastore Type   :  VVOL
        Capacity (GB)    :  8,388,608.00
        Free Space (GB)  :  8,388,538.38
        Connected hosts :
                 esxi-dell-g.rainpole.com
                 esxi-dell-h.rainpole.com
                 esxi-dell-f.rainpole.com
                 esxi-dell-e.rainpole.com

etc, etc.

'connected' 상태는 데이터스토어에 액세스할 수 있는 ESXi 호스트(즉, 공유 여부)를 알려주기 때문에 유용하다.

스토리지에 대한 주제를 계속 다루자. K8s 클러스터 관리자로서 StorageClasses를 만들고 싶다고 합시다. K8s이 vSphere에서 실행 중일 때 StorageClasses는 vSphere를 기반으로 하는 스토리지 정책을 사용할 수 있다. 그러나 사용 가능한 스토리지 정책을 확인하려면 어떻게 해야 하는가? 스토리지 정책 관련 세부 정보를 보려면 어떻게 해야 하는가?

vSphere 스토리지 정책에 대한 자세한 내용은 어떻게 확인할 수 있는가?

먼저 StorageClass에 통합될 수 있는 다양한 스토리지 정책에 대한 정보를 살펴봅시다. 우리는 이것을 위해 -s 옵션을 사용할 수 있다.

$ kubectl vtopology -vc vcsa-06-b.rainpole.com -u administrator@vsphere.local -p **** -s

*** This command is being run against the following Kubernetes configuration context:  cork8s-csi-01

*** To switch to another context, use the kubectl config use-context command ***

*** These are Storage Policies in use on the vSphere Infrastructure which could potentially be used for Kuberenetes StorageClasses

        Found Policy: VVol No Requirements Policy
        Found Policy: RAID-5
        Found Policy: Space-Efficient1
        Found Policy: VM Encryption Policy
        Found Policy: vvol-simple
        Found Policy: vvol-snaps
        Found Policy: raid-1
        Found Policy: silver
        Found Policy: OSR-0
        Found Policy: gold
        Found Policy: OSR-100
        Found Policy: Host-local PMem Default Storage Policy
        Found Policy: Space-Efficient
        Found Policy: vSAN Default Storage Policy
        Found Policy: bronze
        Found Policy: VMcrypt

이제 정책 목록이 나왔으니 고급 옵션인 -sp를 사용하여 각 정책을 조회할 수 있다.

$ kubectl vtopology -vc vcsa-06-b.rainpole.com -u administrator@vsphere.local -p **** -sp raid-1

*** This command is being run against the following Kubernetes configuration context:  cork8s-csi-01

*** To switch to another context, use the kubectl config use-context command ***

Display Detailed Policy attributes of: raid-1

        Found Policy Attribute : (VSAN.hostFailuresToTolerate=1) AND \
(VSAN.replicaPreference=RAID-1 (Mirroring) - Performance) AND \
(VSAN.checksumDisabled=False) AND (VSAN.stripeWidth=1) AND \
(VSAN.forceProvisioning=False) AND (VSAN.iopsLimit=0) AND \
(VSAN.cacheReservation=0) AND (VSAN.proportionalCapacity=0)

다른 예제가 있지만 이번에는 vVols 데이터스토어를 쿼리한다. 작성 시 vSphere CSI 드라이버에서는 vVol이 지원되지 않는다는 점에 유의한다. 하지만, 이것은 우리가 곧 지원되기를 바라는 것이다.

$ kubectl vtopology -vc vcsa-06-b.rainpole.com -u administrator@vsphere.local -p **** -sp vvol-snaps

*** This command is being run against the following Kubernetes configuration context: cork8s-csi-01

*** To switch to another context, use the kubectl config use-context command ***

Display Detailed Policy attributes of: vvol-snaps

Found Policy Attribute : (com.purestorage.storage.policy.PureFlashArray=True) AND \
(com.purestorage.storage.replication.LocalSnapshotPolicyCapable=True) AND \
(com.purestorage.storage.replication.LocalSnapshotInterval=01:00:00) AND \
(com.purestorage.storage.replication.LocalSnapshotRetention=7.00:00:00)

이제 PV(persistent volume) 문제를 해결해야 한다고 가정해 보자. 자세한 조사를 위해 vSphere의 실제 VMDK에 PV를 매핑하려면 어떻게 해야 하는가? 어느 데이터스토어에 있는가? 이 정책을 만드는 데 어떤 정책이 사용되었는가? vtopology가 여기서 어떤 도움을 줄 수 있는지 살펴 보겠다.

PV를 지원하는 VMDK를 확인하려면 어떻게 해야 하는가?

이미 PV와 PVC 출력으로부터 약간의 정보를 얻을 수 있다. 심지어 더 자세한 정보를 위해 그것들을 설명할 수도 있다. 그러나 이러한 출력에서 vSphere의 PV를 백업하는 데 사용되는 VMDK에 대한 자세한 내용은 없다.

$ kubectl get pvc -n cassandra
NAME                         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
cassandra-data-cassandra-0   Bound    pvc-e2989b44-2e27-11ea-80e4-005056a239d9   1Gi        RWO            cass-sc-csi    3m28s
cassandra-data-cassandra-1   Bound    pvc-01936124-2e28-11ea-80e4-005056a239d9   1Gi        RWO            cass-sc-csi    2m36s
cassandra-data-cassandra-2   Bound    pvc-3bdd199d-2e28-11ea-80e4-005056a239d9   1Gi        RWO            cass-sc-csi    58s


$ kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                  STORAGECLASS   REASON   AGE
pvc-01936124-2e28-11ea-80e4-005056a239d9   1Gi        RWO            Delete           Bound    cassandra/cassandra-data-cassandra-1   cass-sc-csi             2m28s
pvc-3bdd199d-2e28-11ea-80e4-005056a239d9   1Gi        RWO            Delete           Bound    cassandra/cassandra-data-cassandra-2   cass-sc-csi             56s
pvc-e2989b44-2e27-11ea-80e4-005056a239d9   1Gi        RWO            Delete           Bound    cassandra/cassandra-data-cassandra-0   cass-sc-csi             3m33s


$ kubectl describe pvc cassandra-data-cassandra-0 -n cassandra
Name:          cassandra-data-cassandra-0
Namespace:     cassandra
StorageClass:  cass-sc-csi
Status:        Bound
Volume:        pvc-e2989b44-2e27-11ea-80e4-005056a239d9
Labels:        app=cassandra
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
               volume.beta.kubernetes.io/storage-class: cass-sc-csi
               volume.beta.kubernetes.io/storage-provisioner: csi.vsphere.vmware.com
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      1Gi
Access Modes:  RWO
VolumeMode:    Filesystem
Events:
  Type       Reason                Age                    From                                                                                  Message
  ----       ------                ----                   ----                                                                                  -------
  Normal     ExternalProvisioning  7m52s (x2 over 7m52s)  persistentvolume-controller                                                           waiting for a volume to be created, either by external provisioner "csi.vsphere.vmware.com" or manually created by system administrator
  Normal     Provisioning          7m52s                  csi.vsphere.vmware.com_vsphere-csi-controller-0_2dacb016-230d-11ea-b0c6-9e255ee28255  External provisioner is provisioning volume for claim "cassandra/cassandra-data-cassandra-0"
Mounted By:  cassandra-0


$ kubectl describe pv pvc-01936124-2e28-11ea-80e4-005056a239d9
Name:            pvc-01936124-2e28-11ea-80e4-005056a239d9
Labels:          <none>
Annotations:     pv.kubernetes.io/provisioned-by: csi.vsphere.vmware.com
Finalizers:      [kubernetes.io/pv-protection external-attacher/csi-vsphere-vmware-com]
StorageClass:    cass-sc-csi
Status:          Bound
Claim:           cassandra/cassandra-data-cassandra-1
Reclaim Policy:  Delete
Access Modes:    RWO
VolumeMode:      Filesystem
Capacity:        1Gi
Node Affinity:   <none>
Message:
Source:
    Type:              CSI (a Container Storage Interface (CSI) volume source)
    Driver:            csi.vsphere.vmware.com
    VolumeHandle:      8fe0fc5b-c42b-42f5-bde0-3ec992d45d15
    ReadOnly:          false
    VolumeAttributes:      fstype=
                           storage.kubernetes.io/csiProvisionerIdentity=1576835009605-8081-csi.vsphere.vmware.com
                           type=vSphere CNS Block Volume
Events:                <none>

이제 vtopology가 영구 볼륨에 대해 보고할 수 있는 vSphere 정보:

$ kubectl vtopology -vc vcsa-06-b.rainpole.com -u administrator@vsphere.local -p **** -pv pvc-01936124-2e28-11ea-80e4-005056a239d9

*** This command is being run against the following Kubernetes configuration context:  cork8s-csi-01

*** To switch to another context, use the kubectl config use-context command ***

=== vSphere Datastore information for PV pvc-01936124-2e28-11ea-80e4-005056a239d9 ===

        Datastore Name     :  vsanDatastore
        Datastore State    :  Available
        Datastore Type     :  vsan
        Capacity (GB)      :  5961.625
        Free Space (GB)    :  3574.25


=== Virtual Machine Disk (VMDK) information for PV pvc-01936124-2e28-11ea-80e4-005056a239d9 ===

        VMDK Name          :  d7f9cc0f8c614c97b579c6af8d0ffc87.vmdk
        VMDK Type          :  Flat
        VMDK Capacity (GB) :  1
        VMDK Filename      :  [vsanDatastore] 33d05a5d-e436-3297-94f7-246e962f4910/d7f9cc0f8c614c97b579c6af8d0ffc87.vmdk


=== Storage Policy (SPBM) information for PV pvc-01936124-2e28-11ea-80e4-005056a239d9 ===

        Kubernetes VM/Node :  k8s-worker4
        Hard Disk Name     :  Hard disk 2
        Policy Name        :  raid-1
        Policy Compliance  :  compliant

나쁘지 않다. 이제 VMDK 파일의 데이터스토어, 정책 및 이벤트 경로를 볼 수 있다. 이는 원래 VCP 드라이버(예: Enterprise PKS)를 사용하는 K8s 클러스터와 CSI 드라이버를 사용하는 최신 클러스터에 적용되어야 한다.

vtopology의 다른 항목들 중 일부는 현재 진행 중인 작업이다. 네트워킹 관점에서 어떤 유용한 정보를 보여줄 수 있을지 아직 잘 모르겠어. 아이디어 환영한다. 이제 vSphere와 쿠버네티스에 모두 접속할 수 있는 사람들에게, 둘 사이의 컨텍스트를 바꾸는 것은 아마도 제2의 자연일 겁니다. 그러나 vSphere에 액세스할 수 없는 K8s 클러스터 관리자에게 vtopology는 (적어도 내 의견으로는) 매우 유용할 수 있다.

Disclaimer

vtopology는 엔터프라이즈 PKS뿐만 아니라 vSphere에 기본적으로 배포된 Kubernetes 클러스터(kubeadmin 사용)에 대해서만 테스트되었다. vSphere에서 실행되는 RedHat OpenShift 배포 또는 Google Anthos 사내 배포에 대해서는 테스트되지 않았다. 누군가 그 플랫폼에서 vtopology를 시도해 볼 기회가 있다면, 나는 그것이 어떻게 진행되는지 듣고 싶다.

이 코드는 VMware 코드가 아니라 나만의 코드라는 점에 유의하기 바란다. 따라서 내용은 "있는 그대로" 제공된다. 즉, 코드는 사용자 자신의 리스크로 사용되며, 보증 없이 제공되며, 코드의 사용으로 인한 손해에 대한 책임은 없다. 새로운 업데이트가 추가됨에 따라 코드도 언제든지 변경될 수 있다.

어디서 구할 수 있지?

vtopology는 GitHub에서 사용할 수 있으며, 여기에서 확인할 수 있다. https://github.com/cormachogan/vtopology

피드백

당신의 의견을 저에게 알려주십시오. 그것을 개선하기 위해 무엇을 할 수 있을까? vtopology에서 쿼리하는 데 유용한 vSphere 인프라의 다른 부분은?