Distributed Cloud 接続ラックで仮想マシンを管理する

このページでは、Google Distributed Cloud の VM ランタイムを実行している Google Distributed Cloud 接続ラックで仮想マシンを管理する方法について説明します。このページの手順を行う前に、GDC 上の VM ランタイムを理解しておく必要があります。サポートされているゲスト オペレーティング システムの一覧については、GDC 上の VM ランタイムの検証済みゲスト オペレーティング システムをご覧ください。

仮想マシンが Distributed Cloud 接続プラットフォームの重要なコンポーネントとして機能する方法については、GKE Enterprise を拡張してオンプレミス エッジ VM を管理するをご覧ください。

Distributed Cloud 接続クラスタは、仮想マシン ウェブフックをサポートしています。これにより、Distributed Cloud Connected はローカル Kubernetes API サーバーに対して行われたユーザー リクエストを検証できます。拒否されたリクエストについては、拒否理由の詳細情報が生成されます。

Distributed Cloud Connected で GDC 上の VM ランタイムのサポートを有効にする

デフォルトでは、Distributed Cloud Connected で GDC 仮想マシンの VM ランタイム サポートが無効になっています。有効にするには、このセクションの手順を行います。このセクションの手順では、完全に機能する Distributed Cloud 接続クラスタがあることを前提としています。

  1. 次の内容で VMRuntime カスタム リソースを変更し、クラスタに適用します。

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      # Enable Anthos VM Runtime support
      enabled: true
      # vmImageFormat defaults to "raw" if not set
      vmImageFormat: "raw"
      # Set node grace period to 55 seconds;
      haPolicy:
        defaultRecoveryStrategy: Reschedule
        nodeHeartbeatInterval: 15s
        nodeMonitorGracePeriod: 55s

    vmImageFormat パラメータの値は変更しないでください。Distributed Cloud Connected は、他の仮想ディスク形式をサポートしていません。

    このプロセスは通常、完了するまでに数分かかります。

    vmImageFormat パラメータの値は変更しないでください。Distributed Cloud Connected は、他の仮想ディスク形式をサポートしていません。

    このプロセスは通常、完了するまでに数分かかります。

  2. 次のコマンドを使用して、VMRuntime カスタム リソースがクラスタに適用されていることを確認します。

    kubectl get vmruntime -o yaml

    このコマンドでは、次の例のような出力が返されます。

     - apiVersion: vm.cluster.gke.io/v1
       kind: VMRuntime
       metadata:
         name: vmruntime
         ...
       spec:
         enabled: true
         vmImageFormat: raw
       status:
         ...
       ready: true
         ...
    
  3. 次のコマンドを使用して、クラスタで GDC の VM ランタイム仮想マシン サポートが有効になっていることを確認します。

    kubectl get pods -n vm-system

    このコマンドは、クラスタで実行されている GDC サブシステム Pod の VM Runtime を示す出力を返します。次の例をご覧ください。

    NAME                                                READY   STATUS         RESTARTS        AGE
    cdi-apiserver-6c76c6cf7b-n68wn                      1/1     Running        0               132m
    cdi-deployment-f78fd599-vj7tv                       1/1     Running        0               132m
    cdi-operator-65c4df9647-fcb9d                       1/1     Running        0               134m
    cdi-uploadproxy-7765ffb694-6j7bf                    1/1     Running        0               132m
    macvtap-fjfjr                                       1/1     Running        0               134m
    virt-api-77dd99dbbb-bs2fb                           1/1     Running        0               132m
    virt-api-77dd99dbbb-pqc27                           1/1     Running        0               132m
    virt-controller-5b44dbbbd7-hc222                    1/1     Running        0               132m
    virt-controller-5b44dbbbd7-p8xkk                    1/1     Running        0               132m
    virt-handler-n76fs                                  1/1     Running        0               132m
    virt-operator-86565697d9-fpxqh                      2/2     Running        0               134m
    virt-operator-86565697d9-jnbt7                      2/2     Running        0               134m
    vm-controller-controller-manager-7844d5fb7b-72d8m   2/2     Running        0               134m
    vmruntime-controller-manager-845649c847-m78r9       2/2     Running        0               175m
    

virtctl 管理ツールをインストールする

