天天看点

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页面截图