一、简介

官方文档:https://prometheus-operator.dev/

kube-prometheus 是一整套监控解决方案,它使用 Prometheus 采集集群指标,Grafana 做展示,集成了很多模板。

Prometheus - kube prometheus_prometheus

Prometheus Operator 在 Kubernetes 中引入了自定义资源,以声明 Prometheus 和 Alertmanager 集群以及 Prometheus 配置的理想状态。

  • Prometheus
  • ServiceMonitor
  • PodMonitor

Prometheus 资源以声明方式描述 Prometheus 部署的所需状态,而 ServiceMonitor 和 PodMonitor 资源描述 Prometheus 要监视的目标。


二、部署

2.1 下载

在 github 上下载项目代码。

github 地址:https://github.com/prometheus-operator/kube-prometheus

2.2 修改配置

部分镜像在国内无法下载,自行下载后修改 yaml 文件。

# 进入项目的 manifests 文件夹
cd kube-prometheus-0.12.0/manifests/

# 查询哪些文件有需要修改镜像地址的 yaml 文件
grep -r 'image: ' *

kube-prometheus 项目中,dashboard 默认时区是 UTC,修改成UTC+8

sed -i 's/UTC/UTC+8/g'  grafana-dashboardDefinitions.yaml
sed -i 's/utc/utc+8/g'  grafana-dashboardDefinitions.yaml

sed -i 's/UTC/UTC+8/g'  grafana-config.yaml

2.3 部署

# 部署自定义 CRD
kubectl create -f setup/

# 部署服务
kubectl apply -f .

注:在 release-0.11 版本之后新增了 NetworkPolicy,默认是允许自己访问,修改一下默认的规则或者以直接删除

2.4 创建ingress

这里使用 ingress-nginx,同时 NetworkPolicy 中修改 ingress 方向,增加允许 ingress-nginx 访问权限。

# 修改 grafana-networkPolicy.yaml,增加允许来自命名空间 ingress-nginx 的访问
# 同理修改 alertmanager-networkPolicy.yaml、prometheus-networkPolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  labels:
    app.kubernetes.io/component: grafana
    app.kubernetes.io/name: grafana
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 9.3.2
  name: grafana
  namespace: monitoring
spec:
  egress:
    - {}
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: ingress-nginx
        - podSelector:
            matchLabels:
              app.kubernetes.io/name: prometheus
      ports:
        - port: 3000
          protocol: TCP
  podSelector:
    matchLabels:
      app.kubernetes.io/component: grafana
      app.kubernetes.io/name: grafana
      app.kubernetes.io/part-of: kube-prometheus
  policyTypes:
    - Egress
    - Ingress

创建 ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: monitoring
  name: prometheus-ingress
spec:
  ingressClassName: nginx
  rules:
  - host: grafana.xxx.top
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: grafana
            port:
              number: 3000
  - host: prometheus.xxx.top
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: prometheus-k8s
            port:
              number: 9090
  - host: alertmanager.xxx.top
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: alertmanager-main
            port:
              number: 9093

到此可以访问 grafana 等 web 界面。