Distributed Cloud 接続クラスタの仮想マシンを管理するには、virtctl クライアント ツールが必要です。ツールをインストールする手順は次のとおりです。

  1. virtctl クライアント ツールを kubectl プラグインとしてインストールします。

    export VERSION=v0.59.0-anthos1.28-gke.8
    gcloud storage cp gs://anthos-baremetal-release/virtctl/${VERSION}/linux-amd64/virtctl /usr/local/bin/virtctl
    cd /usr/local/bin
    sudo ln -s virtctl kubectl-virt
    sudo chmod a+x virtctl
    cd -
  2. virt プラグインがインストールされていることを確認します。

    kubectl plugin list

    プラグインが正常にインストールされると、コマンドの出力に kubectl-virt がプラグインの 1 つとして表示されます。

Distributed Cloud コネクテッドで仮想マシンをプロビジョニングする

このセクションでは、Symcloud Storage 抽象化レイヤを使用して、Distributed Cloud 接続クラスタに Linux 仮想マシンと Windows 仮想マシンをプロビジョニングする方法を示す構成例を示します。

Distributed Cloud Connected は仮想マシンにファイル システム ストレージを提供しないため、kubectl virt コマンドを使用して Distributed Cloud Connected クラスタに仮想マシンを直接作成することはできません。

このセクションの手順を完了する前に、まず Symcloud Storage 用に Distributed Cloud connected を構成するの手順を完了する必要があります。後でクラスタで Symcloud Storage を無効にすると、Symcloud Storage を使用するように構成された仮想マシンは失敗します。

Distributed Cloud コネクテッドに Linux 仮想マシンをプロビジョニングする

次の例は、Ubuntu Server 22.04 を実行する Symcloud Storage を使用して Linux 仮想マシンをプロビジョニングする方法を示しています。インストール ソースは Ubuntu Server 22.04 ISO ディスク イメージです。

  1. Ubuntu Server インストール ディスク イメージの次の内容で VirtualMachineDisk リソースを作成し、クラスタに適用します。

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: ubuntu-iso-disk
    spec:
      size: 20Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: https://releases.ubuntu.com/jammy/ubuntu-22.04.3-live-server-amd64.iso
  2. 仮想マシンの仮想ハードディスクに次の内容で VirtualMachineDisk リソースを作成し、クラスタに適用します。

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: "ubuntu-main-disk"
    spec:
      size: 200Gi
      storageClassName: robin
  3. 次の内容で VirtualMachineType リソースを作成して、仮想マシンの構成を指定し、クラスタに適用します。

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineType
    metadata:
      name: small-2-20
    spec:
      cpu:
        vcpus: 2
      memory:
        capacity: 20Gi
  4. 次の内容で VirtualMachine リソースを作成して、クラスタで仮想マシンをインスタンス化して起動し、クラスタに適用します。

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: ubu-vm
      name: ubu-vm #  Propagate the virtual machine name to the VMI
    spec:
      osType: Linux
      compute:
        virtualMachineTypeName: small-2-20
      interfaces:
        - name: eth0
          networkName: my-network
          default: true
      disks:
        - virtualMachineDiskName: ubuntu-main-disk
          boot: true
        - virtualMachineDiskName: ubuntu-iso-disk

    また、クラスタで次の機能も構成する必要があります。

  5. 仮想マシンに Ubuntu Server をインストールします。

    1. importer Pod が Ubuntu Server インストール ディスク イメージをダウンロードするまで待ちます。
    2. 仮想マシンのステータスを確認します。

      kubectl get gvm VM_NAME

      VM_NAME は、仮想マシンの名前に置き換えます(この例では ubu-vm)。

    3. SSH またはリモート デスクトップを使用して仮想マシンにログオンします。

    4. Ubuntu Linux のインストール手順を完了します。

  6. クリーンアップします。

    1. 仮想マシンを停止します。

      kubectl virt stop VM_NAME

      VM_NAME は、仮想マシンの名前に置き換えます(この例では ubu-vm)。

    2. 仮想マシンの YAML ファイルを編集して、インストール ディスク イメージへの参照を削除します。

      kubectl edit gvm VM_NAME

      VM_NAME は、仮想マシンの名前に置き換えます(この例では ubu-vm)。

    3. 仮想マシンを起動します。

      kubectl virt start VM_NAME

      VM_NAME は、仮想マシンの名前に置き換えます(この例では ubu-vm)。

    4. インストール ディスク イメージの VirtualMachineDisk リソースを削除します。

      kubectl delete virtualmachinedisk ubuntu-iso-disk

