如何在K8s的deployment.yaml中拉取GCP Artifact Registry镜像?
从GCP Artifact Registry拉取镜像到Kubernetes Deployment
要在K8s的deployment.yaml里配置拉取GCP Artifact Registry的镜像,核心是配置镜像拉取认证和正确填写镜像地址,步骤如下:
1. 创建镜像拉取Secret
K8s需要通过认证才能访问Artifact Registry,你得先创建一个docker-registry类型的Secret来存储GCP服务账号的密钥:
- 首先,在GCP控制台创建一个带有
Artifact Registry Reader权限的服务账号,下载其JSON密钥文件(比如命名为gcp-key.json)。 - 然后执行kubectl命令创建Secret:
kubectl create secret docker-registry gcr-json-key \ --docker-server=us-central1-docker.pkg.dev \ --docker-username=_json_key \ --docker-password="$(cat ./gcp-key.json)" \ --docker-email=your-email@example.com
注意:替换
us-central1-docker.pkg.dev为你的Artifact Registry所在区域的域名,比如europe-west1-docker.pkg.dev;your-email@example.com可以填任意有效邮箱,这个字段目前不影响认证。
2. 编写Deployment配置文件
在deployment.yaml中,需要做两处关键配置:
引用镜像拉取Secret
在spec.template.spec下添加imagePullSecrets字段,指向刚才创建的Secret。
填写Artifact Registry的镜像地址
镜像地址格式为:REGISTRY_DOMAIN/PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME:TAG
完整的deployment.yaml示例:
apiVersion: apps/v1 kind: Deployment metadata: name: my-app-deployment spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: # 引用之前创建的镜像拉取Secret imagePullSecrets: - name: gcr-json-key containers: - name: my-app-container # 替换为你的Artifact Registry镜像地址 image: us-central1-docker.pkg.dev/my-gcp-project/my-repo/my-app-image:v1 ports: - containerPort: 8080
额外说明
- 如果你的K8s集群是GKE(Google Kubernetes Engine),可以用工作负载身份替代Secret认证,不需要手动管理密钥文件,不过这需要额外的IAM配置,适合长期运维场景。
- 确保服务账号的IAM权限正确:必须拥有
roles/artifactregistry.reader权限,否则会拉取失败。
内容的提问来源于stack exchange,提问作者stone
相关产品推荐
相关产品推荐

