このページでは、Google Distributed Cloud 上の VM ランタイムを実行している Google Distributed Cloud 接続デプロイで仮想マシンを管理する方法について説明します。このページの手順を行う前に、GDC 上の VM ランタイムを理解しておく必要があります。サポートされているゲスト オペレーティング システムの一覧については、GDC 上の VM ランタイムの検証済みゲスト オペレーティング システムをご覧ください。
仮想マシンが Distributed Cloud 接続プラットフォームの重要なコンポーネントとして機能する方法については、GKE Enterprise を拡張してオンプレミス エッジ VM を管理するをご覧ください。
Distributed Cloud コネクテッド クラスタは、仮想マシン ウェブフックをサポートしています。これにより、Distributed Cloud Connected はローカル Kubernetes API サーバーに対して行われたユーザー リクエストを検証できます。拒否されたリクエストについては、拒否の理由に関する詳細情報が生成されます。
Symcloud Storage を構成する
Google Distributed Cloud connected は、ストレージ ソリューションとして Rakuten Symcloud Storage を使用します。Symcloud Storage は、各 Distributed Cloud 接続ノードでローカル ストレージ抽象化レイヤとして機能し、他の Distributed Cloud 接続ノードで実行されているワークロードでローカル ストレージを使用できるようにするサードパーティ ソリューションです。
Symcloud Storage は Google Cloud Marketplace からデプロイされ、そこに記載されている規約が適用されます。Google は、Distributed Cloud コネクテッドでの Symcloud Storage の使用について限定的なサポートを提供しており、必要に応じてサードパーティ プロバイダに支援を求めることがあります。Symcloud Storage のソフトウェア アップデートは、Distributed Cloud Connected のソフトウェア アップデートに含まれています。
仮想マシンで Symcloud Storage を有効にするには、Google Distributed Cloud 接続クラスタを次のように構成します。詳細については、Distributed Cloud 接続ノードに Symcloud Storage をインストールするをご覧ください。
次のコマンドを使用して
robin-adminNamespace を作成します。kubectl create ns robin-admin
Symcloud Storage ライセンス ファイルを取得し、次のコマンドを使用してクラスタに適用します。
kubectl apply -f LICENSE_FILE
LICENSE_FILEは、ライセンス ファイルのパスに置き換えます。次のコマンドを使用して、Symcloud Storage が稼働していることを確認します。
kubectl describe robincluster
このコマンドでは、次のような出力が返されます。
Name: robin Namespace: Labels: app.kubernetes.io/instance=robin app.kubernetes.io/managed-by=robin.io app.kubernetes.io/name=robin Annotations: <none> API Version: manage.robin.io/v1 Kind: RobinCluster Metadata: … Spec: … Status: … Phase: Ready …次の構成をクラスタに適用して、
robin-block-immediateストレージ クラスを作成します。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: robin-block-immediate parameters: faultdomain: host replication: "3" blocksize: "512" provisioner: robin reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true
次の構成をクラスタに適用して、
robin-snapshotclassボリューム スナップショット クラスを作成します。apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: robin-snapshotclass labels: app.kubernetes.io/instance: robin app.kubernetes.io/managed-by: robin.io app.kubernetes.io/name: robin annotations: snapshot.storage.kubernetes.io/is-default-class: "true" driver: robin deletionPolicy: Deleterobin-block-immediateストレージ クラスのstorageprofileを次の内容で変更し、クラスタに適用します。apiVersion: cdi.kubevirt.io/v1beta1 kind: StorageProfile metadata: name: robin-block-immediate spec: claimPropertySets: – accessModes: – ReadWriteMany volumeMode: Block
virtctl 管理ツールをインストールする
Distributed Cloud 接続クラスタの仮想マシンを管理するには、virtctl クライアント ツールが必要です。ツールをインストールする手順は次のとおりです。
virtctlクライアント ツールをkubectlプラグインとしてインストールします。export VERSION=v1.3.1-anthos1.35-gke.39 gcloud storage cp gs://anthos-baremetal-release/virtctl/${VERSION}/linux-amd64/virtctl ./virtctl sudo mv ./virtctl /usr/local/bin/virtctl cd /usr/local/bin sudo ln -s virtctl kubectl-virt sudo chmod a+x virtctl cd -
virtプラグインがインストールされていることを確認します。kubectl plugin list
プラグインが正常にインストールされると、コマンドの出力に
kubectl-virtがプラグインの 1 つとして表示されます。
VM イメージ用の Cloud Storage バケットを作成する
このセクションの手順を完了して、仮想マシン イメージ用の Cloud Storage バケットを作成します。バケットは Workload Identity 連携を使用して、Kubernetes サービス アカウントを対応する Google Cloud サービス アカウントにバインドし、バケットにアクセスします。つまり、Kubernetes サービス アカウントは Google Cloudサービス アカウントを偽装します。イメージ リポジトリがすでに確立されている場合は、このセクションをスキップしてください。
マルチクラスタ フリートで ID の同一性のリスクを軽減するには、このセクションの手順を完了するときに、フリート Workload Identity 連携のベスト プラクティスのガイドラインに従います。
バケットを作成するの手順に沿ってバケットを作成します。
バケットにアクセスするための Google Cloud サービス アカウントを作成します。
export GSA_PROJECT_ID=GSA_PROJECT_ID export GSA_NAME=GSA_NAME gcloud iam service-accounts create ${GSA_NAME}
次のように置き換えます。
GSA_NAME: この Google Cloud サービス アカウントのわかりやすい名前。GSA_PROJECT_ID: ターゲットGoogle Cloud サービス アカウントをホストする Google Cloud プロジェクトの ID。
Google Cloud サービス アカウントにバケットへのアクセス権を付与します。
export BUCKET_PROJECT_ID=BUCKET_PROJECT_ID export GSA_NAME=GSA_NAME gcloud storage buckets add-iam-policy-binding gs://${BUCKET_PROJECT_ID}-vm-images \ --member="serviceAccount:${GSA_NAME}@${GSA_PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer" \ --project=${BUCKET_PROJECT_ID}
次のように置き換えます。
GSA_NAME: ターゲット Google Cloud サービス アカウントの名前。BUCKET_PROJECT_ID: バケットをホストする Google Cloud プロジェクトの ID。GSA_PROJECT_ID: ターゲットGoogle Cloud サービス アカウントをホストする Google Cloud プロジェクトの ID。
ターゲット仮想マシンの Namespace に Kubernetes サービス アカウントを作成し、 Google Cloud サービス アカウントにバインドします。
export GSA_PROJECT_ID=GSA_PROJECT_ID export VM_NAMESPACE=NAMESPACE export KSA_NAME=KSA_NAME export GSA_EMAIL=${GSA_NAME}@${GSA_PROJECT_ID}.iam.gserviceaccount.com kubectl create serviceaccount ${KSA_NAME} -n ${VM_NAMESPACE} kubectl annotate serviceaccount ${KSA_NAME} gsaEmail=${GSA_EMAIL} -n ${VM_NAMESPACE}
次のように置き換えます。
GSA_PROJECT_ID: ターゲットGoogle Cloud サービス アカウントをホストする Google Cloud プロジェクトの ID。NAMESPACE: ターゲット仮想マシンの Namespace。KSA_NAME: この Kubernetes サービス アカウントのわかりやすい名前。GSA_NAME: 対応する Google Cloud サービス アカウントの名前。
クラスタの Workload Identity プールと ID プロバイダの名前を確認します。
gcloud container fleet memberships describe MEMBERSHIP_ID \ --project=FLEET_PROJECT_ID \ --format="table(authority.identityProvider,authority.workloadIdentityPool,name)"
次のように置き換えます。
MEMBERSHIP_ID: クラスタのフリートのメンバーシップ名。通常、これはクラスタの名前です。FLEET_PROJECT_ID: フリート ホスト Google Cloud プロジェクトの ID。
このコマンドでは、次のような出力が返されます。
IDENTITY_PROVIDER: IDENTITY_PROVIDER WORKLOAD_IDENTITY_POOL: WORKLOAD_IDENTITY_POOL出力で、次の値をメモしておきます。
IDENTITY_PROVIDER: このクラスタの ID プロバイダ。WORKLOAD_IDENTITY_POOL: フリートに関連付けられている Workload Identity プールの名前。名前の形式はFLEET_PROJECT_ID.svc.id.googです。この手順のコマンドの詳細については、アプリケーションでフリート Workload Identity 連携を使用するをご覧ください。
Kubernetes サービス アカウントを Google Cloud サービス アカウントにバインドして、権限借用を設定します。
export GSA_PROJECT_ID=GSA_PROJECT_ID export GSA_NAME=GSA_NAME export KSA_NAME=KSA_NAME export VM_NAMESPACE=NAMESPACE export WI_POOL=WORKLOAD_IDENTITY_POOL gcloud iam service-accounts add-iam-policy-binding ${GSA_NAME}@${GSA_PROJECT_ID}.iam.gserviceaccount.com \ --project=${GSA_PROJECT_ID} \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:${WI_POOL}[${VM_NAMESPACE}/${KSA_NAME}]" \ --condition="IAM_CONDITION" \ --condition-from-file="IAM_CONDITION_FILE"
次のように置き換えます。
GSA_PROJECT_ID: ターゲットGoogle Cloud サービス アカウントをホストする Google Cloud プロジェクトの ID。GSA_NAME: 対応する Google Cloud サービス アカウントの名前。KSA_NAME: ターゲット Kubernetes サービス アカウントの名前。NAMESPACE: ターゲット仮想マシンの Namespace。WORKLOAD_IDENTITY_POOL: クラスタの Workload Identity プールの名前。IAM_CONDITION: 省略可。フリート内の特定のクラスタへのアクセスを制限するために使用する IAM 条件を指定します。省略するかNoneに設定すると、IAM 条件は適用されません。IAM_CONDITION_FILE: 省略可。フリート内の特定のクラスタへのアクセスを制限するために使用する IAM 条件を含むファイルを指定します。省略した場合、--conditionフラグが指定されてNone以外の値に設定されていない限り、IAM 条件は適用されません。
画像をバケットに保存します。
Google サービス アカウントのアクティブ キーから生成されたシークレットを使用する従来の方法を使用することもできます。詳細については、仮想マシン イメージ用の Cloud Storage バケットを作成するをご覧ください。
IAM 条件を使用してバケットへのアクセスを制限する
IAM 条件を使用すると、フリート内のどのクラスタがバケットにアクセスできるかを指定できます。IAM 条件が指定されていない場合、同じ Namespace に同じ Kubernetes サービス アカウントを持つフリート内のすべてのクラスタがバケットにアクセスできるため、ID の同一性に関するリスクが生じます。IAM 条件を指定しない場合は、Google サービス アカウントのアクティブ キーから生成されたシークレットを使用する以前のアクセス メカニズムにフォールバックすることもできます。バケットへのアクセスを制限する IAM 条件を設定して適用する例を次に示します。
IAM 条件ファイルを作成します。
cat <<EOF > iam_condition.yaml > expression: request.auth.claims.google.providerId == '$IDENTITY_PROVIDER' title: allow_only_this_cluster > EOF
GSA を KSA にバインドするときに、IAM 条件ファイルを適用します。GSA Google Cloud プロジェクトで次のコマンドを実行します。
gcloud iam service-accounts add-iam-policy-binding "${GSA_NAME}@${GSA_PROJECT_ID}.iam.gserviceaccount.com" \ --project="${GSA_PROJECT_ID}" \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:${WI_POOL}[${VM_NAMESPACE}/${KSA_NAME}]" \ --condition-from-file=iam_condition.yaml
仮想マシン イメージから仮想マシン ディスクを作成する
このセクションの手順に沿って、仮想マシン イメージから仮想マシン ディスクを作成します。
Cloud Storage に保存されているイメージからディスクを作成する
次の構成をクラスタに適用して、Cloud Storage バケットに保存されている仮想マシンから仮想マシン ディスクを作成します。
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME namespace: NAMESPACE spec: source: gcs: url: gs://${BUCKET_PROJECT_ID}-vm-images/IMAGE_FILE_PATH serviceAccount: KSA_NAME size: DISK_SIZE storageClassName: robin-block-immediate
次のように置き換えます。
DISK_NAME: この仮想マシン ディスクの名前。NAMESPACE: ターゲット仮想マシンの Namespace。IMAGE_FILE_PATH: 仮想マシン イメージ ファイルのフルパスと名前。 Google Cloud コンソールで画像を右クリックし、[gsutil URI をコピー] を選択して、このパスを取得します。KSA_NAME: 先ほど作成した仮想マシン イメージをダウンロードするための Kubernetes サービス アカウント。DISK_SIZE: ターゲット ディスクのサイズ。この値は、仮想マシン イメージ ファイルのvirtual-size値より大きくする必要があります。この値は、qemu-img info DISK_SIZEコマンドで確認できます。
storageClassName の値を指定しない場合は、VMRuntime リソースで指定されたデフォルト値が使用されます。
サードパーティ サービスに保存されているイメージからディスクを作成する
http、https、S3、またはイメージ レジストリを使用して仮想マシン イメージを保存することもできます。ストレージ サービスでアクセスに認証情報が必要な場合は、その認証情報をシークレットに変換し、secretRef フィールドを使用してそのシークレットを指定します。
次に例を示します。
source: http/s3/registry: url: secretRef: "SECRET_NAME" # optional
SECRET_NAME は、Secret の名前に置き換えます。
詳細については、HTTP/S3/GCS/Registry ソースをご覧ください。
空のディスクを作成する
次の構成をクラスタに適用して、空の仮想マシン ディスクを作成します。
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME namespace: NAMESPACE spec: size: DISK_SIZE storageClassName: robin-block-immediate
次のように置き換えます。
DISK_NAME: この仮想マシン ディスクの名前。NAMESPACE: ターゲット Namespace。DISK_SIZE: 必要なディスクサイズ(ギビバイト単位)。この値は、仮想マシン イメージ ファイルのvirtual-size値より大きくする必要があります。この値は、qemu-img info DISK_SIZEコマンドで確認できます。
storageClassName の値を指定しない場合は、VMRuntime リソースで指定されたデフォルト値が使用されます。
仮想ネットワーキングを構成する
ネットワーキングの手順に沿って、仮想マシンの仮想ネットワーキングを構成します。
仮想マシンを作成する
このセクションの手順に沿って、Distributed Cloud 接続サーバーのデプロイに仮想マシンを作成します。このセクションの手順は、さまざまなシナリオの構成を示すための例です。仮想マシンの構成の詳細については、GDC 上の VM ランタイムを使用して、特定の CPU とメモリリソースを持つ VM を作成するをご覧ください。
VM のリソース割り当ては、G1 や G2 ハードウェアなど、Distributed Cloud 接続デプロイのハードウェア プロファイルによって制限されます。単一の VM のサイズを、その VM が実行される物理 Distributed Cloud 接続マシンのサイズより大きくすることはできません。
Google Cloud コンソールを使用して仮想マシンを作成する
Google Cloud コンソールを使用して仮想マシンを作成するには、次の操作を行います。
Google Cloud コンソールで、[クラスタ] ページに移動します。
ターゲットの Google Cloud プロジェクトを選択します。
(省略可)まだログインしていない場合は、ターゲット クラスタにログインします。
左側のナビゲーション パネルで、[クラスタ] をクリックします。
[Anthos マネージド クラスタ] リストで、ターゲット クラスタをクリックします。
右側の情報ペインで、[ログイン] をクリックします。
表示されたポップアップ ダイアログで、使用する認証方法を選択し、認証情報を入力して、[ログイン] をクリックします。
[仮想マシン] ページに移動します。
[作成] をクリックします。
[基本] セクションで、次の操作を行います。
[名前] フィールドに、仮想マシンのわかりやすい名前を入力します。
[クラスタを選択] フィールドで、仮想マシンのターゲット クラスタを選択します。
[Namespace] フィールドで、ターゲット Namespace を選択します。
[OS タイプ] フィールドで、ターゲット オペレーティング システムを選択します。
(省略可)この仮想マシンの構成に 1 つ以上のラベルを追加する場合は、[ラベルを追加] をクリックします。
[マシンの構成] セクションで、次のいずれかの操作を行います。
この仮想マシンの vCPU 数とメモリ容量を指定する場合は、[カスタム構成] を選択して目標値を入力し、[次へ] をクリックします。
この仮想マシンに事前に決定された数の vCPU とメモリ量を使用する場合は、[標準構成] を選択し、[マシンタイプ] プルダウン リストからマシン構成を選択して、[次へ] をクリックします。
[ストレージ] セクションで、次のいずれかを行います。
この仮想マシン用に新しい仮想ディスクを作成する場合は、[新しいディスクを追加] を選択し、[名前] フィールドにわかりやすい名前を入力します。[GiB] フィールドにサイズ(ギガバイト単位)を入力し、[イメージ] フィールドに URL を入力します。
この仮想マシンに既存の仮想ディスクを使用する場合は、[既存のディスクを選択] を選択し、[ディスクを選択] プルダウン リストからターゲット ディスク イメージを選択します。
[読み取り専用] チェックボックスと [自動削除] チェックボックスを使用して、ディスクを読み取り専用にするかどうか、この仮想マシンが削除されたときに自動的に削除するかどうかを指定します。
[ドライバ] プルダウン リストで仮想ディスク ドライバを指定します。
この仮想マシンに別のディスクを追加するには、[追加ディスク] セクションで [ディスクを追加] をクリックします。
[NEXT] をクリックします。
[ネットワーク] セクションで、次の操作を行います。
[デフォルトのネットワーク インターフェース] サブセクションの [インターフェース名] フィールドに、この仮想マシンのプライマリ ネットワーク インターフェースの名前を指定します。
[ネットワーク タイプ] プルダウン リストから対応するネットワーク タイプを選択します。
[外部アクセスを許可する] チェックボックスを使用して、このネットワーク インターフェースへの外部アクセスを許可するかどうかを指定します。このオプションを有効にする場合は、[公開ポート] フィールドに、外部に公開するポートのカンマ区切りのリストを入力する必要があります。
この仮想マシンに 1 つ以上のセカンダリ ネットワーク インターフェースを追加する場合は、[ネットワーク インターフェースを追加] をクリックします。
[NEXT] をクリックします。
[詳細オプション] セクションで、[更新時に自動再起動] チェックボックスを使用して、ターゲット クラスタの Distributed Cloud 接続ソフトウェアの更新後にこの仮想マシンを再起動するかどうかを指定します。
[ファームウェア] セクションで、次の操作を行います。
[ブートローダーのタイプ] フィールドで、ターゲット ファームウェアのタイプを選択します。UEFI ファームウェアを選択した場合は、[セキュアブート] チェックボックスを使用してセキュアブートを有効にできます。
[シリアル] フィールドで、この仮想マシンのシリアル番号を指定します。
[UUID] フィールドに、この仮想マシンの Universally Unique Identifier(UUID)を指定します。
[Cloud-init] セクションの [ユーザーデータ シークレット] フィールドに、ユーザーデータ シークレット値を指定します。
[CREATE VM] をクリックして仮想マシンを作成します。
YAML ファイルから仮想マシンを作成する
YAML 構成ファイルから仮想マシンを作成する手順は次のとおりです。
Google Cloud コンソールで、[クラスタ] ページに移動します。
ターゲットの Google Cloud プロジェクトを選択します。
(省略可)まだログインしていない場合は、ターゲット クラスタにログインします。
左側のナビゲーション パネルで、[クラスタ] をクリックします。
[Anthos マネージド クラスタ] リストで、ターゲット クラスタをクリックします。
右側の情報ペインで、[ログイン] をクリックします。
表示されたポップアップ ダイアログで、使用する認証方法を選択し、認証情報を入力して、[ログイン] をクリックします。
[仮想マシン] ページに移動します。
[YAML で作成] をクリックします。
[クラスタを選択] フィールドで、仮想マシンのターゲット クラスタを選択します。
YAML 形式の仮想マシン構成を YAML フィールドに貼り付けます。サポートされている YAML フィールドの詳細については、仮想マシン仕様のリファレンスをご覧ください。
[作成] をクリックします。
ブート可能なディスク イメージから仮想マシンを作成する
ブート可能なディスク イメージから仮想マシンを作成するには、次の構成をクラスタに適用します。CPU、メモリ、ネットワーク オプションなどの構成をカスタマイズするには、仮想マシンの仕様リファレンスをご覧ください。
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: my-virtual-machine namespace: NAMESPACE spec: osType: Linux/Windows # guestEnvironment: {} # uncomment this line to disable guest environment priorityClassName: PRIORITY_CLASS compute: cpu: vcpus: 6 memory: capacity: 8Gi interfaces: - name: eth0 networkName: NETWORK_NAME ipAddresses: - IP_ADDRESS/PREFIX disks: - virtualMachineDiskName: DISK_NAME boot: true - virtualMachineDiskName: DISK_NAME
次のように置き換えます。
NAMESPACE: ターゲット Namespace。PRIORITY_CLASS: この仮想マシンの優先度クラス。優先度クラスは、優先度値の範囲です。kubectl get priorityclassを使用して、サポートされている優先度クラスのリストを表示します。スケジューリングの優先度が高いほど、ノードリソースが制約されている場合に VM が強制排除される可能性が低くなります。省略した場合、仮想マシンにはデフォルトの最小優先度が割り当てられます。NETWORK_NAME: VM インターフェースを接続する L2 ネットワークの名前。DISK_NAME: この仮想マシンのディスクの名前。vcpus: VM に割り当てる vCPU の数。capacity: VM に割り当てるメモリ量。たとえば、4Giや8Giです。ipAddresses: 省略可。仮想マシンの静的 IP 割り当てを提供します。基盤となる L2 ネットワークが外部 DHCP をサポートしている場合は、ipAddressesを省略して動的割り当てを許可できます。
cloud-init API を使用して VM を初期化する
cloud-init API は、クラウド VM を初期化する標準的な方法です。cloud-init を使用して、VM のファイル、ユーザー、その他の側面を設定します。
互換性を確保するには、cloud-init 起動ルーチンを検証します。本番環境で構成を使用する前に、構成をテスト VM に適用して、正常に初期化されることを確認します。
次の例は一般的なものであり、実際の環境でテストする必要があります。
cloud-init ユーザーデータを使用して VM 構成を自動化する
GDC 上の VM ランタイムは、Linux VM の cloud-init ユーザーデータをサポートしています。ユーザーデータは、プレーン テキスト文字列、Base64 でエンコードされた文字列として指定するか、Kubernetes Secret を参照して指定できます。
VM が正しく初期化されるように、本番環境にデプロイする前にすべてのユーザーデータ構成を検証します。
次の例は、VM の起動時にコマンドを実行するためのプレーン テキストの cloud-init ユーザーデータを含む VirtualMachine マニフェストを示しています。
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: compute: cpu: vcpus: 2 memory: capacity: 4Gi osType: Linux cloudInit: noCloud: userData: | #cloud-config runcmd: - echo "Hello World" > /tmp/hello.txt
VM_NAME は、仮想マシンの名前に置き換えます。
cloud-init データを使用して VM を作成するには、マニフェストを vm-cloud-init.yaml として保存し、kubectl apply コマンドを実行してクラスタに適用します。
kubectl apply -f vm-cloud-init.yaml
cloud-init のトラブルシューティング
cloud-init で問題が発生した場合は、VM 内のログを確認します。通常、ログは次のディレクトリにあります。
/var/log/cloud-init.log/var/log/cloud-init-output.log
ISO 光ディスク イメージから仮想マシンを作成する
GDC 上の VM ランタイムを使用して、ISO イメージから起動する Windows 仮想マシン(VM)を作成できます。この機能を使用すると、従来の Windows ベースのエンタープライズ アプリケーション、特殊なサードパーティ ソフトウェア、カスタム POS システムを Distributed Cloud 接続クラスタに直接移行できます。
VM ディスクに使用されるイメージは、Distributed Cloud に接続されたイメージ バケットからインポートされます。マニフェストを作成する前に、Windows インストール ISO と KubeVirt virtio ドライバ ISO をダウンロードして、イメージ バケットにアップロードする必要があります。信頼性の高い再現可能な仮想マシン ビルドを確保するため、ドライバ ISO の検証済みコピーを内部リポジトリに保持するか、Cloud Storage に事前ステージングすることをおすすめします。
マニフェストを作成する
Windows ISO イメージから起動するには、次のマニフェストが必要です。
- Windows ISO を含む
VirtualMachineDisk。 - KubeVirt Windows
virtioドライバを含むVirtualMachineDisk。 - Windows をインストールするブートディスクとして使用する空の
VirtualMachineDisk。
次の例は、3 つの必須ディスクの VirtualMachineDisk マニフェストを示しています。
マニフェストで、次のように置き換えます。
BUCKET_PROJECT_ID: イメージ バケットが存在するプロジェクト ID。KSA_NAME: バケットから読み取る権限を持つ Kubernetes サービス アカウント。
マニフェストでリクエストされる PVC size は、常に ISO の正確な仮想サイズ以上である必要があります。
Windows ISO ディスク
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: windows-iso spec: size: 10Gi storageClassName: robin-block-immediate diskType: cdrom source: gcs: url: gs://BUCKET_PROJECT_ID-vm-images/windows.iso serviceAccount: KSA_NAME
VirtIO ドライバ ディスク
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: virtio-driver spec: size: 1Gi storageClassName: robin-block-immediate diskType: cdrom source: gcs: url: gs://BUCKET_PROJECT_ID-vm-images/virtio-win.iso serviceAccount: KSA_NAME
空のブートディスク
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: windows-vm-boot-dv spec: size: 40Gi storageClassName: robin-block-immediate
ディスクを作成する
これらのディスクを作成するには、VirtualMachineDisk マニフェストを保存し、kubectl apply コマンドを実行してクラスタに適用します。
kubectl apply -f windows-iso.yaml
kubectl apply -f virtio-driver.yaml
kubectl apply -f windows-vm-boot-dv.yaml
Windows VM を作成する
Windows VM を作成するには、VM を定義してディスクを参照するマニフェストを作成します。VM は ISO ディスクから起動してインストールを開始します。
次の例は、VirtualMachine マニフェストを示しています。
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: labels: kubevirt.io/vm: windows-vm name: windows-vm spec: osType: Windows disks: - virtualMachineDiskName: windows-vm-boot-dv boot: true - virtualMachineDiskName: windows-iso - virtualMachineDiskName: virtio-driver compute: cpu: vcpus: 2 memory: capacity: 4Gi interfaces: - name: eth0 networkName: NETWORK_NAME default: true ipAddresses: - IP_ADDRESS/PREFIX
VM を作成するには、マニフェストを windows-vm.yaml として保存し、kubectl apply コマンドを実行してクラスタに適用します。
kubectl apply -f windows-vm.yaml
接続してインストールを完了する
接続してインストールを完了する手順は次のとおりです。
VNC を使用して VM に接続するには、
virtctlツールまたはkubectl virtプラグインを使用します。virtctl vnc windows-vmまたは、
virtctlをkubectlプラグインとしてインストールした場合:kubectl virt vnc windows-vmvirtctlの詳細については、KubeVirt のドキュメントをご覧ください。Windows インストーラに表示される手順に沿って操作します。プロンプトが表示されたら、[カスタム インストール] を選択します。
メッセージが表示されたら、ストレージとネットワークの
virtioドライバを読み込み、接続されたvirtio-driverディスクを参照します。インストールを完了します。
リモート デスクトップ プロトコル経由のアクセス
ゲスト OS にリモート デスクトップ プロトコル(RDP)をインストールして有効にすると、RDP を介して VM にアクセスできます。
仮想マシンは L2 ネットワークに接続されているため、割り当てられた IP アドレス(10.223.237.10 など)を使用してクラスタの外部から直接アクセスできます。RDP クライアントを使用して、ポート 3389 のこの IP アドレスに接続します。L2 内部 IP アドレスが、企業のファイアウォールとルーティング ルールを介してクライアント マシンからアクセスできることを確認します。
GPU をサポートする仮想マシンを作成する
このページで説明する手順を完了して、ビジネス要件を満たすように構成された仮想マシンを作成し、GPU リソースを使用するように仮想マシンを構成するの手順を完了します。
仮想マシンの仕様のリファレンス
次の表に、VirtualMachine 仕様のキーフィールドを示します。これらのフィールドは、kubectl apply を使用してクラスタに適用する仮想マシン YAML マニフェストを構成する場合、または Google Cloud コンソールで [YAML で作成] オプションを使用する場合に使用します。
| フィールド | 説明 | 必須 |
|---|---|---|
apiVersion |
vm.cluster.gke.io/v1 を指定します。 |
必須 |
kind |
VirtualMachine を指定します。 |
必須 |
metadata.name |
仮想マシンの一意の名前。 | 必須 |
metadata.namespace |
VM が実行される Kubernetes Namespace。 | 必須 |
spec.osType |
ゲスト オペレーティング システムのタイプ。サポートされている値: Linux、Windows。 |
必須 |
spec.guestEnvironment |
ゲスト環境を構成します。省略した場合、ゲスト環境はデフォルトで有効になります。無効にするには、{} に設定します。 |
省略可 |
spec.priorityClassName |
VM の優先度クラス。優先度が高いほど、削除される可能性が低くなります。 | 省略可 |
spec.compute |
VM のコンピューティング リソースを構成します。 | 必須 |
spec.compute.cpu.vcpus |
割り当てる vCPU の数。指定できる値は 1 ~ 96 です。 | 必須 |
spec.compute.memory.capacity |
メモリ容量(8Gi など)。 |
必須 |
spec.interfaces |
VM のネットワーク インターフェースのリスト。 | 必須 |
spec.interfaces[].name |
インターフェースの名前(例: eth0)。 |
必須 |
spec.interfaces[].networkName |
接続するサブネットワークの名前。クラスタ内の Network リソースにマッピングされます。 |
必須 |
spec.interfaces[].ipAddresses |
このインターフェースに割り当てる静的 IP アドレス。サブネットワークで DHCP が有効になっていない場合は、静的 IP アドレスを指定する必要があります。 | 省略可 |
spec.disks |
VM にアタッチするディスクのリスト。 | 必須 |
spec.disks[].virtualMachineDiskName |
VirtualMachineDisk リソースの名前。 |
必須 |
spec.disks[].boot |
ブートディスクの場合は true に設定します。ブート可能としてマークできるディスクは 1 つだけです。 |
省略可 |
仮想マシンにアクセスする
このセクションの手順を完了して、Distributed Cloud 接続サーバーのデプロイで実行されている仮想マシンにアクセスします。
直接アクセスのネットワーク要件
Kubernetes LoadBalancer サービスを使用せずにローカル ネットワークから仮想マシンに直接アクセスするには、論理ネットワーキング コンポーネントと物理ネットワーキング コンポーネントを構成する必要があります。Distributed Cloud Connected はクラスタ内ネットワーク リソースを自動的に管理しますが、外部ネットワークと VM インターフェースを構成する必要があります。
サブネットワーク(VLAN)を構成する: Distributed Cloud Edge Network API を使用して、特定の VLAN ID を持つサブネットワークを作成します。
gcloudまたは API を使用します。Distributed Cloud connected は、この構成をクラスタに自動的に同期します。Kubernetes ネットワーク リソースを手動で作成する必要はありません。サブネットワークの作成と管理をご覧ください。ローカル ネットワークを構成する: ネットワーク管理者は、Distributed Cloud 接続サーバーに接続されている物理スイッチとルーターを次のように構成する必要があります。
- スイッチポートで構成された VLAN ID を許可します(VLAN トランキング)。
- ローカル ネットワークとサブネットワーク間のルーティングを有効にします。Distributed Cloud に接続されたルーターで動的ルーティング プロトコルである Border Gateway Protocol(BGP)が構成されている場合、これらのルートはサブネットワークの作成後に自動的にアドバタイズされます。それ以外の場合は、サブネットワークの IP 範囲(CIDR)のトラフィックを Distributed Cloud 接続ノードに転送するように、物理ルーターで静的ルートを構成する必要があります。
VM インターフェースを構成する:
VirtualMachineYAML 構成で、spec.interfacesフィールドにネットワーク名を指定して、このサブネットワークを使用するように VM を構成します。詳細については、仮想マシンの仕様のリファレンスをご覧ください。
Linux VM のアクセス認証情報を取得する
仮想マシンにアクセスするための認証情報がまだない場合は、このセクションの手順に沿って、Linux ゲスト環境機能を使用して認証情報を取得します。
次の構成をクラスタに適用して、ターゲット仮想マシンの Linux ゲスト環境を有効にします。
kind: VirtualMachine metadata: name: my-virtual-machine namespace: my-vm-namespace spec: osType: Linux guestEnvironment: // enabled by default; disable with guestEnvironment: {} accessManagement: enable: true
次のコマンドを使用して、SSH 鍵ペアを含む
id_rsa.pubファイルを生成します。ssh-keygen -t rsa次の構成をクラスタに適用して、
VirtualMachineAccessRequestリソースを作成します。apiVersion: vm.cluster.gke.io/v1alpha1 kind: VirtualMachineAccessRequest metadata: name: RESOURCE_NAME namespace: NAMESPACE spec: vm: VM_NAME user: USER_NAME ssh: key: RSA_KEY ttl: 2h
次のように置き換えます。
RESOURCE_NAME: この仮想マシン アクセス リクエスト リソースのわかりやすい名前。NAMESPACE: ターゲット Namespace。VM_NAME: ターゲット仮想マシンの名前。USER_NAME: アクセス権が付与されるユーザーの名前。RSA_KEY: 前の手順で生成したid_rsa.pubファイルの内容。
アクセス リクエストのステータスを確認するには、
kubectl getコマンドを実行します。kubectl get vmar
コマンドが
Configuredステータスを返したら、次の手順に進みます。SSH を使用して仮想マシンにアクセスします。仮想マシンがローカル ネットワークに接続されている場合は、SSH を使用して直接アクセスします。
ssh USERNAME@VM_IP_ADDRESS -i PATH_TO_KEY
次のように置き換えます。
USERNAME: ログインに使用するユーザー名(VirtualMachineAccessRequestリソースで構成されたユーザーなど)。VM_IP_ADDRESS: 仮想マシンの IP アドレス。PATH_TO_KEY: 前の手順で生成した公開鍵に対応する秘密 SSH 認証鍵のパス。
RDP を使用して Windows VM にアクセスする
ローカル ネットワークからリモート デスクトップ プロトコル(RDP)を使用して Windows VM にアクセスするには、ゲスト OS で RDP を有効にし、VM がネットワーク アクセス可能であることを確認して、ユーザー認証情報を設定します。
前提条件
Windows で RDP を有効にする: RDP は Windows ゲスト OS 内で有効にする必要があります。RDP がまだ有効になっていない場合は、Virtual Network Computing(VNC)コンソールを使用して VM 画面に直接アクセスし、RDP を有効にします。kubectl virt vnc コマンドは、ローカル ワークステーションでグラフィカル ビューア ウィンドウを開きます。このコマンドを実行するには、ワークステーションに Remote Viewer や VNC Viewer などの VNC ビューア クライアントがインストールされている必要があります。
kubectl virt vnc VM_NAME -n NAMESPACE
次のように置き換えます。
VM_NAME: Windows VM の名前。NAMESPACE: VM の Namespace。
RDP を使用して接続する
VM の IP アドレスを取得するには、
kubectl getコマンドを実行します。kubectl get vmi VM_NAME -n NAMESPACE -o jsonpath='{.status.interfaces[*].ipAddress}'
次のように置き換えます。
VM_NAME: Windows VM の名前。NAMESPACE: VM の Namespace。
出力から、ルーティングされたサブネットワークに属する IP アドレスをメモします。
Windows のリモート デスクトップ接続や Linux の Remmina などの標準 RDP クライアントを使用して、ポート
3389で取得した IP アドレスに接続します。ユーザー名とパスワードを使用してログインします。
仮想マシンを起動、再起動、停止する
仮想マシンを起動、再起動、停止するには、次のコマンドを使用します。
- 仮想マシンを起動する:
kubectl virt start vmVM_NAME-nNAMESPACE - 仮想マシンを再起動する:
kubectl virt restart vmVM_NAME-nNAMESPACE - 仮想マシンを停止する:
kubectl virt stop vmVM_NAME-nNAMESPACE
次のように置き換えます。
VM_NAME: ターゲット仮想マシンの名前。NAMESPACE: ターゲット Namespace。
Google Cloud コンソールを使用して仮想マシンを起動または停止する
Google Cloud コンソールで、[クラスタ] ページに移動します。
ターゲットの Google Cloud プロジェクトを選択します。
(省略可)まだログインしていない場合は、ターゲット クラスタにログインします。
左側のナビゲーション パネルで、[クラスタ] をクリックします。
[Anthos マネージド クラスタ] リストで、ターゲット クラスタをクリックします。
右側の情報ペインで、[ログイン] をクリックします。
表示されたダイアログで、使用する認証方法を選択し、認証情報を入力して、[ログイン] をクリックします。
[仮想マシン] ページに移動します。
仮想マシンのリストで、ターゲット仮想マシンのチェックボックスをオンにします。
ページの上部にある [開始] または [停止] をクリックします。
Google Cloud コンソールを使用して仮想マシンのステータスを表示する
Google Cloud コンソールで、[クラスタ] ページに移動します。
ターゲットの Google Cloud プロジェクトを選択します。
(省略可)まだログインしていない場合は、ターゲット クラスタにログインします。
左側のナビゲーション パネルで、[クラスタ] をクリックします。
[Anthos マネージド クラスタ] リストで、ターゲット クラスタをクリックします。
右側の情報ペインで、[ログイン] をクリックします。
表示されたポップアップ ダイアログで、使用する認証方法を選択し、認証情報を入力して、[ログイン] をクリックします。
[仮想マシン] ページに移動します。
ターゲット仮想マシンをクリックします。
表示されたページで、[詳細]、[イベント]、[YAML] の各タブをクリックして、この仮想マシンに関する対応する情報を確認します。
仮想マシンを変更する
仮想マシンを変更するには、削除して、更新された構成で再作成する必要があります。
Google Cloud コンソールを使用して仮想マシンを削除する
Google Cloud コンソールで、[クラスタ] ページに移動します。
ターゲットの Google Cloud プロジェクトを選択します。
(省略可)まだログインしていない場合は、ターゲット クラスタにログインします。
左側のナビゲーション パネルで、[クラスタ] をクリックします。
[Anthos マネージド クラスタ] リストで、ターゲット クラスタをクリックします。
右側の情報ペインで、[ログイン] をクリックします。
表示されたダイアログで、使用する認証方法を選択し、認証情報を入力して、[ログイン] をクリックします。
[仮想マシン] ページに移動します。
仮想マシンのリストで、ターゲット仮想マシンのチェックボックスをオンにします。
ページ上部の [削除] をクリックします。
表示される確認ダイアログで、仮想マシンの名前を入力して [削除] をクリックします。