このドキュメントは、ベアメタル版 GKE を実行するアプリケーション オーナーを対象としています。このドキュメントでは、GDC 上の VM ランタイムを使用する仮想マシン(VM)のディスク リソースを作成して管理する方法について説明します。
準備
このドキュメントの内容を実施するには、次のリソースへのアクセス権が必要です。
- GKE on Bare Metal バージョン 1.12.0(
anthosBareMetalVersion: 1.12.0
)以降のクラスタへのアクセス権。ワークロードを実行可能な、どのクラスタタイプでも使用できます。必要に応じて、Compute Engine の GDCV for Bare Metal を試すか、クラスタ作成の概要をご覧ください。 kubectl
のプラグインとしてインストールされたvirtctl
クライアント ツール。必要に応じて、virtctl クライアント ツールをインストールします。
ディスクがアタッチされた VM を作成する
VM を作成するときに、既存のブートディスクまたはデータディスクをアタッチできます。また、イメージからディスクを作成(ブートディスクなど)することも、空のディスクを作成することもできます。
空のディスク
このシナリオでは、空のディスクを作成して VM にアタッチします。このシナリオでは、アプリケーション データを保存するためのデータディスクを作成できます。
任意のエディタで
VirtualMachineDisk
とVirtualMachine
を定義するマニフェスト(my-vm.yaml
など)を作成します。nano my-vm.yaml
次の YAML 定義をコピーして貼り付けます。
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: DISK_NAME
以下を置き換えます。
DISK_NAME
: 作成し、VM にアタッチする空のディスクの名前。VM_NAME
: 作成する VM の名前。この例では、
DISK_NAME
という名前で空の10Gi
(10 GiB)ディスクを作成します。VM のspec.disks
セクションで、次のセクションに示すように、イメージなどからブートディスクをアタッチする必要もあります。
マニフェスト ファイルをエディタに保存して閉じます。
kubectl
を使用して VM とディスクを作成します。kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
KUBECONFIG
は、クラスタの kubeconfig ファイルのパスに置き換えます。
イメージから作成
このシナリオでは、イメージからディスクを作成して VM にアタッチします。このシナリオでは、たとえばイメージからブートディスクを作成できます。また、イメージからデータディスクを作成してアタッチすることもできます。
サポートされているイメージソース
GDC の VM ランタイムでは、さまざまなイメージ形式を使用でき、VirtualMachineDisk
仕様で指定可能な 3 種類のイメージソースがサポートされています。次の各例では、サポートされている別のイメージソースから 20 ギビバイトのディスクが作成されます。
HTTP(ハイパーテキスト転送プロトコル)
次の
VirtualMachineDisk
の例では、HTTP イメージソースの基本構造を示します。url
フィールドには、HTTP または HTTPS URL を指定する必要があります。apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: my-disk spec: source: http: url: https://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img size: 20GiB storageClassName: local-shared
Cloud Storage
次の例では、Cloud Storage バケット内のイメージからディスクを作成する方法を示します。マシン上のアプリケーションのデフォルト認証情報で Cloud Storage の URL にアクセスできない場合は、認証情報を指定する必要があります。次の例において、
my-gcs
は、base64 でエンコードされたサービス アカウント キーを含むシークレットです。apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: my-disk spec: source: gcs: url: gs://kubevirt-ci-vm-images/rhel8.2/rhel8_2_cloud.qcow2 secretRef: my-gcs size: 20GiB storageClassName: local-shared
ダウンロードしたサービス アカウント キーを使用してクラスタを作成すると、Cloud Storage へのアクセスに Container Registry サービス アカウント キーを使用できます。Cloud Storage にアクセスするためのサービス アカウントを別に作成する場合は、Cloud Storage バケットにアクセスできるサービス アカウントを構成するをご覧ください。
次のコマンドを使用して、ダウンロードしたサービス アカウント キーファイルから Kubernetes Secret を作成します。
kubectl create secret generic SECRET_NAME --from-file=KEY_FILE --namespace default \ --kubeconfig KUBECONFIG
以下を置き換えます。
SECRET_NAME
: Secret の名前。KEY_FILE
: ダウンロードされたサービス アカウント キーの JSON ファイルへのパス。例:bmctl-workspace/.sa-keys/my-project-anthos-baremetal-gcr.json
。KUBECONFIG
: クラスタの kubeconfig ファイルへのパス。
認証情報を使用して Cloud Storage にアクセスする方法について詳しくは、認証情報を作成し、Cloud Storage からイメージをインポートするために使用するをご覧ください。
Container Registry の例
Open Container Initiative(OCI)のディストリビューション仕様に準拠する Container Registry がサポートされています。次の例では、Docker レジストリに保存されているイメージからディスクを作成します。
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: my-disk spec: source: registry: url: docker://kubevirt/fedora-cloud-registry-disk-demo size: 20GiB storageClassName: local-shared
有効なイメージ形式
イメージからディスクを作成する場合は、次のいずれかのイメージ形式を使用できます。
- GNU zip(gzip)アーカイブ(
.gz
) - 未加工(
.raw
、.img
) - 書き込みバージョン 2(qcow2)のディスク イメージでの QEMU コピー(
.qcow2
) - XZ で圧縮されたアーカイブ(
.xz
) - 仮想マシンディスク(VMDK)ファイル(
.vmdk
) - VirtualBox 仮想ディスク イメージ(VDI)ファイル(
.vdi
) - 仮想ハードディスク(VHD)イメージ ファイル(
.vdh
) - 仮想ハードディスク バージョン 2(VDHX)ファイル(
.vdhx
) - ISO ディスク イメージ ファイル(
.iso
)
HTTP イメージから作成されたディスクの例
Ubuntu イメージからブートディスクを作成するには、次の手順を行います。
任意のエディタで、
VirtualMachineDisk
とVirtualMachine
を定義するマニフェスト(my-vm.yaml など)を作成します。nano my-vm.yaml
次の YAML 定義をコピーして貼り付けます。
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: VM_NAME-boot-dv spec: size: 20Gi source: http: url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv
この例では、Ubuntu の公開イメージを使用して、
VM_NAME-boot-dv
という名前で20Gi
(20 GiB)ディスクを作成します。VM のspec.disks
セクションでは、ディスクがboot: true
に設定されています。マニフェストをエディタに保存して閉じます。
kubectl
を使用して VM とディスクを作成します。kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
KUBECONFIG
は、クラスタの kubeconfig ファイルのパスに置き換えます。
既存のディスク
このシナリオでは、空のディスクを作成して VM にアタッチします。このシナリオでは、アプリケーション データを保存するためのデータディスクを作成できます。
選択したエディタで
VirtualMachine
マニフェスト(my-vm.yaml など)を作成します。nano my-vm.yaml
次の YAML 定義をコピーして貼り付けます。
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: EXISTING_DISK_NAME
この例では、
EXISTING_DISK_NAME
という名前の既存のディスクをアタッチします。VM の
spec.disks
セクションで、前のセクションで示したように、イメージなどからブートディスクをアタッチする必要もあります。VM マニフェストをエディタに保存して閉じます。
kubectl
を使用して VM を作成します。kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
KUBECONFIG
は、クラスタの kubeconfig ファイルのパスに置き換えます。
ディスクの検索
GKE on Bare Metal バージョン 1.13.0 以降では、VM の作成時に、GDC 上の VM ランタイムは、VM リソースで指定したディスク名を使用してディスクのシリアル番号を設定します。具体的には、VirtualMachine
カスタム リソースで spec.disks.virtualMachineDiskName
で指定した名前が、ディスクのシリアル番号に使用されます。この機能を使用すると、フォーマットやマウントなどのディスク操作を実行する必要がある場合に、VM 内のディスクをより簡単に見つけられるようになります。
たとえば、VM を作成し、sample-boot-dv
という名前のブートディスクを指定した場合、VirtualMachine
カスタム リソースは次のようになります。
apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
metadata:
name: sample-vm
spec:
osType: Linux
compute:
cpu:
vcpus: 2
memory:
capacity: 4Gi
interfaces:
- name: eth0
networkName: pod-network
default: true
disks:
- boot: true
virtualMachineDiskName: sample-vm-boot-dv
- virtualMachineDiskName: attached-disk
Linux VM の場合、VM にログインすると、次のコマンドを実行してディスクのシリアル番号で一覧表示できます。
ls -l /dev/disk/by-id/
レスポンスは、次の出力例のようになります。ここで、ディスク名はシリアル番号として表示されます。
total 0
lrwxrwxrwx 1 root root 9 Oct 19 17:17 ata-QEMU_HARDDISK_agentInstallation -> ../../sdb
lrwxrwxrwx 1 root root 9 Oct 19 17:17 ata-QEMU_HARDDISK_agentSADisk -> ../../sda
lrwxrwxrwx 1 root root 9 Oct 19 17:17 virtio-sample-boot-dv -> ../../vda
lrwxrwxrwx 1 root root 10 Oct 19 17:17 virtio-sample-boot-dv-part1 -> ../../vda1
lrwxrwxrwx 1 root root 11 Oct 19 17:17 virtio-sample-boot-dv-part14 -> ../../vda14
lrwxrwxrwx 1 root root 11 Oct 19 17:17 virtio-sample-boot-dv-part15 -> ../../vda15
lrwxrwxrwx 1 root root 11 Oct 19 17:17 virtio-attached-disk -> ../../vdb
次の場合の機能の動作に注意してください。
virtualMachineDiskName
値が 20 文字より長い場合、GDC 上の VM ランタイムは最初の 20 文字のみをシリアル番号として使用します。- 最初の 20 文字が同じディスクが 2 つある場合、最初のディスクだけにシリアル番号が割り当てられます。
ディスクを作成して既存の VM にアタッチする
既存の VM がある場合は、アプリケーション ライフサイクルをサポートするディスクを作成してアタッチできます。ディスクをアタッチする前に、VM が停止状態になっている必要があります。
空のディスク
このシナリオでは、空のディスクを作成して VM にアタッチします。このシナリオでは、アプリケーション データを保存するためのデータディスクを作成できます。
必要に応じて、
kubectl
を使用して VM を停止します。kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIG
以下を置き換えます。
VM_NAME
: 停止する VM の名前。KUBECONFIG
: クラスタの kubeconfig ファイルへのパス。
既存の VM リソース(
my-vm
など)を編集します。kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
VirtualMachine
YAML マニフェストを更新して、先頭にVirtualMachineDisk
セクションを追加し、VM のspec.disks
セクションの最後にディスクをアタッチします。apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: DISK_NAME
この例では、
DISK_NAME
という名前で空の10Gi
(10 GiB)ディスクを作成します。更新した VM マニフェストをエディタに保存して閉じます。
kubectl
を使用して VM を起動します。kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
イメージから作成
このシナリオでは、ソースイメージからディスクを作成し、VM にアタッチします。
必要に応じて、
kubectl
を使用して VM を停止します。kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIG
以下を置き換えます。
VM_NAME
: 停止する VM の名前。KUBECONFIG
: クラスタの kubeconfig ファイルへのパス。
既存の VM リソース(
my-vm
など)を編集します。kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
VirtualMachine
マニフェストを更新して、先頭にVirtualMachineDisk
セクションを追加し、VM のspec.disks
セクションの最後にディスクをアタッチします。apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi source: http: url: http://example.com/my-disk-img.qcow2 --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: DISK_NAME
この例では、
http://example.com/my-disk-img.qcow2
HTTP ソースからDISK_NAME
という名前で10Gi
(10 GiB)のディスクを作成します。更新した VM マニフェストをエディタに保存して閉じます。
kubectl
を使用して VM を起動します。kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
ディスクの作成
このシナリオでは、ディスク リソースを VM リソースとは別に作成します。このシナリオでは、事前にディスクを作成してから、必要に応じて VM にアタッチできます。
空のディスク
空のディスクを作成するには、次の手順を行います。
選択したエディタで、
VirtualMachineDisk
マニフェスト(my-disk.yaml など)を作成します。nano my-disk.yaml
次の YAML 定義をコピーして貼り付けます。
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi
この例では、
DISK_NAME
という名前で空の10Gi
(10 GiB)ディスクを作成します。ディスク マニフェストをエディタに保存して閉じます。
kubectl
を使用してディスクを作成します。kubectl apply -f my-disk.yaml --kubeconfig KUBECONFIG
KUBECONFIG
は、クラスタの kubeconfig ファイルのパスに置き換えます。
イメージから作成
イメージからディスクを作成するには、次の手順を実行します。
任意のエディタで、
VirtualMachineDisk
マニフェスト(my-disk.yaml
など)を作成します。nano my-disk.yaml
次の YAML 定義をコピーして貼り付けます。
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 20Gi source: http: url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img
この例では、Ubuntu の公開イメージを使用して、
DISK_NAME
という名前で20Gi
(20 GiB)ディスクを作成します。ディスク マニフェストをエディタに保存して閉じます。
kubectl
を使用してディスクを作成します。kubectl apply -f my-disk.yaml --kubeconfig KUBECONFIG
KUBECONFIG
は、クラスタの kubeconfig ファイルのパスに置き換えます。
次のステップ
- 認証情報を作成し、使用して Cloud Storage からイメージをインポートする。
- GDCV for Bare Metal でストレージ クラスを作成して使用する。
- VM または VM の仮想ディスク リソースが不要になった場合、ベアメタル版 GKE の VM を削除する。