教學課程:在 GDC 的 VM Runtime 中建立及管理 Linux VM


本教學課程說明如何在 GDC 上新安裝的 VM Runtime 中,建立及管理 Linux 虛擬機器 (VM)。您將瞭解建立及定義基本依附元件 (例如 StorageClass 和虛擬網路) 的程序,然後建立使用這些資源的 VM。接著,您會瞭解如何編輯 VM,例如新增磁碟。

目標

  • 設定基本依附元件
    • 為 GDC 上的 VM Runtime 建立 StorageClass
    • 為 VM 建立虛擬網路
  • 建立虛擬機器開機磁碟
  • 建立 VM
  • 編輯 VM,新增虛擬磁碟

事前準備

如要完成本教學課程,您需要存取下列資源和工具:

建立 StorageClass

您可以使用 StorageClass 定義可供 VM 使用的儲存空間類型。不同的儲存空間類別可能會對應到不同類型的儲存空間硬體、檔案系統或效能。

本教學課程不會針對每個 StorageClass 和儲存空間合作夥伴提供具體操作說明。

Google Distributed Cloud Ready 儲存空間合作夥伴提供合格的容器儲存介面 (CSI) 驅動程式,可安裝及設定儲存空間所需的自訂資源。如要在叢集中安裝 CSI 驅動程式,請查看支援的儲存空間合作夥伴清單,然後按照他們的指示操作。

安裝儲存平台專用的 CSI 驅動程式後,叢集會提供一或多個儲存空間類別。在本教學課程中,您會使用其中一個儲存空間類別建立虛擬硬碟。

以下基本範例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 生成一個儲存空間設定檔。儲存空間設定檔的名稱與相關聯的 StorageClass 相同。儲存空間設定檔提供與每個 StorageClass 相關聯的額外設定選項。如要進一步瞭解儲存空間設定檔,包括設定操作說明,請參閱「設定儲存空間設定檔」。

建立虛擬網路

VM 會使用虛擬網路介面連線至虛擬網路。虛擬網路可讓這些 VM 與叢集中的其他 VM 通訊,或與叢集外部的資源通訊。

在本教學課程中,您將建立基本的第 2 層 (L2) 虛擬網路,該網路可使用外部 DHCP 伺服器。啟用外部 DHCP 伺服器後,如果 DHCP 提供 DNS 和閘道設定,您可以略過這些設定。

如要建立使用外部 DHCP 伺服器的網路,請完成下列步驟:

  1. 在您選擇的編輯器中建立 Network 資訊清單,例如 dhcp-network.yaml

    nano dhcp-network.yaml
    
  2. 複製並貼上下列 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附加至這個網路。這是您唯一可以在 VM Runtime on GDC 中建立的網路 type
    • 網路已啟用外部 DHCP。外部 DHCP 伺服器負責為連線至這個網路的工作負載分配 IPv4 位址、路徑、閘道和 DNS 設定。
  3. 在編輯器中儲存並關閉 Network 資訊清單。

  4. 使用 kubectl 建立網路:

    kubectl apply -f use-dhcp-network.yaml
    

建立 VM 開機磁碟

VM 可以使用預先建立的磁碟映像檔,或從 ISO 映像檔開機,手動安裝 OS。這些磁碟映像檔可透過 HTTP 儲存及存取,也可以儲存在 Cloud Storage 中,並透過 Secret 存取。

在本教學課程中,您將使用 HTTP,從公開的 Ubuntu Server 20.04 雲端映像檔建立開機磁碟。

如要從映像檔建立磁碟,請完成下列步驟。

  1. 在您選擇的編輯器中建立 VirtualMachineDisk 資訊清單,例如 my-disk.yaml

    nano my-disk.yaml
    
  2. 複製並貼上下列 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_NAME20Gi (20 gibibyte) 磁碟。
    • STORAGE_CLASS_NAME:您想用於 VirtualMachineDiskStorageClass
      • 使用 kubectl get storageclass 列出叢集中可用的項目。
  3. 在編輯器中儲存並關閉 VirtualMachineDisk 資訊清單。

  4. 使用 kubectl 建立磁碟:

    kubectl apply -f my-disk.yaml
    

