您可以從現有的來源磁碟建立自訂映像檔,並用來建立及啟動虛擬機器 (VM)。如果您已建立永久開機磁碟並修改為某種狀態,而需要儲存該狀態以建立 VM,自訂映像檔就是理想的選擇。建立及儲存自訂映像檔,以便日後在建立 VM 時使用,這樣就不必重複設定步驟。
事前準備
如要使用 gdcloud 指令列介面 (CLI) 指令,請務必下載、安裝及設定 gdcloud CLI。GDC 氣隙裝置的所有指令都使用 gdcloud 或 kubectl CLI,且需要作業系統 (OS) 環境。
取得 kubeconfig 檔案路徑
如要對 Management API 伺服器執行指令,請確認您具備下列資源:
找出 Management API 伺服器名稱,或詢問平台管理員 (PA) 伺服器名稱。
登入並產生 Management API 伺服器的 kubeconfig 檔案 (如果沒有)。
請使用路徑取代這些操作說明中的
MANAGEMENT_API_SERVER{"</var>"}}。
要求權限和存取權
如要建立自訂映像檔,您必須具備專案層級的 VM 映像檔存取權。請按照這些步驟操作,讓專案 IAM 管理員在 VM 所在的專案命名空間中,指派專案 VirtualMachine 映像檔管理員 (project-vm-image-admin) 角色給您。如果您使用 GDC 控制台或 gdcloud CLI 建立映像檔,也需要「專案 VirtualMachine 管理員」(project-vm-admin) 和「專案檢視者」(project-viewer) 角色。
建立自訂映像檔
本節說明如何在 VM 上建立自訂映像檔。
準備 VM 以建立映像檔
您可以在磁碟連結至運作中的 VM 時,從該磁碟建立映像檔。不過,如果將 VM 設為映像檔擷取狀態,映像檔會更可靠。
盡量減少寫入永久磁碟的資料
請使用下列其中一個程序,減少磁碟寫入次數。停止 VM,或盡量減少磁碟寫入作業:
- 停止 VM,使它能關閉並停止將任何資料寫入永久磁碟。
如果無法在建立映像檔之前停止執行個體,請盡量減少寫入磁碟的資料量,並且同步處理檔案系統。如要盡量減少寫入永久磁碟的資料,請按照下列步驟操作:
- 暫停會將資料寫入該永久磁碟的應用程式或作業系統程序。視需要執行適當的指令來清除磁碟中的應用程式快取資料。其他應用程式可能也有類似的程序。
- 讓應用程式停止將資料寫入永久磁碟。
- 執行
sudo sync。
建立映像檔
請按照下列步驟,從永久磁碟建立磁碟映像檔,即使該磁碟已連接至 VM 也是如此:
主控台
選取專案。
在導覽選單中,依序點選「Virtual Machines」>「Images」。
按一下 [Create image] (建立映像檔)。
輸入圖片的專屬名稱,名稱長度不得超過 35 個字元。
輸入要新增至圖片名稱的版本。
在「來源磁碟」欄位中選取磁碟。
在「Minimum Disk Size」(磁碟大小下限) 欄位中,輸入磁碟大小。
輸入圖片說明。
點選「建立」。
圖片會顯示在圖片清單中。
API
列出所有
VirtualMachineDisk物件:kubectl --kubeconfig MANAGEMENT_API_SERVER \ get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT選取要用來做為新映像檔來源磁碟的
VirtualMachineDisk物件。檢查 VM 磁碟是否已附加至 VM:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT \ DISK_NAME -o jsonpath='{.status.virtualMachineAttachments}'以下是顯示磁碟已附加至 VM 的輸出範例:
[{"autoDelete":true,"nameRef":{"name":"vm1"},"uid":"...."}]- 如果輸出內容傳回
"name"的值,表示磁碟已連結至name欄位所指的 VM。在本範例輸出內容中,這個值是vm1。請繼續檢查 VM 的執行狀態。 - 如果輸出內容為空,請繼續取得
VirtualMachineDisk的size。
- 如果輸出內容傳回
取得
size的VirtualMachineDisk,以建立圖片:kubectl --kubeconfig MANAGEMENT_API_SERVER \ get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT \ DISK_NAME -o jsonpath='{.spec.size}'在 Management API 伺服器中建立
VirtualMachineImageImport物件:kubectl --kubeconfig MANAGEMENT_API_SERVER \ apply -n PROJECT -f - <<EOF apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineImageImport metadata: name: VM_IMAGE_IMPORT_NAME spec: source: diskRef: name: DISK_NAME imageMetadata: name: IMAGE_NAME operatingSystem: OS_NAME minimumDiskSize: MINIMUM_DISK_SIZE EOF確認圖片匯入作業已完成,且狀態為
Ready:kubectl --kubeconfig MANAGEMENT_API_SERVER \ get virtualmachineimageimports.virtualmachine.gdc.goog --namespace PROJECT \ VM_IMAGE_IMPORT_NAME -o jsonpath='{.status}'匯入完成後,狀態應如下所示:
{ "conditions": [ { "lastTransitionTime": "", "message": "", "observedGeneration": 1, "reason": "ImportJobComplete", "status": "True", "type": "Ready" } ], "imageName": IMAGE_NAME }確認圖片已建立:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ get virtualmachineimages.virtualmachine.gdc.goog --namespace PROJECT \ CREATED_IMAGE_NAME使用下列定義替換變數。
變數 定義 MANAGEMENT_API_SERVER管理 API 伺服器 kubeconfig檔案。PROJECT要建立映像檔的 GDC 專案。 DISK_NAME來源磁碟的名稱,例如 vm1-boot-disk。VM_IMAGE_IMPORT_NAMEVM 映像檔匯入作業的名稱。名稱長度不得超過 35 個字元。 IMAGE_NAME建立的映像檔名稱,例如 custom-image。OS_NAME圖片 OS 名稱必須是下列其中一個: ubuntu-2004、windows-2019或rhel-8。MINIMUM_DISK_SIZEVM 映像檔匯入作業的磁碟大小下限 (例如 20G:
minimumDiskSize) 必須一律大於或等於來源開機磁碟大小。CREATED_IMAGE_NAME建立的圖片名稱。 建立的映像檔名稱不得重複,且不能是專案中已有的映像檔名稱。