天天看點

K3S環境下接入Prometheus,grafana,等監控套件背景Prometheus的安裝kube-state-metrics的安裝K3S自帶的CADVISORnode-exportor的安裝postgres-exportorGrafana導入dashboard頁面截圖

背景

因為正常的監控都是用K8S做的,而K3S上的監控方案少之又少,如果直接用rancher上的prometheus監控,會消耗至少2G的記憶體,于是我們就自己做了K3S和pg資料庫的監控,并且通過我們自己做的監控,可以減少一些不必要的性能開銷。主要監控容器資源消耗,主控端資源消耗,pg資料庫資源消耗

K3S環境下接入Prometheus,grafana,等監控套件背景Prometheus的安裝kube-state-metrics的安裝K3S自帶的CADVISORnode-exportor的安裝postgres-exportorGrafana導入dashboard頁面截圖

這個是資源使用情況,大約會用掉600M記憶體和100MCPU

user@user:/$ kubectl top pod -n kube-ops      
NAME                                            CPU(cores)   MEMORY(bytes)      
grafana-0                                       1m           47Mi      
kube-state-metrics-594fb7bc84-5mg6g             3m           10Mi      
node-exportor-prometheus-node-exporter-sznls    31m          8Mi      
node-exportor-prometheus-node-exporter-tx7rm    13m          7Mi      
prometheus-0                                    46m          565Mi      
prometheus-postgres-exporter-6c858f47d4-dj9hj   13m          6Mi      
prometheus監控元件參考helm chart https://github.com/prometheus-community/helm-charts/tree/main/charts 我魔改的github連接配接 https://github.com/lizhenwei/k3s-prometheus

Prometheus的安裝

1.建立一個命名空間kube-ops,把監控用的東西都放在這個命名裡面。

2.使用我魔改的chart進行安裝,預設版本是v2.26.0,預設啟用上圖提到的

cadvisor,kube_state_metrics,node_exportor,postgres_exporter

kubectl create ns kube-ops

helm install -n kube-ops prometheus lizhenwei-prometheus

如果要關閉其中的某個監控項,安裝時參考添加變量 –set node_exportor.enable=false,

prometheus的資料會用預設的storageClass生成PVC,如果沒有預設的,參考手動設定nfs存儲 –set persistence.storageClass=nfs-client

安裝成功後,因為我是nodeport暴露出來的,是以可以通過浏覽器去檢查一下配置,例如這裡我們暴露出來是32331端口可以通路,例如:

$ kubectl get svc -n kube-ops      
NAME                           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE      
prometheus                     NodePort    10.43.178.128   <none>        9090:32331/TCP      2d4h      

通路http://master機器IP:32331/targets,可以看到prometheus自己已經是成功起來了,我們也可以去http://master機器IP:32331/config頁面看看配置項是否都正确

K3S環境下接入Prometheus,grafana,等監控套件背景Prometheus的安裝kube-state-metrics的安裝K3S自帶的CADVISORnode-exportor的安裝postgres-exportorGrafana導入dashboard頁面截圖

要啟用或停用某些監控功能,可以修改lizhenwei-prometheus/valuse.yaml裡的配置,修改成true或false

kube-state-metrics的安裝

kube-state-metrics是用來收集k8s叢集的CPU,記憶體等資訊的收集器,這裡我用的是v1.9.7版本。

使用我github上的helm進行安裝:

helm install -n kube-ops prometheus lizhenwei-kube-state-metrics

要想驗證部署kube-state-metrics之後,是否能成功使用,我們可以看prometheus的target頁面是不是顯示kube-state-metrics(X/X up) x為機器節點數量。

然後我們去graph頁面看看,http://master機器IP:32331/graph。可以參考官網給的promql文檔,輸入幾個語句試試

PromQL參考連結 https://github.com/kubernetes/kube-state-metrics/tree/master/docs

例如輸入kube_configmap_info,點選execute會傳回一些結果,如下圖

K3S環境下接入Prometheus,grafana,等監控套件背景Prometheus的安裝kube-state-metrics的安裝K3S自帶的CADVISORnode-exportor的安裝postgres-exportorGrafana導入dashboard頁面截圖

K3S自帶的CADVISOR

K3S自帶kubelet ,而cadvisor已經內建在kubelet裡了,prometheus可以通過配置找到本地安裝的cadvisor,例如下列代碼:

- job_name: 'cadvisor'
  scheme: https
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  kubernetes_sd_configs:
  - role: node
  relabel_configs:
  - action: labelmap
    regex: __meta_kubernetes_node_label_(.+)
  - target_label: __address__
    replacement: kubernetes.default.svc:443
  - source_labels: [__meta_kubernetes_node_name]
    regex: (.+)
    target_label: __metrics_path__
    replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor      

接入prometheus的時候,可以根據以下連結,檢視PromQL語句

https://github.com/google/cadvisor/blob/master/docs/storage/prometheus.md

node-exportor的安裝

這個使用官方網站給的一個公共庫就可以了

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install node-exportor prometheus-community/prometheus-node-exporter      
grafana參考連結 https://grafana.com/grafana/dashboards/1860

postgres-exportor

下載下傳代碼

https://github.com/prometheus-community/helm-charts/tree/main/charts/prometheus-postgres-exporter

到機器上

修改valuse.yaml裡的queries裡的參數,在最後面加上

pg_stat_activity:
      query: |
        SELECT
          datname,
          SUM(EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - state_change))::bigint)::float AS process_idle_seconds_sum,
          COUNT(*) AS process_idle_seconds_count
        FROM pg_stat_activity
        WHERE state = 'idle'
        GROUP BY datname
      metrics:
        - datname:
            usage: "LABEL"
            description: "datname"
        - process_idle_seconds:
            usage: "COUNTER"
            description: "Idle time of server processes"
        - process_idle_seconds_sum:
            usage: "GUAGE"
            description: "sum of Idle time of server processes"      

在valuse.yaml檔案的config.datasource部分添加我們的postgres超管使用者資訊。

helm安裝語句

helm install -n kube-ops prometheus-postgres-exporter prometheus-postgres-exporter

Grafana導入dashboard

可以參考這位大神的github連結

https://github.com/starsliao/Prometheus

頁面截圖

K3S環境下接入Prometheus,grafana,等監控套件背景Prometheus的安裝kube-state-metrics的安裝K3S自帶的CADVISORnode-exportor的安裝postgres-exportorGrafana導入dashboard頁面截圖
K3S環境下接入Prometheus,grafana,等監控套件背景Prometheus的安裝kube-state-metrics的安裝K3S自帶的CADVISORnode-exportor的安裝postgres-exportorGrafana導入dashboard頁面截圖
K3S環境下接入Prometheus,grafana,等監控套件背景Prometheus的安裝kube-state-metrics的安裝K3S自帶的CADVISORnode-exportor的安裝postgres-exportorGrafana導入dashboard頁面截圖