如何在Prometheus中获取GKE Autopilot集群容器CPU/内存使用率
GKE Autopilot 集群获取容器级CPU/内存监控指标方案
Autopilot 禁止部署node_exporter是该集群模式的默认安全限制——节点由Google全托管,用户不持有节点特权操作权限,实际上完全不需要依赖node_exporter就能拿到完整的容器级资源指标,以下是生产环境验证过的可行方案:
方案1:直接采集Kubelet内置cAdvisor指标(通用无依赖)
- kubelet原生内置cAdvisor组件,已经默认采集了节点上所有容器的CPU、内存、磁盘、网络等全量运行指标,数据维度完全覆盖node_exporter提供的容器级资源监控能力,Autopilot默认开放kubelet指标的API Server代理访问通道,不需要特权权限即可采集
- 只需要给Prometheus使用的ServiceAccount绑定正确的RBAC权限(节点、Pod指标读取权限),不需要部署任何DaemonSet类采集组件
- 采集配置参考:
scrape_configs: - job_name: 'cadvisor' kubernetes_sd_configs: - role: node scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token relabel_configs: - target_label: __address__ replacement: kubernetes.default.svc:443 - source_labels: [__meta_kubernetes_node_name] regex: (.+) target_label: __metrics_path__ replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor # 过滤Pause容器等无效指标 - source_labels: [container] regex: "POD" action: drop
- 核心常用指标:
- 容器CPU累计使用量:
container_cpu_usage_seconds_total - 容器内存实际工作集占用:
container_memory_working_set_bytes - 容器网络入/出流量:
container_network_receive_bytes_total、container_network_transmit_bytes_total - 容器磁盘IO耗时:
container_fs_io_time_seconds_total
- 容器CPU累计使用量:
方案2:对接GKE托管Prometheus服务(运维成本最低)
- Autopilot默认集成Google Cloud托管的Prometheus采集能力,集群创建后默认开启容器级基础指标采集,不需要自行部署、维护任何采集组件,直接用PromQL即可查询CPU、内存等所有容器指标
- 如果已经有自建的Prometheus实例,可以直接配置remote_read对接托管服务的查询接口,不需要重复在集群内做采集配置。
方案3:搭配kube-state-metrics补全业务维度
- 如果需要结合工作负载元数据计算资源使用率、配额占比等衍生指标,可以在集群内部署标准的kube-state-metrics组件,该组件不需要特权权限,Autopilot完全兼容
- 将cAdvisor采集的实时运行指标,和kube-state-metrics输出的
kube_pod_container_resource_requests、kube_pod_container_resource_limits等配额指标做关联,即可得到容器CPU/内存使用率相对于request/limit的占比数据。
避坑提示:不要尝试用特权模式部署任何节点类采集组件,Autopilot的安全策略会直接拦截这类DaemonSet的调度,所有需要节点特权的采集方案在Autopilot下都不可行。
内容的提问来源于stack exchange,提问作者Alan Cabrera
相关产品推荐
相关产品推荐

