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

本教學課程說明如何在 GDC 上新安裝的 VM Runtime 中,建立及管理 Linux 虛擬機器 (VM)。您將瞭解如何建立及定義基本依附元件 (例如 StorageClass 和虛擬網路),然後建立使用這些資源的 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 會連線至虛擬網路,並從虛擬磁碟開機。下列操作說明會直接使用 kubectl CLI 套用 VirtualMachine YAML 資訊清單檔案,藉此建立 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 gibibyte) 磁碟。
    • 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