Prometheus 监控 Kubernetes
Prometheus 是一个开源的系统监控和警报工具集,用于记录实时指标数据和生成警报。它广泛应用于云原生环境中,尤其是在 Kubernetes 集群中。本文将介绍如何使用 Prometheus 来监控 Kubernetes 集群,并提供相关的代码示例。
什么是 Prometheus?
Prometheus 是一个基于时间序列的监控系统,最初由 SoundCloud 在 2012 年开发,现已成为 CNCF(Cloud Native Computing Foundation)的毕业项目之一。它采用了多维数据模型,支持通过 PromQL(Prometheus Query Language)查询和分析指标数据。
Prometheus 主要有以下特点:
- 多维数据模型:指标数据由键值对标识,可以根据多个维度进行查询和聚合。
- 灵活的查询语言:PromQL 提供了强大的查询语言,支持常见的聚合、过滤和计算操作。
- 可视化和警报:Prometheus 提供了内置的仪表盘和警报功能,方便用户监控和管理指标数据。
- 可扩展性:Prometheus 支持通过服务发现、自动发现和动态配置等机制来实现自动化的监控。
Prometheus 监控 Kubernetes
在 Kubernetes 集群中,Prometheus 可以通过以下步骤来监控各个组件的指标数据:
- 部署 Prometheus:首先需要在 Kubernetes 集群中部署 Prometheus。可以使用 Helm Chart 来简化部署过程。以下是一个示例的 Helm Chart 配置文件:
apiVersion: v2
name: prometheus
namespace: monitoring
spec:
replicas: 1
serviceAccountName: prometheus
securityContext:
runAsUser: 1000
resources:
requests:
memory: 400Mi
cpu: 200m
limits:
memory: 800Mi
cpu: 400m
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- prometheus
topologyKey: kubernetes.io/hostname
service:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9090"
type: NodePort
ports:
- name: web
port: 9090
targetPort: 9090
nodePort: 30000
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: "nginx"
hosts:
- prometheus.example.com
tls:
- secretName: prometheus-tls
hosts:
- prometheus.example.com
- 配置 Prometheus 监控目标:Prometheus 需要知道要监控的目标,例如 Kubernetes 的 API Server、kubelet、kube-proxy 等。可以通过配置
prometheus.yml
文件来定义监控目标。以下是一个示例的prometheus.yml
文件:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'kubernetes-apiservers'
scheme: https
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
kubernetes_sd_configs:
- role: endpoints
api_server:
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
relabel_configs:
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
action: keep
regex: default;kubernetes;https
- 部署监控 Exporter:Prometheus 需要通过 Exporter 来获取各个组件的指标数据。Kubernetes 提供了一些官方的 Exporter,例如 kube-state-metrics、node-exporter 等。可以使用 Helm Chart 来部署这些 Exporter。以下是一个示例的 kube-state-metrics 的 Helm Chart 配置文件:
apiVersion: v2
name: kube-state-metrics
namespace: monitoring