本文最后编辑于  前,其中的内容可能需要更新。
                
                
                    
                
                
                部署方案以及组件
当前helm版本:3.6.3
Prometheus charts 版本: 14.11.0
grafana charts 版本:6.17.2
此处采用helm部署,helm提供的组件如下:
- alertmanager: 负责接收并处理来自Prometheus Server(也可以是其它的客户端程序)的告警信息。Alertmanager可以对这些告警信息进行进一步的处理,比如当接收到大量重复告警时能够消除重复的告警信息,同时对告警信息进行分组并且路由到正确的通知方,Prometheus内置了对邮件,Slack等多种通知方式的支持,同时还支持与Webhook的集成,以支持更多定制化的场景.
 
- nodeExporter: Node Exporter 是 Prometheus 官方发布的,用于采集节点的系统信息,比如 CPU,内存,磁盘和网络等信息。
 
- pushgateway: Prometheus Pushgateway 允许将时间序列从短暂的服务级别批处理作业推送到 Prometheus 可以采集的中间作业。结合 Prometheus 的基于文本的简单展示格式,即使没有客户端库,也可以轻松集成,甚至编写 shell 脚本。
 
- server: prometheus 主程序
 
从helm仓库下载helm chart
1 2 3 4
   | helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo add kube-state-metrics https://kubernetes.github.io/kube-state-metrics helm repo update helm pull --untar prometheus-community/prometheus
   | 
 
打开prometheus文件夹下的values.yaml,修改以下部分:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
   | alertmanager:       ingress:   	enabled: true															          	annotations:             												       kubernetes.io/ingress.class: traefik					        traefik.ingress.kubernetes.io/affinity: "true"       traefik.ingress.kubernetes.io/router.entrypoints: web                traefik.ingress.kubernetes.io/session-cookie-name: "route"        traefik.ingress.kubernetes.io/load-balancer-method: drr     hosts:       - alertmanager.local                        	    persistentVolume:																			     size: 1Ti																              storageClass: "aliyun-nas-retain" 							    replicaCount: 2															          statefulSet:     enabled: true                                       resources:      limits:																	                cpu: 500m       memory: 2048Mi     requests:       cpu: 200m       memory: 1024Mi server:   ingress:     enabled: true                                       	annotations:             													       kubernetes.io/ingress.class: traefik					        traefik.ingress.kubernetes.io/affinity: "true"         traefik.ingress.kubernetes.io/router.entrypoints: web              traefik.ingress.kubernetes.io/session-cookie-name: "route"        traefik.ingress.kubernetes.io/load-balancer-method: drr     hosts:        - prometheus.local                                persistentVolume:     size: 1Ti																              storageClass: "aliyun-nas-retain"								    replicaCount: 2															          statefulSet:																            enabled: true   retention: "30d"															      pushgateway:     ingress:     annotations:        kubernetes.io/ingress.class: traefik					        traefik.ingress.kubernetes.io/affinity: "true"             traefik.ingress.kubernetes.io/router.entrypoints: web          traefik.ingress.kubernetes.io/session-cookie-name: "route"        traefik.ingress.kubernetes.io/load-balancer-method: drr     hosts:        - pushgateway.local                               persistentVolume:                                       size: 1Ti     storageClass: "aliyun-nas-retain"
   | 
 
修改kube-metrics镜像
由于k8s.gcr.io在国内无法访问,所以无法使用原有的所有镜像,据说阿里云提供gcr.io镜像仓库的镜像,但是经过实际测试,缺少大量镜像,目前的解决方案是使用bitnami/kube-state-metrics镜像替代原有的镜像。
修改prometheus/charts/kube-state-metrics/values.yaml
1 2 3 4
   | prometheusScrape: true image:   repository: bitnami/kube-state-metrics                tag: 2.2.0  								                       
   | 
 
修改prometheus.yaml的内容(非必要)
由于准备采用1 K8S for Prometheus Dashboard 20211010 编号 13105的grafana模板来展示数据。所以需要对job相应的修改,如果不准备采用此模板,可不做此项
关于节点名称的标签,因为cadvisor是使用instance,而kube-state-metrics是使用node;这样会导致grafana节点信息表格中,没有统一的字段来连接各个查询,所以需要在prometheus.yaml中增加以下内容来给cadvisor的指标复制一个node标签。
这边直接在values.yaml修改以下部分:
1 2 3 4 5 6 7 8 9 10 11
   | serverFiles:   prometheus.yml:     scrape_configs:       - job_name: 'kubernetes-nodes-cadvisor'         metric_relabel_configs:                                 - source_labels: [instance]             separator: ;             regex: (.+)             target_label: node             replacement: $1             action: replace
   | 
 
部署 prometheus 到集群
简单执行:
1 2
   | kubectl create ns prometheus helm install prometheus prometheus -n prometheus
   | 
 
部署grafana 作为dashboard
拉取helm charts
简单执行:
1 2 3
   | helm repo add grafana https://grafana.github.io/helm-charts helm repo update helm pull --untar grafana/grafana
   | 
 
修改grafana/values.yaml,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
   | ingress:   enabled: true   annotations:      kubernetes.io/ingress.class: traefik				          traefik.ingress.kubernetes.io/router.entrypoints: web   hosts:     - grafana.local           persistence:																		        type: pvc   enabled: true   storageClassName: "aliyun-nas-retain"   accessModes:     - ReadWriteOnce   size: 10Gi
   | 
 
添加grafana监控dashboard
可在此处找所需的监控模板,这边使用13105
添加数据源
填写prometheus的service的地址和端口
导入dashboard
输入13105  点击load
点击左侧面板的Search Dashboards
可找到刚才的dashboard
一些问题
目前使用他直接提供的dashboard似乎会存在某些问题
如安装prometheus时需添加node的label
容器网络显示也会出现问题,会出现nodata的情况
解决方案:
编辑nodata的这部分带宽数据
修改name = ~"^k8s_.*" 为name=~".*"