本主題說明如何搭配私人容器映像檔存放區 (例如 Container Registry (GCR)),在 AWS 上使用 GKE。
事前準備
開始使用 GKE on AWS 前,請務必完成下列工作:
- 完成必要條件。
- 安裝管理服務。
- 建立使用者叢集。
- 在
anthos-aws
目錄中,使用anthos-gke
將環境切換至使用者叢集。 將 CLUSTER_NAME 替換為使用者叢集名稱。cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
- 建構 Docker 映像檔並推送至 Container Registry。本主題中的範例使用
hello-app
容器,該容器是按照 GKE on Google Cloud 說明文件中的「部署容器化應用程式」一節步驟建構而成。
私人 Container Registry
容器登錄檔會儲存及發布容器映像檔。根據預設,GKE on AWS 安裝作業可以存取公開映像檔。
檢查 Container Registry 中的映像檔
如要完成其餘步驟,您需要容器映像檔。執行下列步驟,取得容器映像檔的名稱:
使用 Google Cloud CLI 設定 Docker 指令列工具,向 Container Registry 進行驗證:
gcloud auth configure-docker
Google Cloud CLI 會為所有 Google 支援的 Docker 登錄檔註冊憑證輔助程式。
確認 Container Registry 包含
docker images
的映像檔。docker images
Docker 會連線至 Container Registry,並傳回 Container Registry 存放區中的可用映像檔。舉例來說,以下回應顯示 project-id 存放區中名為
hello-app
的容器映像檔。REPOSITORY TAG IMAGE ID CREATED SIZE gcr.io/project-id/hello-app v1 732f02cea7cb 12 minutes ago 11.5MB
如果沒有現成的容器映像檔,請按照「部署容器化應用程式」一文中的步驟建立。
建立服務帳戶
使用者叢集會使用 Identity and Access Management (IAM) 服務帳戶進行驗證。
如要建立新的服務帳戶,請按照下列步驟操作:
使用 Google Cloud CLI 建立 IAM 服務帳戶。
gcloud iam service-accounts create account-name
將 account-name 改為新服務帳戶的名稱。 Google Cloud
授予服務帳戶存取 Container Registry 的權限。
gcloud projects add-iam-policy-binding project-id \ --member serviceAccount:account-name@project-id.iam.gserviceaccount.com \ --role roles/storage.objectViewer
更改下列內容:
- project-id 專案 Google Cloud
- account-name 改為您的 Google Cloud 服務帳戶名稱
下載帳戶的服務帳戶金鑰。
gcloud iam service-accounts keys create key.json \ --iam-account account-name@project-id.iam.gserviceaccount.com
更改下列內容:
- project-id 專案 Google Cloud
- account-name 改為您的 Google Cloud 服務帳戶名稱
您現在可以設定使用者叢集,以便連線至 Container Registry。
定義 Kubernetes Secret
如要提供金鑰來驗證 Container Registry,請執行下列步驟,將服務帳戶金鑰儲存為 Kubernetes Secret:
使用
kubectl
建立密鑰。env HTTPS_PROXY=http://localhost:8118 \ kubectl create secret docker-registry gcr-secret \ --docker-server=gcr.io \ --docker-username=_json_key \ --docker-email=account-name@project-id.iam.gserviceaccount.com \ --docker-password="$(cat key.json)"
更改下列內容:
- project-id 專案 Google Cloud
- account-name 改為您的 Google Cloud 服務帳戶名稱
刪除服務帳戶金鑰的本機副本。
rm key.json
您現在可以在工作負載中參照這個密鑰。
使用私人映像檔建立工作負載
如要使用私人容器存放區中的映像檔執行工作負載,請將 spec.imagePullSecrets
欄位設為密鑰名稱。這個欄位在 Pod 和部署作業中位於不同位置。
建立 Pod
如要建立可存取容器登錄的 Pod,請將 spec.imagePullSecrets
欄位設為密鑰名稱。
建立指定
spec.imagePullSecrets
的 Pod。apiVersion: v1 kind: Pod metadata: name: pod-name spec: containers: - name: container-name image: gcr.io/project-id/hello-app:v1 imagePullSecrets: - name: secret-name
更改下列內容:
- pod-name 替換為 Pod 名稱
- container-name 替換為 Pod 內容器的名稱
- project-id 專案 Google Cloud
- secret-name 改為登錄檔密鑰的名稱
舉例來說,如要提取
hello-app
映像檔,請將下列 YAML 複製到名為hello-pod.yaml
的檔案中。apiVersion: v1 kind: Pod metadata: name: hello-pod spec: containers: - name: hello-container image: gcr.io/project-id/hello-app:v1 imagePullSecrets: - name: gcr-secret
使用
kubectl
將設定套用到叢集。env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-pod.yaml
使用
kubectl get
確認 Pod 正在執行。env HTTPS_PROXY=http://localhost:8118 \ kubectl get pod/hello-pod
回應會包含一個狀態為
Running
的 Pod。NAME READY STATUS RESTARTS AGE hello-pod 1/1 Running 0 15s
建立部署
如要在 Deployment 中使用私有存放區,請在範本中指定
imagePullSecret
。舉例來說,如要建立
hello-app
映像檔的 Deployment,請建立名為hello-deployment.yaml
的檔案,並在當中加入下列內容:apiVersion: apps/v1 kind: Deployment metadata: name: hello-app-deployment spec: selector: matchLabels: app: products department: sales replicas: 3 template: metadata: labels: app: products department: sales spec: containers: - name: hello image: "gcr.io/project-id/hello-app:v1" env: - name: "PORT" value: "50001" imagePullSecrets: - name: gcr-secret
使用
kubectl
將設定套用到叢集。env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-deployment.yaml
使用
kubectl pods
確認 Deployment 正在執行。env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods --selector=app=products
輸出結果包含三個
Running
Pod。NAME READY STATUS RESTARTS AGE hello-app-deployment-67d9c6d98c-b69f2 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-d6k5c 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-p2md5 1/1 Running 0 14m