Distributed Cloud Connected で Windows 仮想マシンをプロビジョニングする

次の例は、Symcloud Storage を使用して Windows 仮想マシンをプロビジョニングする方法を示しています。手順は Linux 仮想マシンのプロビジョニングと似ていますが、Windows のインストールに必要な virtio ドライバ ディスク イメージが追加されています。

  1. Windows のライセンス コピーとそのインストール メディア イメージを入手します。

  2. Windows インストール ディスク イメージの次の内容で VirtualMachineDisk リソースを作成し、クラスタに適用します。

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-iso-disk
      namespace: default
    spec:
      size: 5Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: WINDOWS_ISO_URL

    NAT_GATEWAY は、ターゲットの Windows インストール ISO ディスク イメージの完全な URL に置き換えます。

  3. virtio ドライバ用に次の内容の VirtualMachineDisk リソースを作成し、クラスタに適用します。

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-virtio-driver
      namespace: default
    spec:
      size: 1Gi
      storageClassName: robin
      diskType: cdrom
      source:
        http:
          url: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
  4. 仮想マシンの仮想ハードディスクに次の内容で VirtualMachineDisk リソースを作成し、クラスタに適用します。

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: windows-main-disk
      namespace: default
    spec:
      size: 15Gi
      storageClassName: robin
  5. 次の内容で VirtualMachineType リソースを作成して、仮想マシンの構成を指定し、クラスタに適用します。

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineType
    metadata:
      name: small-2-20
    spec:
      cpu:
        vcpus: 2
      memory:
        capacity: 20Gi
  6. 次の内容で VirtualMachine リソースを作成し、クラスタに適用します。このリソースは、クラスタで仮想マシンをインスタンス化して起動します。

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: win-vm
      name: win-vm #  Propagate the virtual machine name to the VMI
    spec:
      osType: Windows
      compute:
        virtualMachineTypeName: my-vmt
      interfaces:
        - name: eth0
          networkName: my-network
          default: true
      disks:
        - virtualMachineDiskName: windows-main-disk
          boot: true
        - virtualMachineDiskName: windows-iso-disk
        - virtualMachineDiskName: win-virtio-driver

    また、クラスタで次の機能も構成する必要があります。

  7. 仮想マシンに Windows をインストールします。

    1. importer Pod が Windows インストール ディスク イメージをダウンロードするまで待ちます。
    2. 仮想マシンのステータスを確認します。

      kubectl get gvm VM_NAME

      VM_NAME は、仮想マシンの名前に置き換えます(この例では win-vm)。

    3. Windows VM に接続して OS のインストールを完了するの手順に沿って、Windows のインストールを完了します。

  8. クリーンアップします。

    1. 仮想マシンを停止します。

      kubectl virt stop VM_NAME

      VM_NAME は、仮想マシンの名前に置き換えます(この例では win-vm)。

    2. ISO イメージとドライバ ディスクを切断するの手順を完了します。

Distributed Cloud コネクテッドで実行されている仮想マシンを管理する

Distributed Cloud Connected で実行されている仮想マシンの管理手順については、次の GDC 上の VM ランタイムのドキュメントをご覧ください。

Distributed Cloud connected で実行されている仮想マシンを管理するには、まず kubectl 接続を構成する必要があります。

Distributed Cloud Connected で GDC の VM ランタイムを無効にする

このセクションの手順に沿って、Distributed Cloud Connected で GDC 上の VM ランタイムを無効にします。Distributed Cloud コネクテッドで GDC 上の VM ランタイムを無効にする前に、VM を削除するで説明されているように、Distributed Cloud コネクテッド クラスタ上のすべての仮想マシンを停止して削除する必要があります。

Distributed Cloud Connected で GDC 上の VM ランタイムを無効にするには、次の手順で VMRuntime カスタム リソースを変更して enabled 仕様パラメータを false に設定し、クラスタに適用します。

apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
  name: vmruntime
spec:
  # Disable Anthos VM Runtime
  enabled: false
  # vmImageFormat defaults to "raw" if not set
  vmImageFormat: "raw"

次のステップ