DevOps エンジニアは、Kubernetes YAML ファイルに仮想マシンのデプロイ仕様を記述することで、宣言による方法で仮想マシンとそのゲスト OS をプロビジョニングできます。
手順
- 仮想マシン 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 |
仮想マシンに渡す追加のメタデータが含まれます。このキーを使用すると、ゲスト OS イメージをカスタマイズし、仮想マシンの hostname などのアイテムや、パスワード、ssh キーなどを含む user-data を設定できます。次の 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 には、ゲスト OS のユーザー名とパスワードを指定する 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 アドレスを取得することもできます。仮想マシンの 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
結果
仮想マシン サービスを介して作成された仮想マシンを管理できるのは、Kubernetes 名前空間の DevOps のみです。
vSphere Client からライフサイクルを管理することはできませんが、vSphere 管理者は仮想マシンとそのリソースを監視できます。詳細については、『
vSphere with Tanzu で利用可能な仮想マシンの監視』を参照してください。
次のタスク
詳細については、ブログ記事
Introducing Virtual Machine Provisioningを参照してください。
vGPU 用に構成された PCI デバイスが仮想マシンに含まれる場合は、NVIDIA ディスプレイ ドライバをインストールします。vSphere with Tanzu の仮想マシンへの NVIDIA ゲスト ドライバのインストールを参照してください。