このチュートリアルでは、GDC への VM ランタイムの新規インストールで Linux 仮想マシン(VM)を作成して管理する方法について説明します。StorageClass や仮想ネットワークなどの基本的な依存関係を作成および定義するプロセスを確認し、これらのリソースを使用する VM を作成します。その後、新しいディスクの追加など、VM の編集方法を確認します。
目標
- 基本的な依存関係を構成する
- GDC 上の VM ランタイムの
StorageClassを作成する - 使用する VM の仮想ネットワークを作成する
- GDC 上の VM ランタイムの
- 仮想マシンのブートディスクを作成する
- VM を作成する
- VM を編集して新しい仮想ディスクを追加する
始める前に
このチュートリアルを完了するには、次のリソースとツールへのアクセス権を付与されている必要があります。
- Google Distributed Cloud バージョン 1.12.0(
anthosBareMetalVersion: 1.12.0)以降のクラスタへのアクセス権。ワークロードを実行可能な、どのクラスタタイプでも使用できます。必要に応じて、Compute Engine 上の Google Distributed Cloud を試すか、クラスタ作成の概要をご覧ください。 kubectlのプラグインとしてインストールされたvirtctlクライアント ツール。必要に応じて、virtctl クライアント ツールをインストールします。
StorageClass を作成する
StorageClass を使用して、VM で使用可能にするストレージのタイプを定義します。さまざまなストレージ クラスが、異なるタイプのストレージ ハードウェア、ファイル システム、パフォーマンスのものにマッピングされる場合があります。
StorageClass とストレージ パートナーごとの具体的な手順については、このチュートリアルでは取り上げる対象ではありません。
Google Distributed Cloud 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: ネットワークを接続する Google Distributed Cloud ノードのインターフェース名。すべてのノードに同じインターフェース名を設定する必要があります。
この
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インスタンスの作成には数分かかることがあります。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 GiB)ディスクを作成します。STORAGE_CLASS_NAME:VirtualMachineDiskで使用するStorageClass。kubectl get storageclassを使用して、クラスタで使用可能な対象の一覧を取得します。
ディスク マニフェストをエディタに保存して閉じます。
kubectlを使用してディスクを作成します。kubectl apply -f my-data-disk.yaml新しい仮想ディスクをアタッチする前に、
kubectlを使用して VM を停止します。kubectl virt stop VM_NAMEVM リソースを編集します。
kubectl edit gvm VM_NAMEVM の
spec.disksセクションの末尾にディスクをアタッチするようにVirtualMachineYAML マニフェストを更新します。apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: ... disks: - boot: true virtualMachineDiskName: DISK_NAME - virtualMachineDiskName: DATA_DISK_NAMEDATA_DISK_NAMEは、前のステップで作成したディスクの名前に置き換えます。更新した VM マニフェストをエディタに保存して閉じます。
kubectlを使用して VM を起動します。kubectl virt start VM_NAME
クリーンアップ
このチュートリアルで作成したリソースを削除するには、次の手順を実行します。
VM を削除します。
kubectl delete -f my-vm.yamlVirtualMachineDiskリソースを削除します。kubectl delete -f my-data-disk.yaml kubectl delete -f my-disk.yaml
基本的な依存関係をクラスタ内に保持しない場合は、次の手順を実行します。
仮想ネットワークを削除します。
kubectl delete -f use-dhcp-network.yamlクラスタから CSI ドライバを削除するには、ストレージ パートナーが示した手順に沿って操作します。