本文適用於執行 Google Distributed Cloud 的應用程式擁有者。本文說明如何為使用 GDC 上的 VM 執行階段的虛擬機器 (VM) 建立及管理磁碟資源。
事前準備
如要完成這份文件,您必須存取下列資源:
- 存取 Google Distributed Cloud 1.12.0 版 (
anthosBareMetalVersion: 1.12.0
) 以上版本的叢集。您可以使用任何可執行工作負載的叢集類型。 如有需要,請在 Compute Engine 上試用 Google Distributed Cloud,或參閱叢集建立總覽。 virtctl
用戶端工具已安裝為kubectl
的外掛程式。視需要安裝 virtctl 用戶端工具。
建立附加磁碟的 VM
建立 VM 時,您可以附加現有的開機或資料磁碟、從映像檔建立磁碟 (包括開機磁碟),或是建立空白磁碟。
空白磁碟
在這個情境中,您會建立空白磁碟並連接至 VM。這個情境可讓您建立資料磁碟,用來儲存應用程式資料。
在您選擇的編輯器中,建立定義
VirtualMachineDisk
和VirtualMachine
的資訊清單,例如my-vm.yaml
:nano my-vm.yaml
複製並貼上下列 YAML 定義:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: DISK_NAME
更改下列內容:
DISK_NAME
:您要建立並附加至 VM 的空白磁碟名稱。VM_NAME
:您要建立的 VM 名稱。這個範例會建立名為
DISK_NAME
的空白10Gi
(10 GiB) 磁碟。在 VM 的spec.disks
區段中,您也必須附加開機磁碟,例如下一個章節所示的映像檔。
在編輯器中儲存並關閉資訊清單檔案。
使用
kubectl
建立 VM 和磁碟:kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
將
KUBECONFIG
替換為叢集 kubeconfig 檔案的路徑。
從圖片
在這種情況下,您會從映像檔建立磁碟,並將其附加至 VM。這個情境可讓您從映像檔等項目建立開機磁碟。您也可以從映像檔建立及附加資料磁碟。
支援的圖片來源
GDC 上的 VM 執行階段支援多種映像檔格式,並支援三種可在 VirtualMachineDisk
規格中指定的映像檔來源。以下範例分別從不同的支援映像檔來源建立 20 GiB 的磁碟。
超文本傳輸通訊協定 (HTTP)
下列
VirtualMachineDisk
範例顯示 HTTP 圖片來源的基本結構。「url
」欄位必須是 HTTP 或 HTTPS 網址。apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: my-disk spec: source: http: url: https://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img size: 20GiB storageClassName: local-shared
Cloud Storage
下列範例說明如何從 Cloud Storage bucket 中的映像檔建立磁碟。如果機器上的應用程式預設憑證不足以存取 Cloud Storage 網址,您必須提供憑證。在下列範例中,
my-gcs
是包含以 base64 編碼服務帳戶金鑰的密鑰。apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: my-disk spec: source: gcs: url: gs://kubevirt-ci-vm-images/rhel8.2/rhel8_2_cloud.qcow2 secretRef: my-gcs size: 20GiB storageClassName: local-shared
如果您使用下載的服務帳戶金鑰建立叢集,可以將 Artifact Registry 服務帳戶金鑰用於 Cloud Storage 存取權。如要建立個別服務帳戶來存取 Cloud Storage,請參閱「設定可存取 Cloud Storage 值區的服務帳戶」。
使用下列指令,從下載的服務帳戶金鑰檔案建立 Kubernetes 密鑰:
kubectl create secret generic SECRET_NAME --from-file=KEY_FILE --namespace default \ --kubeconfig KUBECONFIG
更改下列內容:
SECRET_NAME
:密鑰的名稱。KEY_FILE
:下載的服務帳戶金鑰 JSON 檔案路徑。例如:bmctl-workspace/.sa-keys/my-project-anthos-baremetal-gcr.json
。KUBECONFIG
:叢集 kubeconfig 檔案的路徑。
如要進一步瞭解如何使用憑證存取 Cloud Storage,請參閱建立及使用憑證,從 Cloud Storage 匯入圖片。
容器登錄檔範例
支援符合開放容器倡議 (OCI) 發布規格的容器登錄檔。下列範例會從 Docker 登錄檔中儲存的映像檔建立磁碟。
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: my-disk spec: source: registry: url: docker://kubevirt/fedora-cloud-registry-disk-demo size: 20GiB storageClassName: local-shared
有效圖片格式
從映像檔建立磁碟時,可以使用下列任一映像檔格式:
- GNU zip (gzip) 封存檔 (
.gz
) - RAW (
.raw
、.img
) - QEMU 寫入時複製第 2 版 (qcow2) 磁碟映像檔 (
.qcow2
) - XZ 壓縮檔 (
.xz
) - 虛擬機器磁碟 (VMDK) 檔案 (
.vmdk
) - VirtualBox 虛擬磁碟映像檔 (VDI) 檔案 (
.vdi
) - 虛擬硬碟 (VHD) 映像檔 (
.vdh
) - 虛擬硬碟第 2 版 (VDHX) 檔案 (
.vdhx
) - ISO 磁碟映像檔 (
.iso
)
透過 HTTP 映像檔建立的磁碟範例
下列步驟會從 Ubuntu 映像檔建立開機磁碟:
在您選擇的編輯器中建立資訊清單,定義
VirtualMachineDisk
和VirtualMachine
,例如 my-vm.yaml:nano my-vm.yaml
複製並貼上下列 YAML 定義:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: VM_NAME-boot-dv spec: size: 20Gi source: http: url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv
這個範例會使用 Ubuntu 公開映像檔,建立名為
VM_NAME-boot-dv
的20Gi
(20 GiB) 磁碟。在 VM 的spec.disks
區段中,磁碟會設為boot: true
。在編輯器中儲存並關閉資訊清單。
使用
kubectl
建立 VM 和磁碟:kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
將
KUBECONFIG
替換為叢集 kubeconfig 檔案的路徑。
現有磁碟
在這個情境中,您會建立空白磁碟並連接至 VM。這個情境可讓您建立資料磁碟,用來儲存應用程式資料。
在您選擇的編輯器中建立
VirtualMachine
資訊清單,例如 my-vm.yaml:nano my-vm.yaml
複製並貼上下列 YAML 定義:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: EXISTING_DISK_NAME
這個範例會附加名為
EXISTING_DISK_NAME
的現有磁碟。在 VM 的
spec.disks
區段中,您也必須連結開機磁碟,例如上一節所示的映像檔。在編輯器中儲存並關閉 VM 資訊清單。
使用
kubectl
建立 VM:kubectl apply -f my-vm.yaml --kubeconfig KUBECONFIG
將
KUBECONFIG
替換為叢集 kubeconfig 檔案的路徑。
尋找磁碟
從 Google Distributed Cloud 1.13.0 版開始,建立 VM 時,GDC 的 VM Runtime 會使用您在 VM 資源中指定的磁碟名稱,設定磁碟序號。具體來說,您在 VirtualMachine
自訂資源中以 spec.disks.virtualMachineDiskName
指定的名稱,會用於磁碟的序號。這項功能可讓您在需要執行磁碟作業 (例如格式化或掛接) 時,更輕鬆地在 VM 中找到磁碟。
舉例來說,如果您建立 VM 並指定名為 sample-boot-dv
的開機磁碟,則 VirtualMachine
自訂資源看起來會像這樣:
apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
metadata:
name: sample-vm
spec:
osType: Linux
compute:
cpu:
vcpus: 2
memory:
capacity: 4Gi
interfaces:
- name: eth0
networkName: pod-network
default: true
disks:
- boot: true
virtualMachineDiskName: sample-vm-boot-dv
- virtualMachineDiskName: attached-disk
如果是 Linux VM,登入 VM 後,可以執行下列指令,依序號列出磁碟:
ls -l /dev/disk/by-id/
回應內容應如下列範例輸出所示,磁碟名稱會顯示為序號:
total 0
lrwxrwxrwx 1 root root 9 Oct 19 17:17 ata-QEMU_HARDDISK_agentInstallation -> ../../sdb
lrwxrwxrwx 1 root root 9 Oct 19 17:17 ata-QEMU_HARDDISK_agentSADisk -> ../../sda
lrwxrwxrwx 1 root root 9 Oct 19 17:17 virtio-sample-boot-dv -> ../../vda
lrwxrwxrwx 1 root root 10 Oct 19 17:17 virtio-sample-boot-dv-part1 -> ../../vda1
lrwxrwxrwx 1 root root 11 Oct 19 17:17 virtio-sample-boot-dv-part14 -> ../../vda14
lrwxrwxrwx 1 root root 11 Oct 19 17:17 virtio-sample-boot-dv-part15 -> ../../vda15
lrwxrwxrwx 1 root root 11 Oct 19 17:17 virtio-attached-disk -> ../../vdb
請注意下列情境式功能行為:
- 如果
virtualMachineDiskName
值超過 20 個字元,VM Runtime on GDC 只會使用前 20 個字元做為序號。 - 如果兩個磁碟的前 20 個字元相同,只有第一個磁碟會有序號。
建立磁碟並附加至現有 VM
如果您有現有的 VM,可以建立及連結磁碟,以支援應用程式生命週期。VM 必須處於停止狀態,才能連結磁碟。
空白磁碟
在這個情境中,您會建立空白磁碟並連接至 VM。這個情境可讓您建立資料磁碟,用來儲存應用程式資料。
視需要使用
kubectl
停止 VM:kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIG
更改下列內容:
VM_NAME
:要停止的 VM 名稱。KUBECONFIG
:叢集 kubeconfig 檔案的路徑。
編輯現有 VM 資源,例如
my-vm
:kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
更新
VirtualMachine
YAML 資訊清單,在頂端新增VirtualMachineDisk
區段,然後在 VM 的spec.disks
區段結尾附加磁碟:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: DISK_NAME
這個範例會建立名為
DISK_NAME
的空白10Gi
(10 GiB) 磁碟。在編輯器中儲存並關閉更新後的 VM 資訊清單。
使用
kubectl
啟動 VM:kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
從圖片
在這個情境中,您會依據來源映像檔建立磁碟,並將其附加至 VM。
視需要使用
kubectl
停止 VM:kubectl virt stop vm VM_NAME --kubeconfig KUBECONFIG
更改下列內容:
VM_NAME
:要停止的 VM 名稱。KUBECONFIG
:叢集 kubeconfig 檔案的路徑。
編輯現有 VM 資源,例如
my-vm
:kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
更新
VirtualMachine
資訊清單,在頂端新增VirtualMachineDisk
區段,然後在 VM 的spec.disks
區段結尾附加磁碟:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi source: http: url: http://example.com/my-disk-img.qcow2 --- apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - boot: true virtualMachineDiskName: VM_NAME-boot-dv - virtualMachineDiskName: DISK_NAME
這個範例會從
http://example.com/my-disk-img.qcow2
HTTP 來源建立名為DISK_NAME
的10Gi
(10 GiB) 磁碟。在編輯器中儲存並關閉更新後的 VM 資訊清單。
使用
kubectl
啟動 VM:kubectl virt start vm VM_NAME --kubeconfig KUBECONFIG
建立磁碟
在此情境中,您會分別建立磁碟資源和 VM 資源。這個情境可讓您預先建立磁碟,然後視需要附加至 VM。
空白磁碟
如要建立空白磁碟,請完成下列步驟。
在您選擇的編輯器中建立
VirtualMachineDisk
資訊清單,例如 my-disk.yaml:nano my-disk.yaml
複製並貼上下列 YAML 定義:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi
這個範例會建立名為
DISK_NAME
的空白10Gi
(10 GiB) 磁碟。在編輯器中儲存並關閉磁碟資訊清單。
使用
kubectl
建立磁碟:kubectl apply -f my-disk.yaml --kubeconfig KUBECONFIG
將
KUBECONFIG
替換為叢集 kubeconfig 檔案的路徑。
從圖片
如要從映像檔建立磁碟,請完成下列步驟。
在您選擇的編輯器中建立
VirtualMachineDisk
資訊清單,例如my-disk.yaml
:nano my-disk.yaml
複製並貼上下列 YAML 定義:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 20Gi source: http: url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img
這個範例會使用 Ubuntu 公開映像檔,建立名為
DISK_NAME
的20Gi
(20 GiB) 磁碟。在編輯器中儲存並關閉磁碟資訊清單。
使用
kubectl
建立磁碟:kubectl apply -f my-disk.yaml --kubeconfig KUBECONFIG
將
KUBECONFIG
替換為叢集 kubeconfig 檔案的路徑。
後續步驟
- 建立及使用憑證,從 Cloud Storage 匯入圖片。
- 在 Google Distributed Cloud 中建立及使用儲存空間類別。
- 不再需要 VM 或虛擬磁碟資源時,請刪除 Google Distributed Cloud 中的 VM。