作为 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 |
包括要传递到虚拟机的其他元数据。您可以使用此键自定义客户机操作系统映像,并将这些项设置为虚拟机的 user-data 和 hostname,包括密码、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 客户机驱动程序。