本文最后编辑于 前,其中的内容可能需要更新。
部署方案以及组件
当前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=~".*"