このページでは、Anthos VM ランタイムを使用して、ベアメタル版 Anthos クラスタに VM をデプロイする方法について説明します。Anthos VM ランタイムは、KubeVirt を使用してクラスタ上の VM をオーケストレートし、VM ベースのアプリとワークロードを均一な開発環境で使用できるようにします。Anthos VM ランタイムは、新しいクラスタの作成時、および既存のクラスタに対して有効にできます。
始める前に
以下の手順は、クラスタが稼働していることを前提としています。稼働していない場合は、ベアメタル版 Anthos クラスタ クイックスタートの手順に沿って、ワークステーション上のクラスタをすばやく設定できます。
Anthos VM ランタイムを有効にする
次のコマンドを実行して、クラスタ構成を開きます。
kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig edit cluster CLUSTER_NAME -n cluster-CLUSTER_NAME
CLUSTER_NAME は、使用するクラスタの名前に置き換えます。
クラスタ構成の
spec
セクションにkubevirt
を追加します。ノードがハードウェア仮想化をサポートしている場合は、パフォーマンスを向上させるためにuseEmulation
をfalse
に設定します。ハードウェア仮想化がサポートされていない、またはサポートされているかどうか不明な場合は、true
に設定します。spec: anthosBareMetalVersion: 1.8.9 kubevirt: useEmulation: true bypassPreflightCheck: false
構成を保存し、KubeVirt が有効であることを確認します。
kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig get pods -n kubevirt
CLUSTER_NAME は、使用するクラスタの名前に置き換えます。
このコマンドは次のような出力を返します。
NAME READY STATUS RESTARTS AGE virt-api-767bc4ccd5-56fk2 1/1 Running 0 11d virt-api-767bc4ccd5-ms8tn 1/1 Running 0 11d virt-controller-c8468c84c-l4dzr 1/1 Running 0 11d virt-controller-c8468c84c-tljnj 1/1 Running 1 11d virt-handler-6wk5v 1/1 Running 0 11d virt-handler-ngth6 1/1 Running 0 11d virt-operator-7447547957-c6g5d 1/1 Running 1 11d virt-operator-7447547957-nl826 1/1 Running 0 11d
virtctl
をインストールします。
virtctl
CLI ツールをkubectl
プラグインとしてインストールします。export GOOGLE_APPLICATION_CREDENTIALS="bm-gcr.json" sudo -E ./bmctl install virtctl
virtctl
がインストールされていることを確認します。kubectl plugin list
virtctl
が正常にインストールされている場合は、レスポンスに記載されます。
VM を作成する
クラスタで KubeVirt を有効にして、kubectl
用の virtctl
プラグインをインストールすると、kubectl virt create vm
コマンドを使用してクラスタで VM の作成を開始できます。次のコマンドを実行する前に、cloud-init ファイルを構成して、作成された VM にコンソールからアクセスできるようにすることをおすすめします。
コンソール アクセス用にカスタム cloud-init ファイルを作成する
カスタム cloud-init ファイルを作成する方法は 2 つあります。最も簡単な方法は、VM の作成時に --os=<OPERATING_SYSTEM>
フラグを指定することです。この方法は、次のオペレーティング システムで動作する簡単な cloud-init ファイルを自動的に構成します。
- Ubuntu
- CentOS
- Debian
- Fedora
VM が作成されたら、初回は認証情報を使用してアクセスし、パスワードを変更します。
user: root
password: changeme
イメージに別の Linux ベースの OS が含まれている場合や、より高度な構成が必要な場合は、カスタム cloud-init ファイルを手動で作成し、--cloud-init-file=<path/to/file>
フラグでそのファイルへのパスを指定できます。最も基本的な形式では、cloud-init ファイルは次の内容を含む YAML ファイルです。
#cloud-config
user: root
password: changeme
lock_passwd: false
chpasswd: {expire: false}
disable_root: false
ssh_authorized_keys:
- <ssh-key>
より高度な構成については、Cloud 構成の例をご覧ください。
どちらの方法を使用するかを決定したら、VM を作成する準備が整います。
kubectl virt create vm
コマンドを実行する
VM は、公開イメージか、カスタム イメージから作成できます。
公開イメージ
クラスタに外部接続がある場合は、次のコマンドを実行して公開イメージから VM を作成できます。
kubectl virt create vm VM_NAME \
--boot-disk-access-mode=MODE \
--boot-disk-size=DISK_SIZE \
--boot-disk-storage-class="DISK_CLASS" \
--cloud-init-file=FILE_PATH \
--cpu=CPU_NUMBER \
--image=IMAGE_NAME \
--memory=MEMORY_SIZE
以下を置き換えます。
- VM_NAME は、作成する VM の名前に置き換えます。
- MODE は、ブートディスクのアクセスモードに置き換えます。有効な値は
ReadWriteOnce
(デフォルト)またはReadWriteMany
です。 - DISK_SIZE は、ブートディスクのサイズに置き換えます。デフォルト値は
20Gi
です。 - DISK_CLASS は、ブートディスクのストレージ クラスに置き換えます。デフォルト値は
local-shared
です。使用可能なストレージ クラスのリストを表示するには、kubectl get storageclass
を実行します。 - FILE_PATH は、カスタマイズした cloud-init ファイルのフルパスに置き換えます。これは、イメージによっては、作成後にその VM にコンソール アクセスするのに必要な場合があります。
--os
フラグを指定して cloud-init ファイルを自動的に構成する場合は、--cloud-init-file
フラグを指定しないでください。--cloud-init-file
フラグを指定している場合、--os
フラグは無視されます。--os
の有効な値はubuntu
、centos
、debian
、fedora
です。 - CPU_NUMBER は、VM に構成する CPU の数に置き換えます。デフォルト値は
1
です。 - IMAGE_NAME は、VM イメージに置き換えます。VM イメージには
ubuntu20.04
(デフォルト)、centos8
、またはイメージの URL を使用できます。 - MEMORY_SIZE は、VM のメモリサイズに置き換えます。デフォルト値は
4Gi
です。
カスタム イメージ
カスタム イメージから VM を作成する場合、HTTP イメージ サーバーからのイメージ、またはローカルに保存されているイメージを指定できます。
HTTP イメージ サーバー
Apache や nginx を使用して HTTP サーバーをセットアップし、公開フォルダにカスタム イメージをアップロードできます。その後、次のコマンドを実行して、カスタム イメージから VM を作成します。
kubectl virt create vm VM_NAME \
--boot-disk-access-mode=DISK_ACCESS_MODE \
--boot-disk-size=DISK_SIZE \
--boot-disk-storage-class=DISK_CLASS \
--cloud-init-file=FILE_PATH \
--cpu=CPU_NUMBER \
--image=http://SERVER_IP/IMAGE_NAME \
--memory=MEMORY_SIZE
以下を置き換えます。
- VM_NAME は、作成する VM の名前に置き換えます。
- DISK_ACCESS_MODE は、ブートディスクのアクセスモードに置き換えます。有効な値は
ReadWriteOnce
(デフォルト)またはReadWriteMany
です。 - DISK_SIZE は、ブートディスクのサイズに置き換えます。デフォルト値は
20Gi
です。 - DISK_CLASS は、ブートディスクのストレージ クラスに置き換えます。デフォルト値は
local-shared
です。使用可能なストレージ クラスのリストを表示するには、kubectl get storageclass
を実行します。 - FILE_PATH は、カスタマイズした cloud-init ファイルのフルパスに置き換えます。これは、イメージによっては、作成後にその VM にコンソール アクセスするのに必要な場合があります。
--os
フラグを指定して cloud-init ファイルを自動的に構成する場合は、--cloud-init-file
フラグを指定しないでください。--cloud-init-file
フラグを指定している場合、--os
フラグは無視されます。--os
の有効な値はubuntu
、centos
、debian
、fedora
です。 - CPU_NUMBER は、VM に構成する CPU の数に置き換えます。デフォルト値は
1
です。 - SERVER_IP は、イメージをホストするサーバーの IP アドレスに置き換えます。
- IMAGE_NAME は、カスタム イメージのファイル名に置き換えます。
- MEMORY_SIZE は、VM のメモリサイズに置き換えます。デフォルト値は
4Gi
です。
ローカルに保存されているイメージ
次のコマンドを実行して、カスタム イメージをローカルに保存して、VM を作成できます。
kubectl virt create vm VM_NAME \
--boot-disk-access-mode=DISK_ACCESS_MODE \
--boot-disk-size=DISK_SIZE \
--boot-disk-storage-class=DISK_CLASS \
--cloud-init-file=FILE_PATH \
--cpu=CPU_NUMBER \
--image=IMAGE_PATH \
--memory=MEMORY_SIZE \
以下を置き換えます。
- VM_NAME は、作成する VM の名前に置き換えます。
- DISK_ACCESS_MODE は、ブートディスクのアクセスモードに置き換えます。有効な値は
ReadWriteOnce
(デフォルト)またはReadWriteMany
です。 - DISK_SIZE は、ブートディスクのサイズに置き換えます。デフォルト値は
20Gi
です。 - DISK_CLASS は、ブートディスクのストレージ クラスに置き換えます。デフォルト値は
local-shared
です。 - FILE_PATH は、カスタマイズした cloud-init ファイルのフルパスに置き換えます。これは、イメージによっては、作成後にその VM にコンソール アクセスするのに必要な場合があります。
--os
フラグを指定して cloud-init ファイルを自動的に構成する場合は、--cloud-init-file
フラグを指定しないでください。--cloud-init-file
フラグを指定している場合、--os
フラグは無視されます。--os
の有効な値はubuntu
、centos
、debian
、fedora
です。 - CPU_NUMBER は、VM に構成する CPU の数に置き換えます。デフォルト値は
1
です。 - IMAGE_PATH は、カスタム イメージへのローカル ファイルパスに置き換えます。
- MEMORY_SIZE は、VM のメモリサイズに置き換えます。デフォルト値は
4Gi
です。
フラグのデフォルト値の変更
kubectl virt create vm
コマンドでは、実行時、未指定のフラグへの自動入力にデフォルト値が使用されます。このデフォルト値は、次のコマンドを実行して変更できます。
kubectl virt config default FLAG
FLAG は、デフォルト値を変更するパラメータのフラグに置き換えます。
例: 次のコマンドは、デフォルトの CPU 構成を最初のデフォルトの 1
から 2
に変更します。
kubectl virt config default --cpu=2
サポートされているフラグと、そのフラグの現在のデフォルト値のリストを表示するには、次のコマンドを実行します。
kubectl virt config default -h
デフォルトの構成は、~/.virtctl.default
というローカル ファイルとしてクライアントサイドに保存されます。このファイルを編集することでも、デフォルトの構成が変更できます。
VM にアクセスする
次の方法で VM にアクセスできます。
コンソール アクセス
コンソールから VM にアクセスするには、次のコマンドを実行します。
kubectl virt console VM_NAME
VM_NAME は、アクセスする VM の名前に置き換えます。
VNC アクセス
VNC を使用して VM にアクセスするには、次のコマンドを実行します。
# This requires remote-viewer from the virt-viewer package and a graphical desktop from where you run virtctl
kubectl virt vnc VM_NAME
VM_NAME は、アクセスする VM の名前に置き換えます。
内部アクセス
クラスタ VM の IP アドレスには、クラスタ内の他のすべての Pod から直接アクセスできます。VM の IP アドレスを確認するには、次のコマンドを実行します。
kubectl get vmi VM_NAME
VM_NAME は、アクセスする VM の名前に置き換えます。
このコマンドは次のような出力を返します。
NAME AGE PHASE IP NODENAME
vm1 13m Running 192.168.1.194 upgi-bm002
外部アクセス
クラスタに作成された VM には、クラスタ内からのみアクセスできる Pod ネットワーク アドレスがあります。クラスタ VM に外部からアクセスするには、次のコマンドを実行します。
VM をロードバランサ サービスとして公開します。
kubectl virt expose vm VM_NAME \ --port=LB_PORT \ --target-port=VM_PORT \ --type=LoadBalancer \ --name=SERVICE_NAME
以下を置き換えます。
- VM_NAME は、アクセスする VM の名前に置き換えます。
- LB_PORT は、公開するロードバランサ サービスのポートに置き換えます。
- VM_PORT は、ロードバランサ サービスを介してアクセスする VM のポートに置き換えます。
- SERVICE_NAME は、このロードバランサ サービスに付ける名前に置き換えます。
ロードバランサ サービスの外部 IP アドレスを取得します。
kubectl get svc SERVICE_NAME
SERVICE_NAME は、VM を公開するロードバランサ サービスの名前に置き換えます。
VM のターゲット ポートには、レスポンスの
EXTERNAL-IP
フィールドに列挙されている IP アドレスを使用してアクセスできます。
例
galaxy
という名前の VM があり、SSH を使用してクラスタの外部からアクセスしたい場合は、次のコマンドを実行します。
kubectl virt expose vm galaxy \
--port=25022 \
--target-port=22 \
--type=LoadBalancer \
--name=galaxy-ssh
次に、ロードバランサの IP アドレスを取得します。
kubectl get svc galaxy-ssh
このコマンドは次のような出力を返します。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
galaxy-ssh LoadBalancer 10.96.250.76 21.1.38.202 25000:30499/TCP 4m40s
これで、クラスタの外部から 21.1.38.202:25022
(VIP: ポート)を介し、SSH を使用して VM にアクセスできるようになりました。
ssh root@21.1.38.202:22 -p 25022
VM テレメトリーとコンソールログの検査
VM テレメトリーとコンソール ログは Google Cloud コンソールに統合されました。テレメトリー情報とログデータは、VM のステータスのモニタリングとクラスタ VM に関する問題のトラブルシューティングに不可欠です。
VM テレメトリー
[Anthos クラスタ VM ステータス] ダッシュボードには、クラスタ VM のライブ テレメトリー データが表示されます。
クラスタ VM のテレメトリー情報を表示します。
Google Cloud コンソールで [Monitoring] を選択するか、次のボタンをクリックします。
[ダッシュボード] を選択します。
[すべてのダッシュボード] リストで、Anthos クラスタ VM のステータスをクリックします。
VM コンソールのログ
VM のシリアル コンソールのログは Cloud Logging にストリーミングされ、ログ エクスプローラで表示できます。
VM とそのリソースを削除する
VM のみを削除する
kubectl virt delete vm VM_NAME
VM_NAME は、削除する VM の名前に置き換えます。
VM ディスクのみを削除する
kubectl virt delete disk DISK_NAME
DISK_NAME は、削除するディスクの名前に置き換えます。VM を削除する前に VM ディスクを削除しようとすると、ディスクは削除マークが付けられ、VM の削除は保留中になります。
VM とリソースを削除する
kubectl virt delete vm VM_NAME --all
VM_NAME は、削除する VM の名前に置き換えます。
削除される VM によって使用されているリソースを確認する場合は、--all
とともに --dry-run
フラグを指定できます。
Anthos VM ランタイムを無効にする
クラスタの Anthos VM ランタイムを無効にするには、そのクラスタ内のすべての VM が削除されていることを確認する必要があります。Anthos VM ランタイムを無効にすると、KubeVirt および CDI の名前空間内の Pod やサービスなど、KubeVirt 関連のデプロイがすべて削除されます。
クラスタに VM があるかどうかを確認します。
kubectl get vm
コマンドに、クラスタに VM がまだ残っていることが示されている場合は、続行する前にそれらを削除する必要があります。
次のコマンドを実行して、クラスタ構成を開きます。
kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig edit cluster CLUSTER_NAME -n cluster-CLUSTER_NAME
CLUSTER_NAME は、使用するクラスタの名前に置き換えます。
クラスタ構成の
spec
セクションからkubevirt
を削除します。spec: anthosBareMetalVersion: 1.8.9
kubevirt:useEmulation: truebypassPreflightCheck: false構成を保存します。
次のステップ
- Anthos VM ランタイムの既知の問題について確認する。
- KubeVirt ユーザーガイドを確認する。