此程序將指導您建置 Linux 自訂機器映像,以便在 AWS、Azure 或 vSphere 上建立以計劃為基礎的叢集時使用。它分為以下各節。有關 Tanzu Kubernetes Grid 中的叢集類型的詳細資訊,請參閱工作負載叢集。
若要建置 Linux 自訂機器映像,您需要:
aws
命令列介面 (CLI)az
CLI在 AWS 和 Azure 上,登入您的基礎結構 CLI。當出現提示時,請驗證並指定您的地區:
aws configure
。az login
。在 Azure 上,建立一個組態 JSON 檔 azure-sig.json
並填寫 Azure 特定資訊。可以在此處找到此類檔案的範例。
在 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": ""
}
確定 Image Builder 組態版本,以從中建置。
TKG Image Builder
,以列出可用的版本。TKG-Image-Builder-for-Kubernetes-v1.24.10-on-TKG-v2.1.1-master.zip
會為 Tanzu Kubernetes Grid v2.1.1 建置 Kubernetes v1.24.10 映像。以下步驟說明如何為 Tanzu Kubernetes Grid v2.1.1 建置 Kubernetes v1.24.10 映像。
下載組態程式碼 zip 檔案,然後解壓縮其內容。
執行 cd
移至 TKG-Image-Builder-
目錄,以將 tkg.json
檔案放在目前目錄中。
確保您的工作站可以存取 VMware 映像登錄 projects.registry.vmware.com
。
從 projects.registry.vmware.com
下載並執行所需的構件容器。
docker pull projects.registry.vmware.com/tkg/linux-resource-bundle:v1.24.10_vmware.1-tkg.2
docker run -d -p 3000:3000 projects.registry.vmware.com/tkg/linux-resource-bundle:v1.24.10_vmware.1-tkg.2
編輯 tkg.json
以填入 <IP>
和 <PORT>
,其中:
IP
對應於執行 Docker 容器的機器的 IP。PORT
會讓 Docker 主機上未使用的連接埠與容器上的連接埠 3000 產生關聯,例如 3001:3000
。容器透過連接埠 3000 公開構件。如果建置 Photon-3 OVA,請編輯 tkg.json
中的 "extra_rpms"
,以反映受支援的其他自訂套件:
"extra_rpms": "sysstat nfs-utils ethtool apparmor-parser"
若要建置支援 FIPS 的映像,請移除 tkg.json
中的以下行:
"ansible_user_vars": "install_fips=no"
網際網路受限:對於透過 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"
}
啟用了 GPU 的叢集:若要為 vSphere 的啟用了 GPU 的叢集建置映像,請建立一個名為 customizations.json
的檔案並新增以下內容:
{
"vmx_version": "17"
}
將 customizations.json
與在上一個步驟中編輯的 tkg.json
儲存在相同目錄中。
收集下列參數字串,以便在下一步驟中插入至命令。其中有很多參數會指定 docker run -v
參數,以便將您目前的工作目錄複製到用來建置映像的容器的 /home/imagebuilder
目錄中。
AUTHENTICATION
:複製本機 CLI 目錄:
~/.aws:/home/imagebuilder/.aws
~/.azure:/home/imagebuilder/.azure
/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
tkg.json
檔案,以使用逸出引號 (\"
) 來重新格式化 custom_role_names
設定,以便使其成為包含多個角色的清單。例如: "custom_role_names": "\"/home/imagebuilder/tkg /home/imagebuilder/mycustomrole\"",
TESTS
:複製專為映像的目標基礎結構、作業系統和 Kubernetes 版本所設計的 goss
測試目錄:
goss
目錄中的檔案名稱,例如 amazon-ubuntu-1.24.10+vmware.1-goss-spec.yaml
。CUSTOMIZATIONS
:複製 JSON 格式的自訂檔。請參閱 Image Builder 說明文件中的自訂。在進行任何修改之前,請諮詢「VMware 客戶可靠性工程 (CRE)」,以瞭解最佳做法和建議。PACKER_VAR_FILES
:上述 JSON 檔案的空格分隔清單,其中包含適用於 Packer 的變數。AZURE-CREDS
:Azure 認證檔的路徑,如 Image Builder 說明文件中所述。COMMAND
:視自訂映像作業系統而定,使用下列命令之一。若為 vSphere 和 Azure 映像,則命令的開頭是 build-node-ova-
和 build-azure-sig-
:
build-ami-ubuntu-2004
:Ubuntu v20.04build-ami-ubuntu-1804
:Ubuntu v18.04build-ami-amazon-2
:Amazon Linux 2build-node-ova-vsphere-ubuntu-2004
:啟用了 GPU 的叢集使用上述字串,在從 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.2 \
COMMAND
附註如果您沒有為 Azure 建置映像,請省略
env-file
。此命令可能需要幾分鐘來完成。
例如,若要使用 Ubuntu v20.04 和 Kubernetes v1.24.10 來建立自訂映像,以便在 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.24.10+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.2 \
build-ami-ubuntu-2004
若為 vSphere,您必須使用上面所建立的自訂容器映像。您還必須設定一個版本字串,以便與您在後續步驟中於自訂 TKr 中所傳遞的內容相符。儘管 VMware 發佈的 OVA 將具有 v1.24.10+vmware.1-tkg.1
等之類的版本字串,但建議您使用對您的組織有意義的字串來取代 -tkg.1
。若要設定此版本字串,請在 metadata.json
檔案中定義它,如下所示:
{
"VERSION": "v1.24.10+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.24.10+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.2 \
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.24.10+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.2 \
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_USER
和 RHSM_PASS
是您 Red Hat Subscription Manager 帳戶的使用者名稱和密碼。$(pwd)/isos/rhel-8.4-x86-64-dvd.iso
,以作為額外磁碟區。若要將 Linux 映像設定為未來 Kubernetes 版本的預設映像,請根據該映像來建立 TKr。否則,請跳至將 Linux 映像用於工作負載叢集。
下圖簡要概述了如何在 vSphere 上為自訂 Linux 映像建立 TKr。
如要建立 TKr,請執行以下操作:
在 ~/.config/tanzu/tkg/bom/
目錄中,開啟對應至自訂映像 Kubernetes 版本的 TKr BoM。例如,Kubernetes v1.24.10 的檔案名稱類似於 tkr-bom-v1.24.10+vmware.1-tkg.1.yaml
。
如果目錄中缺少您需要的 TKr BOM 檔案,則可以部署具有您所要 Kubernetes 版本的叢集來將其帶入,如使用非預設 Kubernetes 版本來部署叢集中所述。
在 BOM 檔案中,找出基礎結構的映像定義區塊:ova
表示 vSphere、ami
表示 AWS,azure
表示 Azure。每個映像定義區塊都包含 osinfo.name
、osinfo.version
和 osinfo.arch
,其中:
若要新增作業系統映像的參考,請在 ova
、ami
或 azure
下新增映像定義區塊 (視您的目標基礎結構而定)。如上所述,映像定義區塊必須包含 osinfo.name
、osinfo.version
和 osinfo.arch
。此外,在以下項目上新增映像定義區塊時:
vSphere:
name:
包含作業系統版本的唯一 OVA 名稱,例如 my-ova-ubuntu-2004
。version:
在建立 OVA 時使用 metadata.json
中指派的唯一 VERSION
,例如 v1.24.10+vmware.1-myorg.0
。附註
version
必須與metadata.json
中的相同VERSION
完全相符。
id
值格式,但在末尾使用唯一的十六進位字串,例如 ami-693a5e2348b25e428
。如果 BOM 檔案將映像定義在地區之下,則自訂映像定義區塊必須先列在其地區中。在每個地區內,叢集建立程序會挑選清單中第一個合適的映像。
在 release.version
值中,藉由新增尾碼來設定自訂版本。請勿藉由新增前置詞來自訂版本。例如,將 v1.24.10+vmware.1-tkg.1
變更為 v1.24.10+vmware.1-tkg.1-mycustomtkr
。
使用您在上一個步驟中指定給 release.version
的相同自訂尾碼,來儲存 BOM 檔案。
如果檔案名稱包含加號 (+
) 字元,請將 +
取代為三條虛線 (---
)。
例如,將 BOM 檔案另存為 tkr-bom-v1.24.10---vmware.1-tkg.1-mycustomtkr.yaml
。
base64
- 將檔案內容編碼為二進位字串,例如:
cat tkr-bom-v1.24.10---vmware.1-tkg.1-mycustomtkr.yaml | base64 -w 0
建立 ConfigMap YAML 檔案 (例如,名為 configmap-v1.24.10---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-BOM
是 ConfigMap
的名稱,它必須包含您指定於 BOM 檔案中的 TKr release.version
值,並將任何 + 符號取代為三條虛線 (—)。例如,設定 v1.24.10---vmware.1-tkg.1-mycustomtkr
。CUSTOM-TKR
是 TKr 的名稱,它必須與您指定給 CUSTOM-TKG-BOM
的值相符。例如,v1.24.10---vmware.1-tkg.1-mycustomtkr
。BOM-BINARY-CONTENT
是您在上一個步驟中產生的自訂 BOM 檔案的 base64
編碼內容。例如:
apiVersion: v1
kind: ConfigMap
metadata:
name: v1.24.10---vmware.1-tkg.1-mycustomtkr
labels:
tanzuKubernetesRelease: v1.24.10---vmware.1-tkg.1-mycustomtkr
binaryData:
bomContent: "YXBpVmVyc2lvbjogcnVuLnRhbnp1...."
儲存 ConfigMap
檔案,將 kubectl
內容設定為您想在其中新增 TKr 的管理叢集,並將該檔案套用至於叢集,例如:
kubectl -n tkr-system apply -f configmap-v1.24.10---vmware.1-tkg.1-mycustomtkr.yaml
TKr 控制器透過建立 TanzuKubernetesRelease
來協調新的 ConfigMap
物件。預設協調週期為 600 秒。您可以刪除 TKr 控制器 Pod 來避免這樣的延遲,這會立即還原及協調網繭:
列出 tkr-system
命名空間中的 Pod:
kubectl get pod -n tkr-system
擷取 TKr 控制器 Pod 的名稱,類似於 tkr-controller-manager-f7bbb4bd4-d5lfd
刪除網繭:
kubectl delete pod -n tkr-system TKG-CONTROLLER
其中,TKG-CONTROLLER
是 TKr 控制器 Pod 的名稱。
若要檢查是否新增了自訂 TKr,請執行 tanzu kubernetes-release get
或 kubectl get tkr
,然後在輸出中尋找您在上面所設定的 CUSTOM-TKR
值。
一旦 kubectl
和 tanzu
CLI 列出您的自訂 TKr 後,您可以用它來建立管理叢集或工作負載叢集,如下所述。
若要建立管理叢集,且其使用您的自訂映像作為其節點的基礎作業系統,請執行以下動作:
將映像上傳至雲端提供者。
在您執行安裝程式介面時,請在作業系統映像 (OS Image) 窗格中選取自訂映像,如選取基礎作業系統映像中所述。
如需詳細資訊,請參閱如何產生基礎作業系統映像選項。
從 Linux 映像建立工作負載叢集的程序有所不同,具體取決於您是否在上述為 Linux 映像建立 TKr 中建立 TKr。
如果您建立了 TKr,請將 tanzu kubernetes-release get
列出的 TKr 名稱傳遞至 tanzu cluster create
的 --tkr
選項。
如果未建立 TKr,請執行下列步驟:
複製管理叢集組態檔,並遵循組態檔和物件規格中的程序,使用新名稱來儲存該檔案。
在新的組態檔中,新增或修改以下內容:
VSPHERE_TEMPLATE: LINUX-IMAGE
其中,LINUX-IMAGE
是您在建置 Linux 映像中所建立的 Linux 映像的名稱。
移除 CLUSTER_NAME
及其設定 (若有的話)。
依照建立工作負載叢集中所述,來部署工作負載叢集。