请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册
搜索

kube-prometheus 使用持久存储

[复制链接]
4960 abc 发表于 2020-12-2 17:59:48
  1. kube-prometheus使用持久存储
  2. prometheus operator部署参考:
  3. https://blog.csdn.net/networken/article/details/85620793
  4. 持久存储配置参考:
  5. https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/storage.md

  6. prometheus默认使用empty-dir存储数据,pod迁移或重启监控数据将丢失,下面以nfs和local pv为例,持久化prometheus数据。

  7. 使用nfs存储
  8. nfs server及动态提供存储参考:
  9. https://blog.csdn.net/networken/article/details/86697018

  10. 下面是在部署kube-prometheus之前,修改官方manifests下的prometheus-prometheus.yaml内容,只在最后增加storage配置即可,注意指定storageClassName需要提前准备好。

  11. # cat manifests/prometheus-prometheus.yaml
  12. apiVersion: monitoring.coreos.com/v1
  13. kind: Prometheus
  14. metadata:
  15.   labels:
  16.     prometheus: k8s
  17.   name: k8s
  18.   namespace: monitoring
  19. spec:
  20.   alerting:
  21.     alertmanagers:
  22.     - name: alertmanager-main
  23.       namespace: monitoring
  24.       port: web
  25.   image: willdockerhub/prometheus:v2.15.2
  26.   nodeSelector:
  27.     kubernetes.io/os: linux
  28.   podMonitorNamespaceSelector: {}
  29.   podMonitorSelector: {}
  30.   replicas: 2
  31.   resources:
  32.     requests:
  33.       memory: 400Mi
  34.   ruleSelector:
  35.     matchLabels:
  36.       prometheus: k8s
  37.       role: alert-rules
  38.   securityContext:
  39.     fsGroup: 2000
  40.     runAsNonRoot: true
  41.     runAsUser: 1000
  42.   serviceAccountName: prometheus-k8s
  43.   serviceMonitorNamespaceSelector: {}
  44.   serviceMonitorSelector: {}
  45.   version: v2.15.2
  46.   storage:
  47.     volumeClaimTemplate:
  48.       spec:
  49.         storageClassName: nfs-client
  50.         resources:
  51.           requests:
  52.             storage: 40Gi
  53. 修改后按照官方部署方式部署prometheus即可,部署完成后可以看到创建的pv和pvc:

  54. 查看绑定的pv和pvc

  55. [root@master01 ~]# kubectl -n monitoring get pvc
  56. NAME                                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
  57. prometheus-k8s-db-prometheus-k8s-0   Bound    pvc-a8b091d5-3929-4a29-b89f-fe47022aee55   40Gi       RWO            nfs-client     9h
  58. prometheus-k8s-db-prometheus-k8s-1   Bound    pvc-1276a939-7d5d-43b9-ade9-ae0ef4108ecc   40Gi       RWO            nfs-client     9h

  59. [root@master01 ~]# kubectl -n monitoring get pv
  60. NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                           STORAGECLASS   REASON   AGE
  61. pvc-1276a939-7d5d-43b9-ade9-ae0ef4108ecc   40Gi       RWO            Delete           Bound    monitoring/prometheus-k8s-db-prometheus-k8s-1   nfs-client              9h
  62. pvc-a8b091d5-3929-4a29-b89f-fe47022aee55   40Gi       RWO            Delete           Bound    monitoring/prometheus-k8s-db-prometheus-k8s-0   nfs-client              9h
  63. [root@master01 ~]#
  64. 删除pvc后保留pv需要更改pv回收策略为Retain:

  65. kubectl patch pv <your-pv-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
  66. 使用local pv
  67. 创建storageclass yaml文件

  68. cat > promethues-sc.yaml <kind: StorageClass
  69. apiVersion: storage.k8s.io/v1
  70. metadata:
  71.   name: local-storage
  72. provisioner: kubernetes.io/no-provisioner
  73. volumeBindingMode: WaitForFirstConsumer
  74. EOF
  75. 创建storage class

  76. kubectl apply -f prometheus-sc.yaml
  77. 定义prometheus配置,同样修改 manifests/prometheus-prometheus.yaml文件,然后按照正常流程部署kube-prometheus即可。

  78. # cat manifests/prometheus-prometheus.yaml
  79. apiVersion: monitoring.coreos.com/v1
  80. kind: Prometheus
  81. metadata:
  82.   labels:
  83.     prometheus: k8s
  84.   name: k8s
  85.   namespace: monitoring
  86. spec:
  87.   alerting:
  88.     alertmanagers:
  89.     - name: alertmanager-main
  90.       namespace: monitoring
  91.       port: web
  92.   image: willdockerhub/prometheus:v2.15.2
  93.   nodeSelector:
  94.     kubernetes.io/os: linux
  95.   podMonitorNamespaceSelector: {}
  96.   podMonitorSelector: {}
  97.   replicas: 2
  98.   resources:
  99.     requests:
  100.       memory: 400Mi
  101.   ruleSelector:
  102.     matchLabels:
  103.       prometheus: k8s
  104.       role: alert-rules
  105.   securityContext:
  106.     fsGroup: 2000
  107.     runAsNonRoot: true
  108.     runAsUser: 1000
  109.   serviceAccountName: prometheus-k8s
  110.   serviceMonitorNamespaceSelector: {}
  111.   serviceMonitorSelector: {}
  112.   version: v2.15.2
  113.   storage:
  114.     volumeClaimTemplate:
  115.       spec:
  116.         selector:
  117.           matchLabels:
  118.             app: prometheus
  119.         storageClassName: local-storage
  120.         resources:
  121.           requests:
  122.             storage: 20Gi

  123. ---
  124. apiVersion: v1
  125. kind: PersistentVolume
  126. metadata:
  127.   name: prom-local-pv-0
  128.   labels:
  129.     app: prometheus  
  130. spec:
  131.   capacity:
  132.     storage: 20Gi
  133.   volumeMode: Filesystem
  134.   accessModes:
  135.   - ReadWriteOnce
  136.   persistentVolumeReclaimPolicy: Retain
  137.   storageClassName: local-storage
  138.   local:
  139.     path: /data/prometheus/data
  140.   nodeAffinity:
  141.     required:
  142.       nodeSelectorTerms:
  143.       - matchExpressions:
  144.         - key: kubernetes.io/hostname
  145.           operator: In
  146.           values:
  147.           - node01               
  148. ---
  149. apiVersion: v1
  150. kind: PersistentVolume
  151. metadata:
  152.   name: prom-local-pv-1
  153.   labels:
  154.     app: prometheus  
  155. spec:
  156.   capacity:
  157.     storage: 20Gi
  158.   volumeMode: Filesystem
  159.   accessModes:
  160.   - ReadWriteOnce
  161.   persistentVolumeReclaimPolicy: Retain
  162.   storageClassName: local-storage
  163.   local:
  164.     path: /data/prometheus/data
  165.   nodeAffinity:
  166.     required:
  167.       nodeSelectorTerms:
  168.       - matchExpressions:
  169.         - key: kubernetes.io/hostname
  170.           operator: In
  171.           values:
  172.           - node02
  173. 手动在pv指定的节点中创建挂载目录

  174. mkdir -p /data/prometheus/data
  175. 部署完成后查看创建的pvc和pv

  176. [root@master01 ~]# kubectl -n monitoring get pvc
  177. NAME                                 STATUS   VOLUME            CAPACITY   ACCESS MODES   STORAGECLASS    AGE
  178. prometheus-k8s-db-prometheus-k8s-0   Bound    prom-local-pv-1   20Gi       RWO            local-storage   42m
  179. prometheus-k8s-db-prometheus-k8s-1   Bound    prom-local-pv-0   20Gi       RWO            local-storage   42m

  180. [root@master01 ~]# kubectl get pv
  181. NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                                           STORAGECLASS    REASON   AGE
  182. prom-local-pv-0                            20Gi       RWO            Retain           Bound      monitoring/prometheus-k8s-db-prometheus-k8s-1   local-storage            42m
  183. prom-local-pv-1                            20Gi       RWO            Retain           Bound      monitoring/prometheus-k8s-db-prometheus-k8s-0   local-storage            42m




复制代码
https://www.it610.com/article/1288641746128936960.htmhttps://blog.csdn.net/networken/article/details/106381712




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表