You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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)

执行流程

  1. 将代码保存为main.tf
  2. 运行terraform init初始化Provider
  3. 运行terraform plan检查配置合法性
  4. 运行terraform apply完成部署

内容的提问来源于stack exchange,提问作者NSA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:45:34