このチュートリアルでは、GDC への VM ランタイムの新規インストールで Linux 仮想マシン(VM)を作成、管理する方法について説明します。StorageClass
や仮想ネットワークなどの基本的な依存関係を作成および定義するプロセスを確認し、これらのリソースを使用する VM を作成します。その後、新しいディスクの追加など、VM の編集方法を確認します。
目標
- 基本的な依存関係を構成する
- GDC 上の VM ランタイムの
StorageClass
を作成する - 使用する VM の仮想ネットワークを作成する
- GDC 上の VM ランタイムの
- 仮想マシンのブートディスクを作成する
- VM を作成する
- VM を編集して新しい仮想ディスクを追加する
始める前に
このチュートリアルを完了するには、次のリソースとツールへのアクセス権を付与されている必要があります。
- GKE on Bare Metal バージョン 1.12.0(
anthosBareMetalVersion: 1.12.0
)以降のクラスタへのアクセス権。ワークロードを実行可能な、どのクラスタタイプでも使用できます。必要に応じて、Compute Engine の GDCV for Bare Metal を試すか、クラスタ作成の概要をご覧ください。 kubectl
のプラグインとしてインストールされたvirtctl
クライアント ツール。必要に応じて、virtctl クライアント ツールをインストールします。
StorageClass
を作成する
StorageClass
を使用して、VM で使用可能にするストレージのタイプを定義します。さまざまなストレージ クラスが、異なるタイプのストレージ ハードウェア、ファイル システム、パフォーマンスのものにマッピングされる場合があります。
StorageClass
とストレージ パートナーごとの具体的な手順については、このチュートリアルでは取り上げる対象ではありません。
Anthos Ready ストレージ パートナーは、ストレージに必要なカスタム リソースをインストールして構成する認定 Container Storage Interface(CSI)ドライバを提供しています。クラスタに CSI ドライバをインストールするには、サポートされているストレージ パートナーのリストを確認し、それらの手順に沿って操作します。
ストレージ プラットフォーム用の CSI ドライバをインストールすると、クラスタで 1 つ以上のストレージ クラスが利用可能になります。このチュートリアルでは、これらのストレージ クラスのいずれかを使用して仮想ハードディスクを作成します。
次の基本的な例の NFS StorageClass
では、NFS CSI ドライバを使用しています。StorageClass
で使用する、NFS サーバーのアドレスとパスを定義します。これによりクラスタ内のすべてのノードで、この NFS ストレージに接続して使用できます。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: example-nfs
provisioner: nfs.csi.k8s.io
parameters:
server: nfs-server.example.com
path: /vm-share
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
- nconnect=8
- nfsvers=4.1
このチュートリアルでは、独自のクラスタで StorageClass
の名前を使用します。
GDC 上の VM ランタイムは、クラスタ内の StorageClass
ごとに 1 つのストレージ プロファイルを自動的に生成します。ストレージ プロファイルは、関連する StorageClass
と同じ名前です。ストレージ プロファイルには、各 StorageClass
に関連付けられた追加の構成オプションが用意されています。構成手順など、ストレージ プロファイルの詳細については、ストレージ プロファイルを構成するをご覧ください。
仮想ネットワークを作成する
VM は仮想ネットワーク インターフェースを使用して仮想ネットワークに接続します。仮想ネットワークでは、クラスタ内の他の VM やクラスタ外部のリソースと通信できます。
このチュートリアルでは、外部 DHCP サーバーを使用できる基本的なレイヤ 2(L2
)仮想ネットワークを作成します。外部 DHCP サーバーの使用を有効にすると、DHCP によって提供される DNS とゲートウェイの設定の構成をスキップできます。
外部 DHCP サーバーを使用するネットワークを作成するには、次の手順を実行します。
任意のエディタで、
Network
マニフェスト(dhcp-network.yaml
など)を作成します。nano dhcp-network.yaml
次の YAML マニフェストをコピーして貼り付けます。
apiVersion: networking.gke.io/v1 kind: Network metadata: name: NETWORK_NAME spec: type: L2 nodeInterfaceMatcher: interfaceName: INTERFACE_NAME externalDHCP4: true
次の値を置き換えます。
NETWORK_NAME
: ネットワークの名前。INTERFACE_NAME
: ネットワークを接続する GKE on Bare Metal ノードのインターフェース名。すべてのノードに同じインターフェース名を設定する必要があります。
この
Network
マニフェストでは、次の値が設定されています。- ワークロードには、このネットワークへの
L2
アタッチメントのみを設定できます。これは、GDC の VM ランタイムで作成できる唯一のネットワークtype
です。 - ネットワークでは外部 DHCP が有効になっています。外部 DHCP サーバーは、このネットワークに接続されるワークロードの IPv4 アドレスの割り振り、ルート、ゲートウェイ、DNS の構成を実施します。
Network
マニフェストをエディタに保存して閉じます。kubectl
を使用してネットワークを作成します。kubectl apply -f use-dhcp-network.yaml
VM ブートディスクを作成する
VM は事前に作成されたディスク イメージを使用できます。または、ISO イメージから起動して手動で OS をインストールすることもできます。これらのディスク イメージは、HTTP を使用して格納しアクセスできます。または、Cloud Storage に保存し、Secret
を使用してアクセスできます。
このチュートリアルでは、HTTP を使用して Ubuntu Server 20.04 の公開クラウド イメージからブートディスクを作成します。
イメージからディスクを作成するには、次の手順を実行します。
任意のエディタで、
VirtualMachineDisk
マニフェスト(my-disk.yaml
など)を作成します。nano my-disk.yaml
次の YAML 定義をコピーして貼り付けます。
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 20Gi storageClassName: STORAGE_CLASS_NAME source: http: url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img
次の値を置き換えます。
DISK_NAME
: ディスクに設定する名前。この例では、Ubuntu Server 20.04 の公開イメージを使用して、DISK_NAME
という名前の20Gi
(20 ギビバイト)ディスクを作成します。STORAGE_CLASS_NAME
:VirtualMachineDisk
で使用するStorageClass
。kubectl get storageclass
を使用して、クラスタで使用可能な対象を一覧表示します。
VirtualMachineDisk
マニフェストをエディタに保存して閉じます。kubectl
を使用してディスクを作成します。kubectl apply -f my-disk.yaml
VM を作成する
前のセクションで作成した仮想ネットワークとブートディスクを使用して、VM を作成します。VM が仮想ネットワークに接続し、仮想ディスクから起動します。次の手順では、kubectl
CLI を使用して VirtualMachine
YAML マニフェスト ファイルを直接適用して、VM を作成します。
任意のエディタで
VirtualMachine
を定義するマニフェスト(my-vm.yaml
など)を作成します。nano my-vm.yaml
次の YAML 定義をコピーして貼り付けます。
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: osType: linux compute: cpu: vcpus: VCPU_NUMBER memory: capacity: MEMORY_SIZE interfaces: - name: eth0 networkName: NETWORK_NAME default: true disks: - boot: true virtualMachineDiskName: DISK_NAME
次の値を置き換えます。
VM_NAME
: VM の名前VCPU_NUMBER
: VM に割り当てる vCPU の数(省略可)。この設定がない場合は、デフォルトで 2 つの vCPU が割り当てられます。- 1~96 個の vCPU を VM に割り当てることができます。
MEMORY_SIZE
: VM に割り当てるメモリ量(省略可)。この設定がない場合は、デフォルトの 4 GiB のメモリが割り当てられます。- 1M~1T のメモリを VM に割り当てることができます。詳細については、メモリリソース ユニットをご覧ください。
NETWORK_NAME
: 前のセクションで作成したネットワークの名前。DISK_NAME
: 前のセクションで作成したブートディスクの名前。このディスクはboot: true
に設定されています。
マニフェストをエディタに保存して閉じます。
kubectl
を使用して VM とディスクを作成します。kubectl apply -f my-vm.yaml
VM の作成には数分かかることがあります。kubectl コマンドで VM のステータスを確認します。
kubectl get gvm VM_NAME
次の出力例では、
Running
状態の VM を示します。NAME STATUS AGE IP MY_VM Running 64s 192.168.2.124
VM に接続します。
VM が動作している場合は、VM のコンソールに接続します。このコンソール接続では、VM の構成やアプリケーションのインストールなど、基本的なタスクを実行できます。
コンソールから VM にアクセスするには、
kubectl
を使用します。kubectl virt console VM_NAME
プロンプトが表示されたら、VM を作成する際に指定したユーザー認証情報を入力します。
VM のコンソールに正常に接続したら、VM のセッションとコンソールを終了します。
Ctrl + ]
VM を編集する
VM のライフサイクル中に、VM の編集をおすすめします。たとえば、ストレージを追加して専用ディスクにアプリケーションをインストールする、またはアプリケーションに追加のストレージを使用することが可能です。
このチュートリアルでは、空のディスクを作成して VM にアタッチします。このシナリオでは、アプリケーション データを保存するためのデータディスクを作成できます。
任意のエディタで、
VirtualMachineDisk
マニフェスト(my-data-disk.yaml
など)を作成します。nano my-data-disk.yaml
次の YAML 定義をコピーして貼り付けます。
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DATA_DISK_NAME spec: size: 10Gi storageClassName: STORAGE_CLASS_NAME
次の値を置き換えます。
DATA_DISK_NAME
: データディスクに設定する名前。この例では、10Gi
(10 ギビバイト)のディスクを作成します。STORAGE_CLASS_NAME
:VirtualMachineDisk
で使用するStorageClass
。kubectl get storageclass
を使用して、クラスタで使用可能な対象を一覧表示します。
ディスク マニフェストをエディタに保存して閉じます。
kubectl
を使用してディスクを作成します。kubectl apply -f my-data-disk.yaml
新しい仮想ディスクをアタッチする前に、
kubectl
を使用して VM を停止します。kubectl virt stop VM_NAME
VM リソースを編集します。
kubectl edit gvm VM_NAME
VM の
spec.disks
セクションの末尾にディスクをアタッチするようにVirtualMachine
YAML マニフェストを更新します。apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: ... disks: - boot: true virtualMachineDiskName: DISK_NAME - virtualMachineDiskName: DATA_DISK_NAME
DATA_DISK_NAME
は、前のステップで作成したディスクの名前に置き換えます。更新した VM マニフェストをエディタに保存して閉じます。
kubectl
を使用して VM を起動します。kubectl virt start VM_NAME
クリーンアップ
このチュートリアルで作成したリソースを削除するには、次の手順を実行します。
VM を削除します。
kubectl delete -f my-vm.yaml
VirtualMachineDisk
リソースを削除します。kubectl delete -f my-data-disk.yaml kubectl delete -f my-disk.yaml
基本的な依存関係をクラスタ内に保持しない場合は、次の手順を実行します。
仮想ネットワークを削除します。
kubectl delete -f use-dhcp-network.yaml
クラスタから CSI ドライバを削除するには、ストレージ パートナーが示した手順に沿って操作します。