如何在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集成的托管服务:
- 启用托管Prometheus API:
gcloud services enable anthos.googleapis.com
- 为GKE Autopilot集群启用托管Prometheus集成:
gcloud container clusters update <集群名称> --region <集群区域> --enable-managed-prometheus
启用后,托管Prometheus会自动抓取GKE集群的Pod/容器CPU、内存等指标,可通过Cloud Monitoring控制台查看,或配置Grafana连接到托管Prometheus的端点进行自定义查询。
内容的提问来源于stack exchange,提问作者alonana
相关产品推荐
相关产品推荐

