认识
官网:
文档:https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-prometheus-stack/README.md
仓库:https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack
在任何 Kubernetes 环境中,都可以使用 kube-prometheus-stack 工具栈,包括公共云,私有云和混合云。它主要用于监控 Kubernetes 集群的性能和健康状况,包括节点、服务、应用等的监控。同时,它也可用于业务指标的收集和分析,帮助开发者和运维人员更好地理解和优化应用。
kube-prometheus-stack 是一个 Kubernetes 的监控套装,包括 Prometheus,Alertmanager,Prometheus node-exporter,Grafana,kube-state-metrics 和 Prometheus Operator。这个堆栈为我们提供了一种在 Kubernetes 环境中部署和管理 Prometheus 和相关组件的有效方法。
The prometheus-community/kube-prometheus-stack helm chart provides a similar feature set to kube-prometheus)This chart is maintained by the Prometheus community)For more information, please see the chart’s readme.
该项目是 kube-prometheus 的 Helm Chart 版本,使得我们能够通过 Helm 来部署和管理。
组成
kube-prometheus-stack 主要由以下几个组件组成:
- Prometheus:提供度量收集和存储的功能。
- Alertmanager:处理由 Prometheus 生成的警报。
- Prometheus node-exporter:收集硬件和操作系统的度量标准。
- Grafana:用于可视化度量数据。
- kube-state-metrics:用于生成关于 kubernetes 对象状态的度量标准。
- Prometheus Operator:简化 Prometheus 和 Alertmanager 在 Kubernetes 中的部署和管理。
性质
其提供了完全自动化的部署,适应在 Kubernetes 环境中快速、容易地部署和管理监控系统。它还提供了高度可配置的警报和仪表板,可以根据你的需要定制。
此外,它还支持多种度量数据源,提供了高度灵活性。
nameOverride: “kps”
fullnameOverride: “kps”
提供 Grafana 的配置
其依赖 subChart grafana,所以能够使用 grafana 配置:
提供 kube-state-metrics 配置
针对该组件,其默认使用 registry.k8s.io 仓库,查看 chart 内部,得知修改 kube-state-metrics 镜像地址方法:
kube-state-metrics:
image:
registry: registry.devops.example.com/google_containers/registry.k8s.io
# 其相关的其他参数,参考:https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-state-metrics/values.yaml
提供 Prometheus 配置
prometheus.prometheusSpec.storageSpec:
How to apply external labels? · Issue #455 · prometheus-operator/prometheus-operator
prometheus.prometheusSpec.externalLabels 来增加额外的标签,例如向告警消息增加额外的标签,以进行区分来源;
针对 etcd 配置
[kube-prometheus-stack] KubeScheduler & Etcd & CubeController-Manager …
[prometheus-kube-stack] Target Kubelet 0/0 up and others are down · Issue #204
serviceMonitor/default/kube-prometheus-stack-kube-etcd detect …
部署 kube-prometheus-stack 组件,但是无法抓取 etcd 指标。
根据 [prometheus-kube-stack] Target Kubelet 0/0 up and others are down · Issue #204 页面,增加如下配置,依旧无法成功。
kubectl create secret generic etcd-client-cert \
--from-file=/etc/kubernetes/pki/etcd/ca.crt \
--from-file=/etc/kubernetes/pki/etcd/healthcheck-client.crt \
--from-file=/etc/kubernetes/pki/etcd/healthcheck-client.key
prometheus:
prometheusSpec:
secrets: ['etcd-client-cert']
kubeEtcd:
serviceMonitor:
scheme: https
insecureSkipVerify: false
serverName: localhost
caFile: /etc/prometheus/secrets/etcd-client-cert/ca.crt
certFile: /etc/prometheus/secrets/etcd-client-cert/healthcheck-client.crt
keyFile: /etc/prometheus/secrets/etcd-client-cert/healthcheck-client.key
具体问题具体分析,通过 Promethues Web UI 界面,我们发现其抓取 master-node-ip-address:2381 地址,但是 etcd –listen-metrics-urls=http://127.0.0.1:2381 地址,进而导致无法成功抓取。
解决方案,通过 kubeadm 命令,修改 etcd –listen-metrics-urls 参数,使其监听 0.0.0.0(或,节点地址)。
补充说明:部署 kube-prometheus-stack 服务时,其部署 Headless Service kube-system/kube-etcd 服务,然后通过 kubernetes_sd_config.endpoints 来发现 etcd 实例。我们没有调整 kube-prometheus-stack 的方法,所以我们修改 etcd 的指标接口监听配置。
提供 kube-controller-manager 配置
类似 etcd 配置,但是修改 –bind-address 参数。
提供 kube-scheduler 配置
类似 etcd 配置,但是修改 –bind-address 参数。
提供 kube-proxy 配置
修改 ConfigMap 配置,将 metricsBindAddress 设置为 0.0.0.0 并重启 kube-proxy 即可。
提供 kubelet 配置
针对部分云集群,需要关闭 kubelet 监控:
- kubelet.enabled: false
- defaultRules.rules.kubelet: false
- prometheusOperator.kubeletService.enabled: false
注 1:具体配置与 Chart 版本相关,该处仅作参考;
构建
版本选择
# 02/28/2024
所以,我们直接部署最新版本 kube-prometheus-stack-56.12.0 on Kubernetes v1.25.14
下载文件
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update prometheus-community helm search repo prometheus-community/kube-prometheus-stack helm pull prometheus-community/kube-prometheus-stack
应用
服务部署
helm show values kube-prometheus-stack-xxx.tgz > kube-prometheus-stack-xxx.tgz.helm-values.yaml
vim kube-prometheus-stack-xxx.tgz.helm-values.yaml
... Ingress
... StorageClass
... Registry
helm upgrade --install \
kps \
kube-prometheus-stack-xxx.tgz -f kube-prometheus-stack-xxx.tgz.helm-values.yaml
改进
kube-prometheus-stack | 常见问题处理
additionalDatasources not working
[prometheus-kube-stack] Additional datasource are not added to configmap correctly · Issue #2251
在 additionalDataSources 中,添加配置,然后进入 xxx-grafana-0 容器,我们能够看到新增的配置。
但是,Grafana Datasource 并没有更新。
查看 xxx-grafana-0 日志,
logger=context userId=0 orgId=0 uname= t=2024-03-18T10:56:29.574630286Z level=info msg= error=”[password-auth.failed] too many consecutive incorrect login attempts for user – login for user temporarily blocked” remote_addr=[::1] traceID=
logger=context userId=0 orgId=0 uname= t=2024-03-18T10:56:29.574713358Z level=info msg=”Request Completed” method=POST path=/api/admin/provisioning/dashboards/reload status=401 remote_addr=[::1] time_ms=0 duration=401.017µs size=121 referer= handler=/api/admin/provisioning/dashboards/reload
我们尝试修改 helm chart values.yaml 文件的 adminPassword 字段,问题得以解决。
参考
prometheus-community/helm-charts: Prometheus community Helm charts
从认识、组成、性质、应用、改进方面来介绍 kube-prometheus-stack —— ChatGPT 4.0