找回密码
 立即注册
首页 业界区 业界 基于Helm部署kube-prometheus-stack

基于Helm部署kube-prometheus-stack

盛天欣 4 天前
概述

GitHub地址:https://github.com/prometheus-operator/prometheus-operator
Helm仓库:https://prometheus-community.github.io/helm-charts
安装prometheus-operator前置条件:

确保你有一个k8s集群
安装k8s集群可参考:使用sealos快速搭建kubernetes集群!!!
确保你安装了Helm
安装Helm可参考:安装Helm
实操

创建SC

我这里以NFS作为存储
配置NFS参考这篇文章:https://www.cnblogs.com/huangSir-devops/p/18802386
创建SC参考:https://www.cnblogs.com/huangSir-devops/p/18871414#_label4_2
创建grafana的存储
  1. # 配置NFS
  2. [root@master01 ~/volumes]# mkdir -p /data/nfs/grafana
  3. [root@master01 ~/volumes]# echo '/data/nfs/grafana 10.0.0.0/24(rw,sync,no_root_squash,no_subtree_check)' >> /etc/exports
  4. [root@master ~/volumes]# exportfs -ra
  5. # 定义资源清单
  6. [root@master01 ~/volumes]# cat grafana-sc.yaml
  7. apiVersion: storage.k8s.io/v1
  8. kind: StorageClass
  9. metadata:
  10.   name: grafana-sc  # StorageClass名称,PVC通过该名称引用此存储类
  11. provisioner: nfs.csi.k8s.io  # 指定使用NFS CSI驱动作为存储供给器
  12. parameters:  # 传递给NFS CSI驱动的参数
  13.   server: 10.0.0.30  # NFS服务器的IP地址
  14.   share: /data/nfs/grafana  # NFS服务器上的共享目录路径
  15.   # csi.storage.k8s.io/provisioner-secret is only needed for providing mountOptions in DeleteVolume
  16.   # csi.storage.k8s.io/provisioner-secret-name: "mount-options"
  17.   # csi.storage.k8s.io/provisioner-secret-namespace: "default"
  18. reclaimPolicy: Retain  # 回收策略:当PVC被删除时,PV保留不删除
  19. volumeBindingMode: Immediate  # 卷绑定模式:立即绑定,不需要等待Pod调度
  20. allowVolumeExpansion: true  # 允许卷扩容:支持通过修改PVC请求更大容量
  21. [root@master ~]# kubectl apply -f grafana-sc.yaml
  22. [root@master ~]# kubectl get sc
  23. NAME         PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
  24. grafana-sc   nfs.csi.k8s.io   Retain          Immediate           true                   3m44s
复制代码
创建Prometheus的存储
  1. # 配置NFS
  2. [root@master01 ~/volumes]# mkdir -p /data/nfs/prometheus
  3. [root@master01 ~/volumes]# echo '/data/nfs/prometheus 10.0.0.0/24(rw,sync,no_root_squash,no_subtree_check)' >> /etc/exports
  4. [root@master ~/volumes]# exportfs -ra
  5. [root@master01 ~/volumes]# cat prometheus-sc.yaml
  6. apiVersion: storage.k8s.io/v1
  7. kind: StorageClass
  8. metadata:
  9.   name: prometheus-sc  # StorageClass名称,PVC通过该名称引用此存储类
  10. provisioner: nfs.csi.k8s.io  # 指定使用NFS CSI驱动作为存储供给器
  11. parameters:  # 传递给NFS CSI驱动的参数
  12.   server: 10.0.0.30  # NFS服务器的IP地址
  13.   share: /data/nfs/prometheus  # NFS服务器上的共享目录路径
  14.   # csi.storage.k8s.io/provisioner-secret is only needed for providing mountOptions in DeleteVolume
  15.   # csi.storage.k8s.io/provisioner-secret-name: "mount-options"
  16.   # csi.storage.k8s.io/provisioner-secret-namespace: "default"
  17. reclaimPolicy: Retain  # 回收策略:当PVC被删除时,PV保留不删除
  18. volumeBindingMode: Immediate  # 卷绑定模式:立即绑定,不需要等待Pod调度
  19. allowVolumeExpansion: true  # 允许卷扩容:支持通过修改PVC请求更大容量
  20. [root@master ~/volumes]# kubectl apply -f prometheus-sc.yaml
  21. storageclass.storage.k8s.io/prometheus-sc created
  22. [root@master ~/volumes]# kubectl get sc
  23. NAME            PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
  24. grafana-sc      nfs.csi.k8s.io   Retain          Immediate           true                   3h40m
  25. nfs-csi         nfs.csi.k8s.io   Delete          Immediate           true                   175m
  26. prometheus-sc   nfs.csi.k8s.io   Retain          Immediate           true                   4s
