有了 GDC 的 VM 執行階段,您就能直接在裸機上執行及管理 Linux 虛擬機器 (VM)。在本教學課程中,您將設定基本依附元件,包括 StorageClass 和虛擬網路,然後建立使用這些資源的 VM。您也會修改 VM 設定,以連接額外的磁碟。
目標
- 設定基本依附元件
- 為 VM Runtime on GDC 建立
StorageClass - 建立 VM 可使用的虛擬網路
- 為 VM Runtime on GDC 建立
- 建立虛擬機器開機磁碟
- 建立 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 名稱。
VM Runtime on GDC 會自動為叢集中的每個 StorageClass 產生一個儲存空間設定檔。儲存空間設定檔的名稱與相關聯的 StorageClass 相同。儲存空間設定檔提供與各 StorageClass 相關聯的其他設定選項。如要進一步瞭解儲存空間設定檔,包括設定操作說明,請參閱「設定儲存空間設定檔」。
建立虛擬網路
VM 會透過虛擬網路介面連線至虛擬網路。虛擬網路可讓 Pod 與叢集中的其他 VM 或叢集外的資源通訊。
在本教學課程中,您將建立可使用外部 DHCP 伺服器的基本第 2 層 (L2) 虛擬網路。啟用外部 DHCP 伺服器後,如果 DNS 和閘道設定是由 DHCP 提供,您就可以略過這些設定。
如要建立使用外部 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 會連線至虛擬網路,並從虛擬磁碟啟動。下列操作說明會使用 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。- 您可以為 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.yamlVM 應該會在幾分鐘內建立完畢。使用 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 gibibyte) 磁碟。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更新
VirtualMachineYAML 資訊清單,在 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 驅動程式,請按照儲存空間合作夥伴提供的操作說明進行。