身為 DevOps 工程師,您可以透過在 Kubernetes YAML 檔案中撰寫虛擬機器部署規格,以宣告方式佈建虛擬機器及其客體作業系統。
程序
- 準備虛擬機器 YAML 檔案。
在此檔案中,指定下列參數:
選項 |
敘述 |
apiVersion |
指定虛擬機器服務 API 的版本。例如 vmoperator.vmware.com/v1alpha1。 |
kind |
指定要建立的 Kubernetes 資源類型。唯一可用的值為 VirtualMachine。 |
spec.imageName |
指定虛擬機器應使用的內容程式庫映像。例如,centos-stream-8-vmservice-v1alpha1-xxxxxxxxxxxxx。 |
spec.storageClass |
確定要用於儲存持續性磁碟區的儲存區類別。例如,wcpglobal-storage-profile。 |
spec.className |
指定用於說明要使用的虛擬硬體設定的虛擬機器類別名稱。例如,custom。 |
spec.networkInterfaces |
指定虛擬機器的網路相關設定。
|
spec.vmMetadata |
包含要傳遞至虛擬機器的其他中繼資料。可以使用此金鑰自訂客體作業系統映像,並設定諸如虛擬機器的 hostname 和 user-data 之類的項目,包括密碼、SSH 金鑰等。下列範例 YAML 將使用 ConfigMap 儲存中繼資料。 |
將以下內容用作 YAML 檔案
vmsvc-centos-vm.yaml
的範例。
apiVersion: vmoperator.vmware.com/v1alpha1
kind: VirtualMachine
metadata:
name: vmsvc-centos-vm
namespace: my-ns-centos
spec:
imageName: centos-stream-8-vmservice-v1alpha1-xxxxxxxxxxxxx
className: custom
powerState: poweredOn
storageClass: wcpglobal-storage-profile
networkInterfaces:
- networkName: primary
networkType: vsphere-distributed
vmMetadata:
configMapName: vmsvc-centos-nginx-cm
transport: OvfEnv
---
apiVersion: v1
kind: ConfigMap
metadata:
name: vmsvc-centos-nginx-cm
namespace: my-ns-centos
data:
user-data: >-
I2Nsb3VkLWNvbmZpZwoKcGFzc3dvcmQ6IFZNV0FSRQpzc2hfcHdhdXRoOiB0cnVlCgp1c2VyczoKICAtIG5hbWU6IHZtd2FyZQogICAgc3VkbzogQUxMPShBTEwpIE5PUEFTU1dEOkFMTAogICAgbG9ja19wYXNzd2Q6IGZhbHNlCiAgICAjIFBhc3N3b3JkIHNldCB0byBBZG1pbiEyMwogICAgcGFzc3dkOiAnJDEkc2FsdCRTT0MzM2ZWYkEvWnhlSXdENXl3MXUxJwogICAgc2hlbGw6IC9iaW4vYmFzaAoKd3JpdGVfZmlsZXM6CiAgLSBjb250ZW50OiB8CiAgICAgIFZNU1ZDIFNheXMgSGVsbG8gV29ybGQKICAgIHBhdGg6IC9oZWxsb3dvcmxkCg==
ConfigMap 包含用於指定客體作業系統的使用者名稱和密碼的 cloud-config blob。在此範例中,vmsvc-centos-nginx-cm ConfigMap 中的
user-data 代表以下採用 base64 格式的程式碼片段:
#cloud-config
password: VMWARE
ssh_pwauth: true
users:
- name: vmware
sudo: ALL=(ALL) NOPASSWD:ALL
lock_passwd: false
passwd: '$1$salt$SOC33fVbA/ZxeIwD5yw1u1'
shell: /bin/bash
write_files:
- content: |
VMSVC Says Hello World
path: /helloworld
- 部署虛擬機器。
kubectl apply -f vmsvc-centos-vm.yaml
- 確認已建立虛擬機器。
kubectl get vm -n my-ns-centos
NAME AGE
vmsvc-centos-vm 28s
- 檢查虛擬機器的狀態和相關聯的事件。
kubectl describe virtualmachine vmsvc-centos-vm
輸出類似於下列內容。從輸出中,還可以取得虛擬機器的 IP 位址,該位址會顯示在 Vm Ip 欄位中。
Name: vmsvc-centos-vm
Namespace: my-ns-centos
Annotations: vmoperator.vmware.com/image-supported-check: disabled
API Version: vmoperator.vmware.com/v1alpha1
Kind: VirtualMachine
Metadata:
Creation Timestamp: 2021-03-23T19:07:36Z
Finalizers:
virtualmachine.vmoperator.vmware.com
Generation: 1
Managed Fields:
...
...
Spec:
Class Name: custom
Image Name: vmservice-centos-20-10-server-cloudimg-amd64
Network Interfaces:
Network Name: primary
Network Type: vsphere-distributed
Power State: poweredOn
Storage Class: wcpglobal-storage-profile
Vm Metadata:
Config Map Name: vmsvc-centos-nginx-cm
Transport: OvfEnv
Status:
Bios UUID: 4218ec42-aeb3-9491-fe22-19b6f954ce38
Change Block Tracking: false
Conditions:
Last Transition Time: 2021-03-23T19:08:59Z
Status: True
Type: VirtualMachinePrereqReady
Host: 10.185.240.10
Instance UUID: 50180b3a-86ee-870a-c3da-90ddbaffc950
Phase: Created
Power State: poweredOn
Unique ID: vm-73
Vm Ip: 10.161.75.162
Events: <none>
...
- 確認虛擬機器 IP 可以連線。
ping 10.161.75.162
PING 10.161.75.162 (10.161.75.162): 56 data bytes
64 bytes from 10.161.75.162: icmp_seq=0 ttl=59 time=43.528 ms
64 bytes from 10.161.75.162: icmp_seq=1 ttl=59 time=53.885 ms
64 bytes from 10.161.75.162: icmp_seq=2 ttl=59 time=31.581 ms
下一步
如需其他詳細資料,請參閱
〈虛擬機器佈建簡介〉部落格。
如果虛擬機器包括針對 vGPU 設定的 PCI 裝置,請安裝 NVIDIA 顯示驅動程式。請參閱在 vSphere with Tanzu 中的虛擬機器中安裝 NVIDIA 客體驅動程式。