Linux 自訂機器映像 (舊版)

此程序將指導您建置 Linux 自訂機器映像,以便在 AWS、Azure 或 vSphere 上建立以計劃為基礎的叢集時使用。它分為以下各節。有關 Tanzu Kubernetes Grid 中的叢集類型的詳細資訊,請參閱工作負載叢集

Linux 映像的必要條件

若要建置 Linux 自訂機器映像,您需要:

  • 目標基礎結構、AWS、Azure 或 vSphere 上的帳戶。
  • 安裝了以下項目的 macOS 或 Linux 工作站:
    • Docker 桌面
    • 若為 AWS:aws 命令列介面 (CLI)
    • 若為 Azure:az CLI
    • 若為 vSphere:若要建置 RHEL 8 映像,您需要 Linux 工作站,而不是 macOS。

建置 Linux 映像

  1. 在 AWS 和 Azure 上,登入您的基礎結構 CLI。當出現提示時,請驗證並指定您的地區:

    • AWS:執行 aws configure
    • Azure:執行 az login
  2. 在 Azure 上,建立一個組態 JSON 檔 azure-sig.json 並填寫 Azure 特定資訊。可以在此處找到此類檔案的範例。

  3. 在 vSphere 上,建立一個認證 JSON 檔案,並填入其值:

    {
    "cluster": "",
    "convert_to_template": "false",
    "create_snapshot": "true",
    "datacenter": "",
    "datastore": "",
    "folder": "",
    "insecure_connection": "false",
    "linked_clone": "true",
    "network": "",
    "password": "",
    "resource_pool": "",
    "template": "",
    "username": "",
    "vcenter_server": ""
    }
    
  4. 確定 Image Builder 組態版本,以從中建置。

    • 在 VMware {code} Sample Exchange 中搜尋 TKG Image Builder,以列出可用的版本。
    • 每個 Image Builder 版本各會對應至其相容的 Kubernetes 和 Tanzu Kubernetes Grid 版本。例如,TKG-Image-Builder-for-Kubernetes-v1.25.7-on-TKG-v2.2.0-master.zip 為 Tanzu Kubernetes Grid v2.2 建立置 Kubernetes v1.25.7 映像。
    • 如果您需要建立管理叢集 (在您第一次安裝 Tanzu Kubernetes Grid 時必須執行此動作),請選取 Tanzu Kubernetes Grid 版本的預設 Kubernetes 版本。例如,在 Tanzu Kubernetes Grid v2.2 中,預設 Kubernetes 版本為 v1.25.7。對於工作負載叢集,除了 v1.24.11 之外,還可以建置 Kubernetes v1.23.17 或 v1.25.7 映像。

    以下步驟說明如何為 Tanzu Kubernetes Grid v2.2 建置 Kubernetes v1.25.7 映像。

  5. 下載組態程式碼 zip 檔案,然後解壓縮其內容。

  6. 執行 cd 移至 TKG-Image-Builder- 目錄,以將 tkg.json 檔案放在目前目錄中。

  7. 確保您的工作站可以存取 VMware 映像登錄 projects.registry.vmware.com

  8. projects.registry.vmware.com 下載並執行所需的構件容器。

    docker pull projects.registry.vmware.com/tkg/linux-resource-bundle:v1.25.7_vmware.1-tkg.1
    
    docker run -d -p 3000:3000 projects.registry.vmware.com/tkg/linux-resource-bundle:v1.25.7_vmware.1-tkg.1
    
  9. 編輯 tkg.json 以填入 <IP><PORT>,其中:

    • IP 對應於執行 Docker 容器的機器的 IP。
    • PORT 會讓 Docker 主機上未使用的連接埠與容器上的連接埠 3000 產生關聯,例如 3001:3000。容器透過連接埠 3000 公開構件。
  10. 如果建置 Photon-3 OVA,請編輯 tkg.json 中的 "extra_rpms",以反映受支援的其他自訂套件:

    "extra_rpms": "sysstat nfs-utils ethtool apparmor-parser"
    
  11. 若要建置支援 FIPS 的映像,請移除 tkg.json 中的以下行:

    "ansible_user_vars": "install_fips=no"
    
  12. 網際網路受限:對於透過 HTTP Proxy 伺服器來存取網際網路的網際網路受限的環境,若要建置其映像,請將以下內容新增至 tkg.json 檔案:

    {
      "http_proxy": "http://proxy.acme.com:80",
      "https_proxy": "http://proxy.acme.com:80",
      "no_proxy": "localhost, 127.0.0.1, acme.com, 10.0.0.0/8"
    }
    
  13. 啟用了 GPU 的叢集:若要為 vSphere 的啟用了 GPU 的叢集建置映像,請建立一個名為 customizations.json 的檔案並新增以下內容:

    {
    "vmx_version": "17"
    }
    
  14. customizations.json 與在上一個步驟中編輯的 tkg.json 儲存在相同目錄中。

  15. 收集下列參數字串,以便在下一步驟中插入至命令。其中有很多參數會指定 docker run -v 參數,以便將您目前的工作目錄複製到用來建置映像的容器的 /home/imagebuilder 目錄中。

    • AUTHENTICATION:複製本機 CLI 目錄:
      • AWS:使用 ~/.aws:/home/imagebuilder/.aws
      • Azure:使用 ~/.azure:/home/imagebuilder/.azure
      • vSphere:/PATH/TO/CREDENTIALS.json:/home/imagebuilder/vsphere.json
    • SOURCES:複製存放庫的 tkg.json 檔案,其中列出已版本化作業系統、Kubernetes、容器網路介面 (CNI) 映像的下載來源:
      • 使用 /PATH/TO/tkg.json:/home/imagebuilder/tkg.json
    • ROLES:複製存放庫的 tkg 目錄,其中含有 Image Builder 所需的 Ansible 角色。
      • 使用 /PATH/TO/tkg:/home/imagebuilder/tkg
      • 若要新增自訂 Ansible 角色,請編輯 tkg.json 檔案,以使用逸出引號 (\") 來重新格式化 custom_role_names 設定,以便使其成為包含多個角色的清單。例如:
        "custom_role_names": "\"/home/imagebuilder/tkg /home/imagebuilder/mycustomrole\"",
    • TESTS:複製專為映像的目標基礎結構、作業系統和 Kubernetes 版本所設計的 goss 測試目錄:
      • 使用存放庫 goss 目錄中的檔案名稱,例如 amazon-ubuntu-1.25.7+vmware.1-goss-spec.yaml
    • CUSTOMIZATIONS:複製 JSON 格式的自訂檔。請參閱 Image Builder 說明文件中的自訂。在進行任何修改之前,請諮詢「VMware 客戶可靠性工程 (CRE)」,以瞭解最佳做法和建議。
    • PACKER_VAR_FILES:上述 JSON 檔案的空格分隔清單,其中包含適用於 Packer 的變數。
    • (Azure) AZURE-CREDS:Azure 認證檔的路徑,如 Image Builder 說明文件中所述。
    • COMMAND:視自訂映像作業系統而定,使用下列命令之一。若為 vSphere 和 Azure 映像,則命令的開頭是 build-node-ova-build-azure-sig-
      • build-ami-ubuntu-2004:Ubuntu v20.04
      • build-ami-ubuntu-1804:Ubuntu v18.04
      • build-ami-amazon-2:Amazon Linux 2
      • build-node-ova-vsphere-ubuntu-2004:啟用了 GPU 的叢集
  16. 使用上述字串,在從 VMware 登錄 projects.registry.vmware.com 提取的 Docker 容器中,執行 Image Builder:

    docker run -it --rm \
        -v AUTHENTICATION \
        -v SOURCES \
        -v ROLES \
        -v /PATH/TO/goss/TESTS.yaml:/home/imagebuilder/goss/goss.yaml \
        -v /PATH/TO/CUSTOMIZATIONS.json:/home/imagebuilder/CUSTOMIZATIONS.json \
        --env PACKER_VAR_FILES="tkg.json CUSTOMIZATIONS.json" \
        --env-file AZURE-CREDS \
        --env IB_OVFTOOL=1 \
        projects.registry.vmware.com/tkg/image-builder:v0.1.13_vmware.3 \
        COMMAND
    
    附註

    如果您沒有為 Azure 建置映像,請省略 env-file。此命令可能需要幾分鐘來完成。

    例如,若要使用 Ubuntu v20.04 和 Kubernetes v1.25.7 來建立自訂映像,以便在 AWS 上執行,請從含有 tkg.json 的目錄執行:

    docker run -it --rm \
        -v ~/.aws:/home/imagebuilder/.aws \
        -v $(pwd)/tkg.json:/home/imagebuilder/tkg.json \
        -v $(pwd)/tkg:/home/imagebuilder/tkg \
        -v $(pwd)/goss/amazon-ubuntu-1.25.7+vmware.1-goss-spec.yaml:/home/imagebuilder/goss/goss.yaml \
        -v /PATH/TO/CUSTOMIZATIONS.json /home/imagebuilder/aws.json \
        --env PACKER_VAR_FILES="tkg.json aws.json" \
        --env IB_OVFTOOL=1 \
        projects.registry.vmware.com/tkg/image-builder:v0.1.13_vmware.3 \
        build-ami-ubuntu-2004
    

    若為 vSphere,您必須使用上面所建立的自訂容器映像。您還必須設定一個版本字串,以便與您在後續步驟中於自訂 TKr 中所傳遞的內容相符。儘管 VMware 發佈的 OVA 將具有 v1.25.7+vmware.1-tkg.1 等之類的版本字串,但建議您使用對您的組織有意義的字串來取代 -tkg.1。若要設定此版本字串,請在 metadata.json 檔案中定義它,如下所示:

    {
      "VERSION": "v1.25.7+vmware.1-myorg.0"
    }
    

    建置 OVA 時,會將 .ova 檔案儲存至您工作站的本機檔案系統中。無論您希望將這些 OVA 儲存在哪個資料夾,都應掛接到容器內的 /home/imagebuilder/output 中。然後,使用容器映像來建立 OVA:

    docker run -it --rm \
      -v /PATH/TO/CREDENTIALS.json:/home/imagebuilder/vsphere.json \
      -v $(pwd)/tkg.json:/home/imagebuilder/tkg.json \
      -v $(pwd)/tkg:/home/imagebuilder/tkg \
      -v $(pwd)/goss/vsphere-ubuntu-1.25.7+vmware.1-goss-spec.yaml:/home/imagebuilder/goss/goss.yaml \
      -v $(pwd)/metadata.json:/home/imagebuilder/metadata.json \
      -v /PATH/TO/OVA/DIR:/home/imagebuilder/output \
      --env PACKER_VAR_FILES="tkg.json vsphere.json" \
      --env OVF_CUSTOM_PROPERTIES=/home/imagebuilder/metadata.json \
      --env IB_OVFTOOL=1 \
      projects.registry.vmware.com/tkg/image-builder:v0.1.13_vmware.3 \
      build-node-ova-vsphere-ubuntu-2004
    

    對於啟用了 GPU 的叢集,在執行命令建立 OVA 時,我們需要包括在上述步驟中建立的 customizations.json 檔案。

    docker run -it --rm \
      -v /PATH/TO/CREDENTIALS.json:/home/imagebuilder/vsphere.json \
      -v $(pwd)/tkg.json:/home/imagebuilder/tkg.json \
      -v $(pwd)/tkg:/home/imagebuilder/tkg \
      -v $(pwd)/goss/vsphere-ubuntu-1.25.7+vmware.1-goss-spec.yaml:/home/imagebuilder/goss/goss.yaml \
      -v $(pwd)/metadata.json:/home/imagebuilder/metadata.json \
      -v $(pwd)/customizations.json:/home/imagebuilder/customizations.json \
      -v /PATH/TO/OVA/DIR:/home/imagebuilder/output \
      --env PACKER_VAR_FILES="tkg.json vsphere.json customizations.json" \
      --env OVF_CUSTOM_PROPERTIES=/home/imagebuilder/metadata.json \
      --env IB_OVFTOOL=1 \
      projects.registry.vmware.com/tkg/image-builder:v0.1.13_vmware.3 \
      build-node-ova-vsphere-ubuntu-2004
    

    RHEL:若要建置 RHEL OVA,您需要使用 Linux 機器,而不是 macOS,因為 macOS 上的 Docker 不支援 --network host 選項。
    您還必須將作業系統登錄為獲得 Red Hat 授權,並將以下內容新增到上面的 docker run 命令,來註冊更新:

      -v $(pwd)/isos/rhel-8.4-x86_64-dvd.iso:/rhel-8.4-x86_64-dvd.iso \
      --network host \
      --env RHSM_USER=USER --env RHSM_PASS=PASS
    

    其中:

    • RHSM_USERRHSM_PASS 是您 Red Hat Subscription Manager 帳戶的使用者名稱和密碼。
    • 您可以在上述範例中,對應本機 RHEL ISO 路徑 $(pwd)/isos/rhel-8.4-x86-64-dvd.iso,以作為額外磁碟區。

為 Linux 映像建立 TKr

若要將 Linux 映像設定為未來 Kubernetes 版本的預設映像,請根據該映像來建立 TKr。否則,請跳至將 Linux 映像用於工作負載叢集

下圖簡要概述了如何在 vSphere 上為自訂 Linux 映像建立 TKr。

建立 TKr

如要建立 TKr,請執行以下操作:

  1. ~/.config/tanzu/tkg/bom/ 目錄中,開啟對應至自訂映像 Kubernetes 版本的 TKr BoM。Kubernetes v1.25.7 的檔案名稱範例 tkr-bom-v1.25.7+vmware.1-tkg.1.yaml

    如果目錄中缺少您需要的 TKr BOM 檔案,則可以部署具有您所要 Kubernetes 版本的叢集來將其帶入,如使用非預設 Kubernetes 版本來部署叢集中所述。

    1. 在 BOM 檔案中,找出基礎結構的映像定義區塊:ova 表示 vSphere、ami 表示 AWS,azure 表示 Azure。每個映像定義區塊都包含 osinfo.nameosinfo.versionosinfo.arch,其中:

      • osinfo.name 是作業系統名稱。例如,ubuntu。若要檢視支援的作業系統清單,請參閱目標作業系統
      • osinfo.version 是作業系統版本。例如,20.04。若要檢視支援的版本清單,請參閱目標作業系統
      • osinfo.arch 是作業系統架構。支援的值為 amd64
    2. 若要新增作業系統映像的參考,請在 ovaamiazure 下新增映像定義區塊 (視您的目標基礎結構而定)。如上所述,映像定義區塊必須包含 osinfo.nameosinfo.versionosinfo.arch。此外,在以下項目上新增映像定義區塊時:

      • vSphere:

        • name: 包含作業系統版本的唯一 OVA 名稱,例如 my-ova-ubuntu-2004
        • version: 在建立 OVA 時使用 metadata.json 中指派的唯一 VERSION,例如 v1.25.7+vmware.1-myorg.0
        附註

        version 必須與 metadata.json 中的相同 VERSION 完全相符。

      • AWS:對於計劃在其中使用自訂映像的每個區域,請遵循現有的 id 值格式,但在末尾使用唯一的十六進位字串,例如 ami-693a5e2348b25e428

      如果 BOM 檔案將映像定義在地區之下,則自訂映像定義區塊必須先列在其地區中。在每個地區內,叢集建立程序會挑選清單中第一個合適的映像。

    3. release.version 值中,藉由新增尾碼來設定自訂版本。請勿藉由新增前置詞來自訂版本。例如,將 v1.25.7+vmware.1-tkg.1 變更為 v1.25.7+vmware.1-tkg.1-mycustomtkr

    4. 使用您在上一個步驟中指定給 release.version 的相同自訂尾碼,來儲存 BOM 檔案。

      如果檔案名稱包含加號 (+) 字元,請將 + 取代為三條虛線 (---)。

      例如,將 BOM 檔案另存為 tkr-bom-v1.25.7---vmware.1-tkg.1-mycustomtkr.yaml

  2. base64 - 將檔案內容編碼為二進位字串,例如:

    cat tkr-bom-v1.25.7---vmware.1-tkg.1-mycustomtkr.yaml | base64 -w 0
    
  3. 建立 ConfigMap YAML 檔案 (例如,名為 configmap-v1.25.7---vmware.1-tkg.1-mycustomtkr.yaml),且其中的值如下:

    apiVersion: v1
    kind: ConfigMap
    metadata:
     name: CUSTOM-TKG-BOM
     labels:
       tanzuKubernetesRelease: CUSTOM-TKR
    binaryData:
     bomContent: "BOM-BINARY-CONTENT"
    

    其中:

    • CUSTOM-TKG-BOMConfigMap 的名稱,它必須包含您指定於 BOM 檔案中的 TKr release.version 值,並將任何 + 符號取代為三條虛線 (—)。例如,設定 v1.25.7---vmware.1-tkg.1-mycustomtkr
    • CUSTOM-TKR 是 TKr 的名稱,它必須與您指定給 CUSTOM-TKG-BOM 的值相符。例如,v1.25.7---vmware.1-tkg.1-mycustomtkr
    • BOM-BINARY-CONTENT 是您在上一個步驟中產生的自訂 BOM 檔案的 base64 編碼內容。

    例如:

    apiVersion: v1
    kind: ConfigMap
    metadata:
     name: v1.25.7---vmware.1-tkg.1-mycustomtkr
     labels:
       tanzuKubernetesRelease: v1.25.7---vmware.1-tkg.1-mycustomtkr
    binaryData:
     bomContent: "YXBpVmVyc2lvbjogcnVuLnRhbnp1...."
    
  4. 儲存 ConfigMap 檔案,將 kubectl 內容設定為您想在其中新增 TKr 的管理叢集,並將該檔案套用至於叢集,例如:

    kubectl -n tkr-system apply -f configmap-v1.25.7---vmware.1-tkg.1-mycustomtkr.yaml
    

    TKr 控制器透過建立 TanzuKubernetesRelease 來協調新的 ConfigMap 物件。預設協調週期為 600 秒。您可以刪除 TKr 控制器 Pod 來避免這樣的延遲,這會立即還原及協調網繭:

    1. 列出 tkr-system 命名空間中的 Pod:

      kubectl get pod -n tkr-system
      
    2. 擷取 TKr 控制器 Pod 的名稱,類似於 tkr-controller-manager-f7bbb4bd4-d5lfd

    3. 刪除網繭:

      kubectl delete pod -n tkr-system TKG-CONTROLLER
      

      其中,TKG-CONTROLLER 是 TKr 控制器 Pod 的名稱。

  5. 若要檢查是否新增了自訂 TKr,請執行 tanzu kubernetes-release getkubectl get tkr,然後在輸出中尋找您在上面所設定的 CUSTOM-TKR 值。

一旦 kubectltanzu CLI 列出您的自訂 TKr 後,您可以用它來建立管理叢集或工作負載叢集,如下所述。

將 Linux 映像用於管理叢集

若要建立管理叢集,且其使用您的自訂映像作為其節點的基礎作業系統,請執行以下動作:

  1. 將映像上傳至雲端提供者。

  2. 在您執行安裝程式介面時,請在作業系統映像 (OS Image) 窗格中選取自訂映像,如選取基礎作業系統映像中所述。

如需詳細資訊,請參閱如何產生基礎作業系統映像選項

將 Linux 映像用於工作負載叢集

從 Linux 映像建立工作負載叢集的程序有所不同,具體取決於您是否在上述為 Linux 映像建立 TKr 中建立 TKr。

  • 如果您建立了 TKr,請將 tanzu kubernetes-release get 列出的 TKr 名稱傳遞至 tanzu cluster create--tkr 選項。

  • 如果未建立 TKr,請執行下列步驟:

    1. 複製管理叢集組態檔,並遵循組態檔和物件規格中的程序,使用新名稱來儲存該檔案。

    2. 在新的組態檔中,新增或修改以下內容:

      VSPHERE_TEMPLATE: LINUX-IMAGE
      

      其中,LINUX-IMAGE 是您在建置 Linux 映像中所建立的 Linux 映像的名稱。

      移除 CLUSTER_NAME 及其設定 (若有的話)。

    3. 依照建立工作負載叢集中所述,來部署工作負載叢集。

check-circle-line exclamation-circle-line close-line
Scroll to top icon