如何用Terraform从Artifact Registry部署Docker镜像到GKE工作负载?
用Terraform在GCP Kubernetes集群部署Docker镜像示例
前提条件
- 已通过Terraform或其他方式创建好GCP Kubernetes集群
- 本地已配置GCP认证(
gcloud auth application-default login) - Terraform已安装并初始化
步骤1:配置Kubernetes Provider
先让Terraform连接到你的GCP K8s集群,通过数据源获取集群认证信息,再配置Kubernetes Provider:
# 配置GCP Provider provider "google" { project = "你的GCP项目ID" region = "你的集群所在区域" # 示例:us-central1 } # 获取已存在的K8s集群信息 data "google_container_cluster" "existing_cluster" { name = "你的集群名称" location = "你的集群所在区域/可用区" # 示例:us-central1-a } # 配置Kubernetes Provider,使用集群凭证 provider "kubernetes" { host = data.google_container_cluster.existing_cluster.endpoint token = data.google_container_cluster.existing_cluster.master_auth[0].access_token cluster_ca_certificate = base64decode( data.google_container_cluster.existing_cluster.master_auth[0].cluster_ca_certificate ) }
步骤2:部署Docker镜像到集群
定义K8s的Deployment和Service资源,实现应用部署与外部访问:
# 可选:创建专属命名空间 resource "kubernetes_namespace" "app_namespace" { metadata { name = "demo-app" } } # 部署Docker镜像的Deployment resource "kubernetes_deployment" "app_deployment" { metadata { name = "demo-webapp" namespace = kubernetes_namespace.app_namespace.metadata[0].name labels = { app = "demo-webapp" } } spec { replicas = 3 # 运行3个应用副本 selector { match_labels = { app = "demo-webapp" } } template { metadata { labels = { app = "demo-webapp" } } spec { container { image = "nginx:latest" # 替换为你的镜像地址,示例:gcr.io/你的项目ID/自定义镜像:v1 name = "webapp-container" port { container_port = 80 } # 可选:配置资源限制 resources { limits = { cpu = "100m" memory = "128Mi" } requests = { cpu = "50m" memory = "64Mi" } } } } } } } # 创建Service暴露应用(GCP会自动分配公网IP) resource "kubernetes_service" "app_service" { metadata { name = "demo-webapp-service" namespace = kubernetes_namespace.app_namespace.metadata[0].name } spec { selector = { app = kubernetes_deployment.app_deployment.metadata[0].labels.app } port { port = 80 target_port = 80 } type = "LoadBalancer" } }
关键说明
- 镜像地址:如果用GCR镜像,格式为
gcr.io/你的GCP项目ID/镜像名:标签,需确保集群有拉取权限 - Provider适配:私有集群需额外配置网络访问,确保Terraform环境能连接集群Endpoint
- 资源调整:可根据需求修改副本数、资源限制、Service类型(如NodePort、ClusterIP)
执行流程
- 将代码保存为
main.tf - 运行
terraform init初始化Provider - 运行
terraform plan检查配置合法性 - 运行
terraform apply完成部署
内容的提问来源于stack exchange,提问作者NSA
相关产品推荐
相关产品推荐

