本主题介绍如何将 GKE on AWS 与私有容器映像代码库(如 Container Registry (GCR))搭配使用。
准备工作
在开始使用 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 文档中部署容器化应用的步骤构建而成。
私有容器注册表
容器注册表存储和分发容器映像。 默认情况下,GKE on AWS 安装可以访问公共映像。
在 Container Registry 上查看映像
为完成其余步骤,您需要一个容器映像。执行以下步骤,获取容器映像的名称:
配置 Docker 命令行工具以使用 Google Cloud CLI 向 Container Registry 进行身份验证:
gcloud auth configure-docker
Google Cloud CLI 会为 Google 支持的所有 Docker 注册表注册凭据帮助程序。
使用
docker images
确认您的 Container Registry 包含映像。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
创建 Secret。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
现在,您可以在工作负载中引用此 Secret。
使用私有映像创建工作负载
如需结合使用私有容器代码库中的映像与工作负载,请将字段 spec.imagePullSecrets
设置为为您的 Secret 名称。对于 Pod 和 Deployment,此字段位于不同的位置。
创建 pod
如需创建可访问容器注册表的 pod,请将字段 spec.imagePullSecrets
设置为您的 Secret 名称。
创建指定
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 替换为您的注册表 Secret 名称。
例如,如需拉取映像
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
如需在 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