製作自訂圖片

您可以從現有的來源磁碟建立自訂映像檔,並用來建立及啟動虛擬機器 (VM)。如果您已建立永久開機磁碟並修改為某種狀態,而需要儲存該狀態以建立 VM,自訂映像檔就是理想的選擇。建立及儲存自訂映像檔,以便日後在建立 VM 時使用,這樣就不必重複設定步驟。

事前準備

如要使用 gdcloud 指令列介面 (CLI) 指令,請務必下載、安裝及設定 gdcloud CLI。GDC 氣隙裝置的所有指令都使用 gdcloudkubectl CLI,且需要作業系統 (OS) 環境。

取得 kubeconfig 檔案路徑

如要對 Management API 伺服器執行指令,請確認您具備下列資源:

  1. 找出 Management API 伺服器名稱,或詢問平台管理員 (PA) 伺服器名稱。

  2. 登入並產生 Management API 伺服器的 kubeconfig 檔案 (如果沒有)。

  3. 請使用路徑取代這些操作說明中的 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,使它能關閉並停止將任何資料寫入永久磁碟。

如果無法在建立映像檔之前停止執行個體,請盡量減少寫入磁碟的資料量,並且同步處理檔案系統。如要盡量減少寫入永久磁碟的資料,請按照下列步驟操作:

  1. 暫停會將資料寫入該永久磁碟的應用程式或作業系統程序。視需要執行適當的指令來清除磁碟中的應用程式快取資料。其他應用程式可能也有類似的程序。
  2. 讓應用程式停止將資料寫入永久磁碟。
  3. 執行 sudo sync

建立映像檔

請按照下列步驟,從永久磁碟建立磁碟映像檔,即使該磁碟已連接至 VM 也是如此:

主控台

  1. 選取專案。

  2. 在導覽選單中,依序點選「Virtual Machines」>「Images」

  3. 按一下 [Create image] (建立映像檔)。

  4. 輸入圖片的專屬名稱,名稱長度不得超過 35 個字元。

  5. 輸入要新增至圖片名稱的版本。

  6. 在「來源磁碟」欄位中選取磁碟。

  7. 在「Minimum Disk Size」(磁碟大小下限) 欄位中,輸入磁碟大小。

  8. 輸入圖片說明。

  9. 點選「建立」

圖片會顯示在圖片清單中。

API

  1. 列出所有 VirtualMachineDisk 物件:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
       get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT
    
  2. 選取要用來做為新映像檔來源磁碟的 VirtualMachineDisk 物件。

  3. 檢查 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":"...."}]
    
    1. 檢查 VM 的執行狀態。如果狀態不是 Stopped,請停止 VM,然後繼續建立 VirtualMachineImage
  4. 取得 sizeVirtualMachineDisk,以建立圖片:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT \
        DISK_NAME -o jsonpath='{.spec.size}'
    
  5. 在 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
    
  6. 確認圖片匯入作業已完成,且狀態為 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
    }
    
  7. 確認圖片已建立:

    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_NAME VM 映像檔匯入作業的名稱。名稱長度不得超過 35 個字元。
    IMAGE_NAME 建立的映像檔名稱,例如 custom-image
    OS_NAME 圖片 OS 名稱必須是下列其中一個:
    ubuntu-2004windows-2019rhel-8
    MINIMUM_DISK_SIZE VM 映像檔匯入作業的磁碟大小下限 (例如 20G:
    minimumDiskSize) 必須一律大於或等於來源開機磁碟大小。
    CREATED_IMAGE_NAME 建立的圖片名稱。 建立的映像檔名稱不得重複,且不能是專案中已有的映像檔名稱。