本文說明如何將永久虛擬機器 (VM) 磁碟,連接至 Google Distributed Cloud (GDC) 實體隔離方案中的執行個體。
將非開機磁碟連接至 VM,以滿足特定工作負載需求。將儲存空間與 VM 執行個體分離,可確保重要資料不受 VM 生命週期影響,同時自動調度資源以調整效能和容量,滿足工作負載需求。
本文件適用於平台管理員或應用程式操作員群組中的開發人員,他們會在 Distributed Cloud 環境中新增及設定 VM 磁碟。詳情請參閱「GDC 實體隔離方案說明文件的目標對象」。
事前準備
如要使用 gdcloud 指令列介面 (CLI) 指令,請務必下載、安裝及設定 gdcloud CLI。Distributed Cloud 的所有指令都使用 gdcloud 或 kubectl CLI,且需要作業系統 (OS) 環境。
取得 kubeconfig 檔案路徑
如要對 Management API 伺服器執行指令,請確認您具備下列資源:
如果您沒有 Management API 伺服器的 kubeconfig 檔案,請登入並產生該檔案。
請使用 Management API 伺服器的 kubeconfig 檔案路徑,取代這些操作說明中的
MANAGEMENT_API_SERVER。
要求 IAM 角色
請與 IAM 專案管理員聯絡,要求在專案中取得下列角色:
專案 VirtualMachine 管理員 (
project-vm-admin):建立、修改、列出及刪除專案命名空間中的 VM。專案檢視者(
project-viewer):查看專案命名空間中的所有資源。
所有 VM 角色都必須繫結至 VM 所在專案的命名空間。按照步驟驗證存取權。
將磁碟連接至 VM
建立非開機磁碟並連接至 VM。每個額外磁碟都可以指定自訂映像檔或空白磁碟。您可以一次為 VM 新增多個磁碟。
控制台
在導覽選單中,依序點選「虛擬機器」>「執行個體」。
在 VM 清單中,按一下 VM 名稱即可查看詳細資料。
點選「新增磁碟」。
在確認對話方塊中,點選「停止」來停止 VM。
請稍候幾分鐘,等待 VM 停止。
按一下 [更新]。
VM 處於停止狀態時,再次點選「新增磁碟」。
在「新增磁碟」對話方塊中,選擇新磁碟或現有磁碟。
如要佈建新磁碟,請按一下「New disk」(新磁碟) 分頁標籤。
- 在「Disk name」(磁碟名稱) 欄位中,輸入專案專屬的新磁碟名稱。
- 在「Size」(大小) 欄位中,輸入介於 10 至 65536 GiB 之間的磁碟大小。例如 10 GiB。
- 在「Deletion rule」(刪除規則) 區段中,按一下「Keep disk」(保留磁碟) 或「Delete disk」(刪除磁碟)。
如要選擇現有磁碟,請按一下「現有磁碟」分頁標籤。
- 在「Disk」(磁碟) 清單中,選取磁碟。
- 在「Deletion rule」(刪除規則) 區段中,按一下「Keep disk」(保留磁碟) 或「Delete disk」(刪除磁碟)。
按一下 [儲存]。磁碟會顯示在 VM 的磁碟清單中。
API
建立
VirtualMachineDisk:kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ apply -f - <<EOF apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineDisk metadata: name: NON_BOOT_BLANK_DISK spec: size: NON_BOOT_BLANK_DISK_SIZE EOF將
VirtualMachineDisk新增至現有的VirtualMachinespec.disks:kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ edit virtualmachines.virtualmachine.gdc.goog VM_NAME在文字編輯器中編輯下列內容:
# … disks: - virtualMachineDiskRef: name: VM_BOOT_DISK_NAME boot: true - virtualMachineDiskRef: name: NON_BOOT_BLANK_DISK autoDelete: false # …請根據下列定義替換變數。
變數 定義 MANAGEMENT_API_SERVERManagement API 伺服器 kubeconfig 檔案。 PROJECT要在其中建立 VM 的 Google Distributed Cloud 實體隔離方案 (GDC) 專案。 VM_NAME新 VM 的名稱。 VM_BOOT_DISK_NAME新 VM 開機磁碟的名稱。 NON_BOOT_BLANK_DISK額外磁碟的名稱。 NON_BOOT_BLANK_DISK_SIZE額外磁碟的大小,例如 20G。
格式化及掛接非開機磁碟
將磁碟連接至 VM 後,請執行下列必要步驟,以便在 VM 中存取磁碟。
連線至 VM
格式化磁碟
依序號列出附加至執行個體的磁碟,並找出要格式化及掛接的磁碟。
ls -l /dev/disk/by-id/以下範例輸出內容顯示磁碟名稱為序號:
total 0 lrwxrwxrwx 1 root root 9 Sep 13 23:51 ata-QEMU_HARDDISK_agentSADisk -> ../../sdc lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-0ATA_QEMU_HARDDISK_agentSADisk -> ../../sdc lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot -> ../../sda lrwxrwxrwx 1 root root 10 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part1 -> ../../sda1 lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part14 -> ../../sda14 lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part15 -> ../../sda15 lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-1ATA_QEMU_HARDDISK_agentSADisk -> ../../sdc lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-SATA_QEMU_HARDDISK_agentSADisk -> ../../sdc lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot -> ../../sda lrwxrwxrwx 1 root root 10 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part1 -> ../../sda1 lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part14 -> ../../sda14 lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part15 -> ../../sda15 lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb每行箭頭
->後方的資訊代表磁碟裝置名稱。舉例來說,在scsi-SQEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb中,序號為scsi-SQEMU_QEMU_HARDDISK_vm-disk-data,裝置名稱為sdb。從這份清單中找出磁碟序號。
可能影響序號清單的重要情境功能行為:
- 如果
virtualMachineDiskRef.name值超過 20 個字元,系統只會使用前 20 個字元做為序號。 - 如果兩個磁碟的前 20 個字元相同,則只有第一個磁碟會有序號。
- 如果
格式化磁碟:
sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/disk/by-id/DISK_ID
- 將
DISK_ID替換為要格式化的磁碟序號。 - 在這個範例中,請指定
scsi-SQEMU_QEMU_HARDDISK_vm-disk-data,在沒有分區資料表的情況下格式化整個磁碟。
如要盡可能提高磁碟效能,請使用 -E 旗標中的建議格式設定選項。由於您不需要在次要磁碟上為根磁碟區保留空間,因此請指定 -m 0,以使用所有可用的磁碟空間。
掛接磁碟
建立做為新磁碟掛接點的目錄。您可以使用任何目錄。以下範例會在
/mnt/disks/中建立目錄:sudo mkdir -p /mnt/disks/MOUNT_DIR將
MOUNT_DIR替換為要掛接磁碟的目錄。將磁碟掛接至執行個體,並啟用 discard 選項:
sudo mount -o discard,defaults /dev/disk/by-id/DISK_ID /mnt/disks/MOUNT_DIR更改下列內容:
DISK_ID:要掛接的磁碟序號。- 將
MOUNT_DIR替換為要掛接磁碟的目錄。
選用:設定磁碟的讀取和寫入權限。下列指令會將磁碟的寫入權限
a+w授予所有使用者。sudo chmod a+w /mnt/disks/MOUNT_DIR選用:設定 VM 重新啟動時自動掛接 - 使用通用專屬 ID (UUID) 或開機指令碼。
設定 VM 重新啟動時自動掛接 - 磁碟 UUID
將磁碟新增至 /etc/fstab 檔案,這樣一來,VM 重新啟動時,磁碟就會自動重新掛接。在作業系統 (OS) 上,裝置名稱會隨著每次重新啟動而變更,但裝置 UUID 一律指向同一個磁碟區,即使在系統之間移動磁碟也是如此。因此,請一律使用裝置 UUID,設定在 VM 重新啟動時自動掛接。
備份目前的
/etc/fstab檔案:sudo cp /etc/fstab /etc/fstab.backup-
sudo blkid /dev/DEVICE_NAME範例輸出內容顯示磁碟的 UUID 為
accc19c5-d0d6-4157-9672-37d4e1d48eb5/dev/sdb: UUID="accc19c5-d0d6-4157-9672-37d4e1d48eb5" TYPE="ext4"DEVICE_NAME是要自動掛接的磁碟裝置名稱。如果您在磁碟上建立了分區資料表,請指定要掛接的分區,做為裝置名稱的後置字串。舉例來說,如果sdb是磁碟裝置名稱,而您要掛接分區 1,則DEVICE_NAME會變成sdb1。 在文字編輯器中開啟
/etc/fstab檔案,並建立包含 UUID 的項目:UUID=UUID_VALUE /mnt/disks/MOUNT_DIR ext4 discard,defaults,MOUNT_OPTION 0 2更改下列內容:
UUID_VALUE:磁碟UUID,列為列出 UUID 指令的輸出內容。- 將
MOUNT_DIR替換為掛接磁碟的目錄。 MOUNT_OPTION,並為 OS 指定MOUNT_OPTION值,指定 OS 在開機時無法掛接磁碟時應執行的動作。
確認
/etc/fstab項目正確無誤:下列指令會根據連接至 VM 的現有磁碟和分區,驗證
/etc/fstab項目:findmnt --verify以下範例顯示驗證成功。您可以放心忽略預期的警告:
[W] your fstab has been modified, but systemd still uses the old version; use 'systemctl daemon-reload' to reload 0 parse errors, 0 errors, 1 warning如果發生錯誤,請檢查
fstab項目是否有效。常見問題是項目中加入無效的非列印字元。您可以執行下列指令,顯示/etc/fstab檔案中的所有特殊字元:cat --show-nonprinting /etc/fstab以下是有效的輸出內容範例:
LABEL=cloudimg-rootfs / ext4 defaults 0 1 LABEL=UEFI /boot/efi vfat umask=0077 0 1 UUID=UUID_VALUE /mnt/disks/MOUNT_DIR ext4 discard,defaults,MOUNT_OPTION 0 2確認沒有非預期的字元,例如以
M-或^開頭的非列印字元。
如果您卸離這個磁碟,或從這個 VM 的開機磁碟建立快照,請編輯 /etc/fstab 檔案,並移除這個磁碟的項目。即使 MOUNT_OPTION 設為 nofail 或 nobootwait,也請讓 /etc/fstab 檔案與連接至 VM 的裝置保持同步。請先移除這些項目,再建立開機磁碟快照或卸載磁碟。
設定 VM 重新啟動時自動掛接 - VM 開機指令碼
您也可以使用開機指令碼,在每次重新啟動時掛接磁碟,方法是將「掛接磁碟」中的指令新增至開機指令碼。新增指令碼來掛接磁碟前,請先使用「格式化磁碟」中的指令格式化磁碟。
建立開機指令碼 Secret。
cat <<EOF >>mount-disk-script #!/bin/bash mkdir -p /mnt/disks/MOUNT_DIR mount -o discard,defaults /dev/disk/by-id/DISK_ID /mnt/disks/MOUNT_DIR EOFkubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ create secret generic VM_NAME-mount-script \ --from-file=script=mount-disk-scriptrm mount-disk-script將開機指令碼新增至 VM。
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ edit virtualmachines.virtualmachine.gdc.goog VM_NAME編輯
spec.startupScripts,加入密鑰名稱。apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachine metadata: name: VM_NAME namespace: PROJECT spec: # … startupScripts: - name: mount-script scriptSecretRef: name: VM_NAME-mount-script
如要進一步瞭解如何設定開機指令碼,請參閱這篇文章。