使用多架構映像檔,您可以將 Google Kubernetes Engine (GKE) Windows Server 節點集區升級至偏好的 Windows Server 版本,而不需重建映像檔和變更 Pod 規格。例如:
- GKE 1.15 版支援 Windows Server 1809
- GKE 1.16 版支援 Windows Server 1909
如要自動從某個 GKE 版本升級至後續版本,您必須為 Windows 工作負載建構多架構映像檔。建構多架構映像檔時,需要為每個 Windows Server 版本建構映像檔,然後建構參照這些映像檔的資訊清單。如要完全控管映像檔的建立和建構程序,可以手動建構映像檔。或者,您也可以使用 Cloud Build 自動建構 Windows Server 多架構映像檔。
目標
在本教學課程中,您將瞭解如何手動或使用 Cloud Build 建立 Windows Server 多架構映像檔。手動建構映像檔:
- 建立 2 個 Docker 映像檔,使用不同版本或類型的 Windows Server,例如長期維護通道 (LTSC) 2019 和 LTSC 2022。
- 建立 Windows Server VM。
- 建立資訊清單並推送至登錄檔。
使用 Cloud Build 建構映像檔:
- 建立專案、啟用 API 並授予權限,準備好環境。
- 建立應用程式、Dockerfile 和建構檔案。
- 執行指令來建構映像檔。
費用
在本文件中,您會使用下列 Google Cloud的計費元件:
您可以使用 Pricing Calculator,根據預測用量估算費用。
完成本文所述工作後,您可以刪除建立的資源,避免繼續計費,詳情請參閱「清除所用資源」。
事前準備
開始之前,請確認您已完成下列工作:- 安裝 Google Cloud CLI,即可執行
gcloud指令。 - 安裝 Docker 來建構容器。
- 安裝 Go,建構 Windows Server 二進位檔。
- 本教學課程使用 Artifact Registry 做為存放區。確認您已建立 Docker 存放區。
手動建構多架構映像檔
手動建構多架構映像檔可讓您彈性建構映像檔,其中包含您需要的任何 Windows Server 版本。如要手動建構多架構映像檔,請按照下列步驟操作:
- 建立 LTSC 2019 Docker 單一架構映像檔。如要瞭解如何建立 Docker 映像檔,請參閱「部署 Windows Server 應用程式」。例如:
us-docker.pkg.dev/my-project/docker-repo/foo:1.0-2019。 - 建立 LTSC 2022 Docker 單一架構映像檔。例如
us-docker.pkg.dev/my-project/docker-repo/foo:1.0-2022。 - 建立 Windows Server VM,例如 20H2 版。請參閱「使用 Windows Server VM 的快速入門導覽課程」。
- 使用 RDP 連線至 VM。
- 開啟 PowerShell 視窗,執行後續步驟中的指令。
啟用
docker manifest實驗功能。Docker 資訊清單是要推送至登錄檔的映像檔清單:PS C:\> $env:DOCKER_CLI_EXPERIMENTAL = 'enabled'建立多架構資訊清單:
docker manifest create ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0 ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0-2019 ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0-2022 `將新建立的多重架構映像檔資訊清單推送至 Artifact Registry 存放區:
docker manifest push ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0如要確保已成功建構及推送多架構映像檔,請前往
REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo並按一下該映像檔。你會看到 3 張圖片 :foo:1.0-2019foo:1.0-2022foo:1.0-20h2foo:1.0
現在您可以在 Pod 規格中參照多架構映像檔 REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0。這樣一來,您就能安全地對 GKE Windows 節點集區使用自動升級功能。
使用 Cloud Build gke-windows-builder 建構多架構映像檔
如要簡化手動建構步驟,可以使用以 OSS gke-windows-builder 為基礎的 gke-windows-builder。您可以搭配使用 gke-windows-builder 和 Cloud Build,自動建構 Windows Server 多架構映像檔。GKE 會在發布新版本時更新建構工具,納入支援的 Windows LTSC 版本。使用建構工具的另一個好處是,您不必使用 Powershell 建立自己的 Windows VM 來建構映像檔。Windows VM 會由 Docker 容器取代,在 Cloud Build 中為您執行指令。
為協助您瞭解建構工具的運作方式,請按照這個範例建構「Hello World」多架構映像檔。這些步驟可在 Linux 或 Windows 伺服器上執行。
準備環境
如要準備環境,請完成下列步驟:
- 在工作電腦上建立工作區目錄,例如:
~/gke-windows-builder/hello-world。 - 建立或選取本教學課程的專案。
- 確認您已為專案啟用計費功能。
為專案啟用 Compute Engine、Cloud Build 和 Artifact Registry API。系統會使用 Cloud Build 叫用 gke-windows-builder,並將產生的多架構容器映像檔推送至 Artifact Registry。建構工具必須使用 Compute Engine,才能建立及管理 Windows Server VM。
gcloud services enable compute.googleapis.com cloudbuild.googleapis.com \ artifactregistry.googleapis.com cloudbuild.googleapis.com使用 Google Cloud CLI,將下列 Identity and Access Management (IAM) 角色授予 Cloud Build 服務帳戶:
設定變數:
export PROJECT=$(gcloud info --format='value(config.project)') export MEMBER=$(gcloud projects describe $PROJECT --format 'value(projectNumber)')@cloudbuild.gserviceaccount.com指派角色。建構工具必須具備這些角色,才能建立 Windows Server VM、將工作區複製到 Cloud Storage bucket、設定網路來建構 Docker 映像檔,以及將產生的映像檔推送至 Artifact Registry:
gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/compute.instanceAdmin' gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/iam.serviceAccountUser' gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/compute.networkViewer' gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/storage.admin' gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/artifactregistry.writer'
新增名為
allow-winrm-ingress的防火牆規則,允許 WinRM 連線至 Windows Server VM,以執行 Docker 建構作業:gcloud compute firewall-rules create allow-winrm-ingress --allow=tcp:5986 --direction=INGRESS為專案在 Artifact Registry 中建立 Docker 存放區。如果您從未使用過 Artifact Registry 中的 Docker 存放區,請先完成 Docker 快速入門導覽課程。執行下列指令來建立存放區:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker --location=REGISTRY_REGION \ --description="Docker repository"更改下列內容:
REPOSITORY:名稱,例如windows-multi-arch-images。REGISTRY_REGION:有效的 Artifact Registry 位置。
在工作區中建立 hello.exe 二進位檔
在本教學課程中,您將建立以 Go 語言撰寫的簡單「hello world」應用程式。範例應用程式的程式碼位於 GitHub。
使用下列指令,將內含本教學課程範例程式碼的存放區複製到本機電腦:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/windows/windows-multi-archhello.go檔案會列印「Hello World」字詞:產生
hello.exe二進位檔:GOOS=windows go build hello.go
工作區會顯示 hello.exe 二進位檔。
在工作區中建立 Dockerfile 和建構檔案
在本節中,您會使用 Dockerfile 建構每個單一架構 Windows Server 映像檔,然後使用建構檔案觸發 Cloud Build。建構作業會將單一架構映像檔合併為多重架構映像檔。
Dockerfile是文字文件,內含 Docker 建構映像檔的操作說明。gke-windows-builder 會將WINDOWS_VERSION替換為特定 Windows Server 版本,以建構映像檔。舉例來說,建構工具會在 Windows Server 20H2 上執行docker build -t multi-arch-helloworld:latest_20h2 --build-arg WINDOWS_VERSION=20H2 .。在含有
Dockerfile的同一個目錄中,cloudbuild.yaml檔案就是您的建構設定檔。將 <REPOSITORY> 和 <REGISTRY_REGION> 替換為您在上一步建立的 Artifact Registry 存放區名稱和區域。在建構階段,Cloud Build 會將$PROJECT_ID自動取代為您的專案 ID。
建構映像檔
現在您可以建構映像檔,並查看記錄檔來確認建構作業是否成功。
如要建構映像檔,請執行下列指令:
gcloud builds submit --config=cloudbuild.yaml .您會看到類似下列範例的記錄。記錄的最後一行顯示建構作業成功:
Creating temporary tarball archive of 2 file(s) totalling 492 bytes before compression. Uploading tarball of [.] to [gs://PROJECT_ID_cloudbuild/source/1600082502.509759-b949721a922d462c94a75da9be9f1181.tgz] Created [https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds/ec333452-1301-47e8-90e2-716aeb2f5650]. Logs are available at [https://console.cloud.google.com/cloud-build/builds/ec333452-1301-47e8-90e2-716aeb2f5650?project=840737568665]. ------------------------ REMOTE BUILD OUTPUT--------------------------------------- ... ... Created manifest list REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/multiarch-helloworld:latest sha256:3ecbbc9f5144f358f81f7c7f1a7e28f069c98423d59c40eaff72bf184af0be02 2020/09/14 11:34:25 Instance: 35.184.178.49 shut down successfully PUSH DONE ----------------------------------------------------------------------------------- ID CREATE_TIME DURATION SOURCE IMAGES STATUS ec333452-1301-47e8-90e2-716aeb2f5650 2020-09-14T11:21:43+00:00 12M43S gs://PROJECT_ID_cloudbuild/source/1600082502.509759-b949721a922d462c94a75da9be9f1181.tgz - SUCCESS
您已使用建構設定檔建構映像檔,並將映像檔推送至 Artifact Registry 的 REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/multiarch-helloworld:latest。
部署映像檔
如要在叢集上部署多架構 Windows 映像檔,請參閱部署 Windows Server 應用程式,瞭解如何部署映像檔。
進階 gke-windows-builder 用法
您可以在 cloudbuild.yaml 建構設定檔的 args 區段中新增標記,自訂 gke-windows-builder 的行為。本節將說明常見行為的部分標記,但這並非完整清單。如要查看 gke-windows-builder 支援的完整標記清單,請在 Linux 伺服器或 Cloud Shell 中執行下列指令:
docker run -it us-docker.pkg.dev/gke-windows-tools/docker-repo/gke-windows-builder:latest --help
如要加快建構速度,可以為 Windows 執行個體使用較大的機器類型:
- --machineType
- 'n1-standard-8'
您不必為 GKE 支援的所有 Windows 版本建構映像檔,而是可以使用 --versions 標記,選擇要建構的特定 Windows Server 版本:
- --versions
- '20H2,ltsc2019'
如果工作區有許多檔案,建議您將建構工具設定為透過 Cloud Storage (而非 WinRM) 複製工作區,這樣映像檔建構作業會更可靠。在專案中建立值區,例如 gs://{your project}_builder,然後設定 --workspace-bucket 旗標:
- --workspace-bucket
- '{your project}_builder'
如要在共用虛擬私有雲服務專案中執行 Windows 建構工具執行個體,請使用下列可控管執行個體網路設定的標記:
- --subnetwork-project
- 'shared-vpc-host-project'
- --subnetwork
- 'host-project-subnet-shared-with-service-project'
清除所用資源
完成教學課程後,您可以清除所建立的資源,這樣資源就不會繼續使用配額,也不會產生費用。下列各節將說明如何刪除或關閉這些資源。
刪除映像檔
如要刪除 Artifact Registry 中的 multiarch-helloworld 映像檔,請參閱「刪除映像檔」。
刪除專案
如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。
如要刪除專案:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
後續步驟
探索其他 Kubernetes Engine 教學課程。
探索 Google Cloud 的參考架構、圖表和最佳做法。歡迎瀏覽我們的雲端架構中心。