使用Prometheus-Operator搭建监控集群


准备

下载配置清单

git clone https://github.com/prometheus-operator/kube-prometheus

根据你K8S版本,git checkout到匹配的分支

修改service

修改manifests/prometheus-service.yaml,将service类型改成nodeport,不改的话默认是clusterIP类型,集群外无法访问

同样修改manifests/grafana-service.yaml:

找到grafana-networkPolicy.yamlprometheus-networkPolicy.yaml,可以考虑删除这两个文件。

我在这里踩了一个坑:由于我用的是云服务器,用公网ip一直无法访问nodeport暴露的grafana和prometheus,最后发现是这两个文件中的网络策略限制了。如果不是云服务器应该就没这个问题。

修改存储

Grafana和Prometheus默认未持久化存储,重启pod数据就丢失了。

修改prometheus-prometheus.yaml,在spec下增加pvc:

spec:
  storage:
    volumeClaimTemplate:
      spec:
        storageClassName: local-path
        resources:
          requests:
            storage: 100Gi

其中local-path是我创建的一个本地存储的storageClass,具体可以参考使用local-path-provisioner动态创建本地磁盘pv

Grafana是deployment方式部署的,无法像Prometheus那样直接添加pvc,需要我们手动创建,我们把它放在manifests/setup目录下

setup/grafana-pvc.yaml:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: grafana
  namespace: monitoring
spec:
  storageClassName: local-path
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

修改grafana-deployment.yaml,找到grafana-storage,将emptyDir改成如下内容:

修改权限

这是一个坑,prometheus-clusterRole.yaml中默认给的权限不足,导致只能无法获取pod列表,某些场景下会有问题。

例如我在部署kafka集群时,使用pod-monitor方式让prometheus自动发现kafka要监控的一些pod,但是prometheus没有list pods权限,就无法监控了。

修改完如下:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    app.kubernetes.io/component: prometheus
    app.kubernetes.io/instance: k8s
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 2.37.0
  name: prometheus-k8s
rules:
- apiGroups:
  - ""
  resources: # 这里要改
  - nodes/metrics
  - services
  - endpoints
  - pods
  verbs: # 这里要改
  - get
  - list
  - watch
- nonResourceURLs:
  - /metrics
  verbs:
  - get

安装

# 安装
kubectl apply --server-side -f manifests/setup

# 等待上一步自定义的资源都创建完成
until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done

# 启动相关组件
kubectl apply -f manifests/

启停服务

# 启动服务
kubectl apply -f manifests/

# 停止服务
kubectl delete -f manifests/
文章作者: 周君
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 周君 !
评论