复制代码
配置operator

添加仓库
  1. # 添加社区版仓库
  2. [root@master ~]# helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
  3. [root@master ~]# helm repo update
  4. [root@master ~]# helm pull helm pull prometheus/kube-prometheus-stack --version 73.2.0
  5. # 如果上面因为网络报错,可使用下面的
  6. [root@master ~]# wget https://github.com/prometheus-community/helm-charts/releases/download/kube-prometheus-stack-73.2.0/kube-prometheus-stack-73.2.0.tgz
复制代码
解压
  1. [root@master ~]# tar -xvf kube-prometheus-stack-73.2.0.tgz
  2. [root@master ~]# ll kube-prometheus-stack
  3. total 228
  4. drwxr-xr-x  4 root root   4096 Jun  7 15:27 ./
  5. drwx------ 31 root root   4096 Jun  7 15:27 ../
  6. -rw-r--r--  1 root root    458 Jun  6 01:22 .helmignore
  7. -rw-r--r--  1 root root    615 Jun  6 01:22 Chart.lock
  8. -rw-r--r--  1 root root   2571 Jun  6 01:22 Chart.yaml
  9. -rw-r--r--  1 root root  19869 Jun  6 01:22 README.md
  10. drwxr-xr-x  7 root root   4096 Jun  7 15:27 charts/
  11. drwxr-xr-x  8 root root   4096 Jun  7 15:27 templates/
  12. -rw-r--r--  1 root root 182959 Jun  6 01:22 values.yaml
复制代码
修改镜像源,防止镜像拉取失败
  1. [root@master ~/kube-prometheus-stack]# sed -i s#registry.k8s.io#k8s.m.daocloud.io#g values.yaml
  2. [root@master ~/kube-prometheus-stack]# sed -i s#quay.io#quay.m.daocloud.io#g values.yaml
  3. [root@master ~/kube-prometheus-stack]# sed -i s#docker.io#docker.m.daocloud.io#g values.yaml
  4. [root@master ~/kube-prometheus-stack]# sed -i s#registry.k8s.io#k8s.m.daocloud.io#g charts/kube-state-metrics/values.yaml
复制代码
配置Grafana
  1. [root@master ~]# vim ~/kube-prometheus-stack/charts/grafana/values.yaml
  2. # 修改service,改成NodePort访问
  3. 231 service:
  4. 232   enabled: true
  5. 233   type: NodePort
  6. 234   nodePort: 30030
  7. # 配置存储
  8. 417 persistence:
  9. 418   type: pvc
  10. 419   enabled: true
  11.        # sc的名称,和上面保持一致
  12. 420   storageClassName: grafana-sc
  13. 421   ## (Optional) Use this to bind the claim to an existing PersistentVolume (PV) by name.
  14. 422   volumeName: ""
  15. # 修改用户名密码 (可选)
  16. [root@master ~]# vim ~/kube-prometheus-stack/values.yaml
  17. 1287   adminUser: admin
  18. 1288   adminPassword: prom-operator
