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

如何在Terraform中实现monitoring.googleapis.com/v1的PodMonitoring?

如何用Terraform实现GKE上的PodMonitoring配置?

你已经有一个在GKE上运行正常的PodMonitoring配置:

apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
  name: api
  namespace: default
spec:
  selector:
    matchLabels:
      app: api
  endpoints:
    - port: metrics
      interval: 30s

但找到的Terraform代码依赖了未使用的monitoring.coreos.com provider,无法直接使用:

resource "k8s_monitoring_coreos_com_pod_monitor_v1" "monitor" {
  metadata = {
    name = var.name
  }

  spec = {
    pod_metrics_endpoints = [
      {
         path = "/metrics"
         port = "metrics"
      }
    ]
    selector = {
      match_labels = {
        app = var.name
      }
    }

  }
}

正确的Terraform实现方法

可以直接使用Terraform的Kubernetes provider中的kubernetes_manifest资源,创建这个GKE专属的PodMonitoring自定义资源,无需额外provider:

# 确保已配置Kubernetes provider,指向你的GKE集群
provider "kubernetes" {
  config_path = "~/.kube/config" # 这里填写你的GKE集群kubeconfig路径
}

resource "kubernetes_manifest" "api_pod_monitoring" {
  manifest = {
    apiVersion = "monitoring.googleapis.com/v1"
    kind       = "PodMonitoring"
    metadata = {
      name      = "api"
      namespace = "default"
    }
    spec = {
      selector = {
        matchLabels = {
          app = "api"
        }
      }
      endpoints = [
        {
          port     = "metrics"
          interval = "30s"
        }
      ]
    }
  }
}

这个实现完全对应你原有的YAML配置:

  • metadata部分和原配置一致,指定资源名称和所属命名空间
  • spec.selector.matchLabels匹配标签为app: api的Pod
  • spec.endpoints定义了metrics抓取的端口和间隔时间

如果需要复用配置,可将关键参数提取为变量:

variable "pod_monitoring_name" {
  type        = string
  default     = "api"
  description = "PodMonitoring资源名称"
}

variable "target_app_label" {
  type        = string
  default     = "api"
  description = "要监控的Pod的app标签值"
}

variable "metrics_port" {
  type        = string
  default     = "metrics"
  description = metrics端口名称
}

variable "scrape_interval" {
  type        = string
  default     = "30s"
  description = metrics抓取间隔
}

resource "kubernetes_manifest" "api_pod_monitoring" {
  manifest = {
    apiVersion = "monitoring.googleapis.com/v1"
    kind       = "PodMonitoring"
    metadata = {
      name      = var.pod_monitoring_name
      namespace = "default"
    }
    spec = {
      selector = {
        matchLabels = {
          app = var.target_app_label
        }
      }
      endpoints = [
        {
          port     = var.metrics_port
          interval = var.scrape_interval
        }
      ]
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:27:53