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

如何在GKE Autopilot集群中为Prometheus获取Pod/容器的CPU与内存指标?

在GKE Autopilot集群中为Prometheus获取Pod/容器CPU和内存指标

GKE Autopilot集群默认运行gke-metrics-agent,但由于命名空间权限限制,无法自行修改kube-system资源。要让Prometheus获取Pod/容器的CPU、内存指标,可通过以下两种方案实现:

方案一:自行部署Prometheus并配置权限与抓取任务

1. 创建RBAC权限资源

Autopilot严格控制权限,需为Prometheus的ServiceAccount配置访问kubelet指标的权限:

创建ClusterRole(保存为prometheus-kubelet-role.yaml):

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: prometheus-kubelet-access
rules:
- apiGroups: [""]
  resources: ["nodes", "nodes/metrics", "nodes/proxy", "pods"]
  verbs: ["get", "list", "watch"]
- nonResourceURLs: ["/metrics/cadvisor", "/metrics/resource"]
  verbs: ["get"]

创建ClusterRoleBinding(保存为prometheus-kubelet-binding.yaml,假设Prometheus部署在monitoring命名空间,ServiceAccount名为prometheus):

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: prometheus-kubelet-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: prometheus-kubelet-access
subjects:
- kind: ServiceAccount
  name: prometheus
  namespace: monitoring

执行部署:

kubectl apply -f prometheus-kubelet-role.yaml
kubectl apply -f prometheus-kubelet-binding.yaml

2. 配置Prometheus抓取kubelet指标

修改Prometheus的ConfigMap,添加针对kubelet的抓取任务,获取容器级CPU、内存指标:

apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: monitoring
data:
  prometheus.yml: |
    global:
      scrape_interval: 15s
    scrape_configs:
    # 保留原有抓取任务...
    - job_name: 'kubelet-metrics'
      kubernetes_sd_configs:
      - role: node
      scheme: https
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        insecure_skip_verify: false
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      relabel_configs:
      - action: labelmap
        regex: __meta_kubernetes_node_label_(.+)
      metric_relabel_configs:
      - source_labels: [__name__]
        regex: '(container_cpu_usage_seconds_total|container_memory_working_set_bytes|pod_cpu_usage_seconds_total|pod_memory_working_set_bytes)'
        action: keep

更新Prometheus配置后,重启Prometheus Pod使配置生效。

3. 配置网络策略(若启用)

如果集群启用了网络策略,需允许Prometheus所在命名空间的Pod访问kubelet的10250端口(kubelet指标端口):

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-prometheus-to-kubelet
  namespace: monitoring
spec:
  podSelector:
    matchLabels:
      app: prometheus
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/8  # 替换为集群节点的Pod CIDR
    ports:
    - protocol: TCP
      port: 10250

方案二:使用GCP托管式Prometheus(Managed Service for Prometheus)

无需自行部署维护Prometheus,直接利用GKE集成的托管服务:

  1. 启用托管Prometheus API:
gcloud services enable anthos.googleapis.com
  1. 为GKE Autopilot集群启用托管Prometheus集成:
gcloud container clusters update <集群名称> --region <集群区域> --enable-managed-prometheus

启用后,托管Prometheus会自动抓取GKE集群的Pod/容器CPU、内存等指标,可通过Cloud Monitoring控制台查看,或配置Grafana连接到托管Prometheus的端点进行自定义查询。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:45:50