教學課程:在 GDC 的 VM 執行階段中建立及管理 Linux VM

有了 GDC 的 VM 執行階段,您就能直接在裸機上執行及管理 Linux 虛擬機器 (VM)。在本教學課程中,您將設定基本依附元件,包括 StorageClass 和虛擬網路,然後建立使用這些資源的 VM。您也會修改 VM 設定,以連接額外的磁碟。

目標

  • 設定基本依附元件
    • 為 VM Runtime on GDC 建立 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 名稱。

VM Runtime on GDC 會自動為叢集中的每個 StorageClass 產生一個儲存空間設定檔。儲存空間設定檔的名稱與相關聯的 StorageClass 相同。儲存空間設定檔提供與各 StorageClass 相關聯的其他設定選項。如要進一步瞭解儲存空間設定檔,包括設定操作說明,請參閱「設定儲存空間設定檔」。

建立虛擬網路

VM 會透過虛擬網路介面連線至虛擬網路。虛擬網路可讓 Pod 與叢集中的其他 VM 或叢集外的資源通訊。

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

如要建立使用外部 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_NAME 的 20Gi (20 gibibyte) 磁碟。
    • STORAGE_CLASS_NAME:要用於 VirtualMachineDisk 的 StorageClass。
      • 使用 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:要用於 VirtualMachineDisk 的 StorageClass。
      • 使用 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 驅動程式,請按照儲存空間合作夥伴提供的操作說明進行。

後續步驟