建立 VM

建立虛擬網路和開機磁碟後,現在可以建立 VM。VM 會連線至虛擬網路,並從虛擬磁碟開機。下列操作說明會直接套用 VirtualMachine YAML 資訊清單檔案,藉此使用 kubectl CLI 建立 VM。

  1. 在您選擇的編輯器中,建立定義 VirtualMachine 的資訊清單,例如 my-vm.yaml

    nano my-vm.yaml
    
  2. 複製並貼上下列 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。
      • 您可以為 VM 指派 1 到 96 個 vCPU。
    • MEMORY_SIZE:要指派給 VM 的記憶體量 (選填)。如果沒有這項設定,系統會指派預設的 4 GiB 記憶體。
    • NETWORK_NAME:您在上一節中建立的網路名稱。
    • DISK_NAME:您在上一節中建立的開機磁碟名稱。這個磁碟設為 boot: true
  3. 在編輯器中儲存並關閉資訊清單。

  4. 使用 kubectl 建立 VM 和磁碟:

    kubectl apply -f my-vm.yaml
    
  5. 建立 VM 可能需要幾分鐘的時間。使用 kubectl 指令檢查 VM 的狀態:

    kubectl get gvm VM_NAME
    

    以下輸出範例顯示 VM 處於 Running 狀態:

    NAME    STATUS    AGE   IP
    MY_VM   Running   64s   192.168.2.124
    

連線至 VM

VM 執行中時,請連線至 VM 的控制台。透過這個控制台連線,您可以執行基本工作,例如進一步設定 VM 或安裝應用程式。

  1. 如要從控制台存取 VM,請使用 kubectl

    kubectl virt console VM_NAME
    
  2. 系統顯示提示時,請輸入您在建立 VM 時指定的使用者憑證。

  3. 成功連線至 VM 的控制台後,請結束 VM 工作階段和控制台:

    Ctrl + ]
    

編輯 VM

在 VM 的生命週期中,您可能需要編輯 VM。舉例來說,您可能想新增儲存空間,以便在專用磁碟上安裝應用程式,或是為應用程式使用額外儲存空間。

在本教學課程中,您會建立空白磁碟並連接至 VM。這個情境可讓您建立資料磁碟,用來儲存應用程式資料。

  1. 在您選擇的編輯器中建立 VirtualMachineDisk 資訊清單,例如 my-data-disk.yaml

    nano my-data-disk.yaml
    
  2. 複製並貼上下列 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:您想用於 VirtualMachineDiskStorageClass
      • 使用 kubectl get storageclass 列出叢集中可用的項目。
  3. 在編輯器中儲存並關閉磁碟資訊清單。

  4. 使用 kubectl 建立磁碟:

    kubectl apply -f my-data-disk.yaml
    
  5. 使用 kubectl 停止 VM,再連結新的虛擬磁碟:

    kubectl virt stop VM_NAME
    
  6. 編輯 VM 資源:

    kubectl edit gvm VM_NAME
    

    更新 VirtualMachine YAML 資訊清單,在 VM 的 spec.disks 區段結尾附加磁碟:

    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 替換為您在上一步建立的磁碟名稱。

  7. 在編輯器中儲存並關閉更新後的 VM 資訊清單。

  8. 使用 kubectl 啟動 VM:

    kubectl virt start VM_NAME
    

清除所用資源

如要刪除在本教學課程中建立的資源,請完成下列步驟:

  1. 刪除 VM:

    kubectl delete -f my-vm.yaml
    
  2. 刪除 VirtualMachineDisk 資源:

    kubectl delete -f my-data-disk.yaml
    kubectl delete -f my-disk.yaml
    

如要從叢集中移除基本依附元件,請完成下列步驟:

  1. 刪除虛擬網路:

    kubectl delete -f use-dhcp-network.yaml
    
  2. 如要從叢集中移除 CSI 驅動程式,請按照儲存空間合作夥伴的指示操作。

後續步驟