本教學課程說明如何在 GDC 上新安裝的 VM Runtime 中,建立及管理 Linux 虛擬機器 (VM)。您將瞭解建立及定義基本依附元件 (例如 StorageClass
和虛擬網路) 的程序,然後建立使用這些資源的 VM。接著,您會瞭解如何編輯 VM,例如新增磁碟。
目標
- 設定基本依附元件
- 為 GDC 上的 VM Runtime 建立
StorageClass
- 為 VM 建立虛擬網路
- 為 GDC 上的 VM Runtime 建立
- 建立虛擬機器開機磁碟
- 建立 VM
- 編輯 VM,新增虛擬磁碟
事前準備
如要完成本教學課程,您需要存取下列資源和工具:
- 存取 Google Distributed Cloud 1.12.0 版 (
anthosBareMetalVersion: 1.12.0
) 以上版本的叢集。您可以使用任何可執行工作負載的叢集類型。 如有需要,請在 Compute Engine 上試用 Google Distributed Cloud,或參閱叢集建立總覽。 virtctl
用戶端工具已安裝為kubectl
的外掛程式。視需要安裝 virtctl 用戶端工具。
建立 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 伺服器的網路,請完成下列步驟:
在您選擇的編輯器中建立
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
附加至這個網路。這是您唯一可以在 VM Runtime on GDC 中建立的網路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 gibibyte) 磁碟。STORAGE_CLASS_NAME
:您想用於VirtualMachineDisk
的StorageClass
。- 使用
kubectl get storageclass
列出叢集中可用的項目。
- 使用
在編輯器中儲存並關閉
VirtualMachineDisk
資訊清單。使用
kubectl
建立磁碟:kubectl apply -f my-disk.yaml
建立 VM
建立虛擬網路和開機磁碟後,現在可以建立 VM。VM 會連線至虛擬網路,並從虛擬磁碟開機。下列操作說明會直接套用 VirtualMachine
YAML 資訊清單檔案,藉此使用 kubectl
CLI 建立 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。- 您可以為 VM 指派 1 到 96 個 vCPU。
MEMORY_SIZE
:要指派給 VM 的記憶體量 (選填)。如果沒有這項設定,系統會指派預設的 4 GiB 記憶體。- 您可以為 VM 指派 1M 到 1T 的記憶體。詳情請參閱「記憶體資源單位」。
NETWORK_NAME
:您在上一節中建立的網路名稱。DISK_NAME
:您在上一節中建立的開機磁碟名稱。這個磁碟設為boot: true
。
在編輯器中儲存並關閉資訊清單。
使用
kubectl
建立 VM 和磁碟:kubectl apply -f my-vm.yaml
建立 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 或安裝應用程式。
如要從控制台存取 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_NAME
編輯 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
替換為您在上一步建立的磁碟名稱。在編輯器中儲存並關閉更新後的 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 驅動程式,請按照儲存空間合作夥伴的指示操作。