复制代码
配置Prometheus
  1. [root@master ~]# vim ~/kube-prometheus-stack/values.yaml
  2. 3371 prometheus:
  3. 3372   enabled: true
  4. # 修改service类型NodePort
  5. 3564    type: NodePort
  6. # 端口可选配置
  7. 3551     nodePort: 30090
  8. # 存储配置
  9. 4299     storageSpec:
  10. 4300     ## Using PersistentVolumeClaim
  11. 4301     ##
  12. 4302       volumeClaimTemplate:
  13. 4303         spec:
  14. 4304           storageClassName: prometheus-sc
  15. 4305           accessModes: ["ReadWriteOnce"]
  16. 4306           resources:
  17. 4307             requests:
  18. 4308               storage: 10Gi
复制代码
创建Realsese
  1. [root@master ~]# helm install prometheus kube-prometheus-stack --debug
  2. # 出现以下内容即代表成功
  3. NOTES:
  4. kube-prometheus-stack has been installed. Check its status by running:
  5.   kubectl --namespace default get pods -l "release=prometheus"
  6. Get Grafana 'admin' user password by running:
  7.   kubectl --namespace default get secrets prometheus-grafana -o jsonpath="{.data.admin-password}" | base64 -d ; echo
  8. Access Grafana local instance:
  9.   export POD_NAME=$(kubectl --namespace default get pod -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=prometheus" -oname)
  10.   kubectl --namespace default port-forward $POD_NAME 3000
  11. Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator.
复制代码
查看创建的资源
  1. # 查看Pod
  2. [root@master ~]# kubectl get po
  3. NAME                                                     READY   STATUS    RESTARTS   AGE
  4. alertmanager-prometheus-kube-prometheus-alertmanager-0   2/2     Running   0          70s
  5. prometheus-grafana-55cbbf54b7-lmhnd                      3/3     Running   0          70s
  6. prometheus-kube-prometheus-operator-847fd659bc-scp4w     1/1     Running   0          70s
  7. prometheus-kube-state-metrics-5fb66759db-nb242           1/1     Running   0          70s
  8. prometheus-prometheus-kube-prometheus-prometheus-0       2/2     Running   0          70s
  9. prometheus-prometheus-node-exporter-89xt7                1/1     Running   0          70s
  10. prometheus-prometheus-node-exporter-cn8s4                1/1     Running   0          70s
  11. prometheus-prometheus-node-exporter-llqgx                1/1     Running   0          70s
  12. # 查看svc
  13. [root@master ~]# kubectl get svc
  14. NAME                                      TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)                         AGE
  15. alertmanager-operated                     ClusterIP   None          <none>        9093/TCP,9094/TCP,9094/UDP      5m
  16. kubernetes                                ClusterIP   10.96.0.1     <none>        443/TCP                         5m
  17. prometheus-grafana                        NodePort    10.96.1.173   <none>        80:30030/TCP                    5m
  18. prometheus-kube-prometheus-alertmanager   ClusterIP   10.96.3.151   <none>        9093/TCP,8080/TCP               5m
  19. prometheus-kube-prometheus-operator       ClusterIP   10.96.2.62    <none>        443/TCP                         5m
  20. prometheus-kube-prometheus-prometheus     NodePort    10.96.0.114   <none>        9090:30090/TCP,8080:31659/TCP   5m
  21. prometheus-kube-state-metrics             ClusterIP   10.96.1.88    <none>        8080/TCP                        5m
  22. prometheus-operated                       ClusterIP   None          <none>        9090/TCP                        5m
  23. prometheus-prometheus-node-exporter       ClusterIP   10.96.0.191   <none>        9100/TCP                        5m
复制代码
访问测试

访问Grafana

http://10.0.0.30:30030/

  • 用户名:admin
  • 密码:prom-operator
用户名和密码是上面配置的
1.png

2.png

访问Prometheus

http://10.0.0.30:30090/targets
3.png

kube-prometheus-stack监控应用程序

kube-prometheus-stack通过PodMonitor和ServiceMonitor对象来监视示例应用程序的目标
参考这篇文章:https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/developer/getting-started.md
架构图
4.png

通过ServiceMonitor监控应用程序

示例:
  1. 省略,这块有时间补齐,可以先看官方文档
复制代码
通过PodMonitor监控应用程序

示例:
  1. 省略,这块有时间补齐,可以先看官方文档
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册