如果只想了解安装请查看“kube-prometheus-stack V64.6.0安装”章节。
Prometheus是一种开源的系统监控和警报工具包,由SoundCloud公司开发。它被设计为在动态环境中进行可靠的服务发现,并支持多种数据模型。Prometheus是云原生计算基金会(CNCF)的一部分,与Kubernetes非常契合。Prometheus提供了全套的服务发现&数据收集&数据分析&数据展示&数据告警&自定义扩展接口,Prometheus是目前Kubernetes开源领域监控方案的行业标准。为在Kubernetes环境中监控和理解系统提供了大量工具。以下是Prometheus在Kubernetes监控领域的作用和功能:
我重点介绍基于Helm Chart的安装实现,关于更多功能方面的细节建议观看以下视频:
介绍视频1
介绍视频2
官网参考
以下介绍的安装实现会从实际生产角度去做一些考量,之所以需要StorageClass是为了保证数据持久化。
a. Kubernetes版本>=1.16
b. Helm版本>=v3.2.0,其中 Helm 的安装请参考:Helm Install
c.需要有默认的StorageClass,具体准备流程参考:Kubernetes安装StorageClass
a.创建安装目录
#切换到当前用户根目录并建立monitor文件夹
cd ~ && mkdir monitor
cd monitor
b.创建monitor名字空间,独立的名字空间有助于资源管理
kubectl create ns monitor
c.添加prometheus官方repo仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
d.下载 kube-prometheus-stack V64.6.0 文件,下载相关的文件有助于我们更好的管理项目,安装前会修改 values.yaml 文件
helm pull prometheus-community/kube-prometheus-stack --version 46.6.0
tar -xvf kube-prometheus-stack-46.6.0.tgz
cd kube-prometheus-stack
e.修改 values.yaml 内配置,kube-prometheus-stack 的 values.yaml 可配置的内容很多有3000多行,强烈建议将 values.yaml 的内容导入到某些图形画的文本编辑器内进行编辑(例如:vscode),接下来介绍几个常用的修改:
# 修改service的暴露类型为NodePort
全局搜索“type: ClusterIP”关键字,将其替换为“type: NodePort”
# 与其相关的位置大多会有Ingress的设置,如果需要将服务通过Ingress的方式暴露,可以进行相关的设置。
# 修改存储类型为StorageClass
全局搜索“storageClass”关键字,共有3处
1. Alertmanager 使用的,改为如下配置,注意 storageClassName 需要是集群中 storageClass 的实际名称
## Storage is the definition of how storage will be used by the Alertmanager instances.
## ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/user-guides/storage.md
##
storage:
volumeClaimTemplate:
spec:
storageClassName: nfs-client
accessModes: ['ReadWriteOnce']
resources:
requests:
storage: 50Gi
2. Prometheus 持久化数据,改为如下配置,注意 storageClassName 需要是集群中 storageClass 的实际名称
## Prometheus StorageSpec for persistent data
## ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/user-guides/storage.md
##
storageSpec:
## Using PersistentVolumeClaim
##
volumeClaimTemplate:
spec:
storageClassName: nfs-client
accessModes: ['ReadWriteOnce']
resources:
requests:
storage: 50Gi
# 修改镜像地址
全局搜索“image:”关键字
# 有些镜像来自于quay.io,国内下载受限,需要修改为可以下载的地址(私有仓库或配置阿里镜像加速)
values.yaml 文件内容过长,不具体列出,感兴趣的可以查看我的 上传文件
values.yaml 中的其他参数设置请参考 官网说明
f. Helm Chart执行安装
helm install monitor ~/monitor/kube-prometheus-stack -n monitor
kubectl get po,svc,pvc,secret -n monitor
NAME READY STATUS RESTARTS AGE
pod/alertmanager-monitor-kube-prometheus-st-alertmanager-0 2/2 Running 0 58m
pod/monitor-grafana-5c955b9765-2h7xd 3/3 Running 0 58m
pod/monitor-kube-prometheus-st-operator-5bcdfff95c-mtdl2 1/1 Running 0 58m
pod/monitor-kube-state-metrics-6fd4d95d46-7tqfh 1/1 Running 0 58m
pod/monitor-prometheus-node-exporter-7hk2q 1/1 Running 0 58m
pod/monitor-prometheus-node-exporter-h89ll 1/1 Running 0 58m
pod/monitor-prometheus-node-exporter-jp9cp 1/1 Running 0 58m
pod/monitor-prometheus-node-exporter-r7pd6 1/1 Running 0 58m
pod/prometheus-monitor-kube-prometheus-st-prometheus-0 2/2 Running 0 58m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 58m
service/monitor-grafana NodePort 10.233.47.220 <none> 80:31721/TCP 58m
service/monitor-kube-prometheus-st-alertmanager NodePort 10.233.245.52 <none> 9093:30903/TCP 58m
service/monitor-kube-prometheus-st-operator NodePort 10.233.99.28 <none> 443:30443/TCP 58m
service/monitor-kube-prometheus-st-prometheus NodePort 10.233.61.216 <none> 9090:30090/TCP 58m
service/monitor-kube-state-metrics ClusterIP 10.233.211.59 <none> 8080/TCP 58m
service/monitor-prometheus-node-exporter ClusterIP 10.233.82.51 <none> 9100/TCP 58m
service/prometheus-operated ClusterIP None <none> 9090/TCP 58m
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/alertmanager-monitor-kube-prometheus-st-alertmanager-db-alertmanager-monitor-kube-prometheus-st-alertmanager-0 Bound pvc-35ffe0d7-bdf9-4bfb-8a1d-a66f45e68b35 50Gi RWO nfs-client 58m
persistentvolumeclaim/prometheus-monitor-kube-prometheus-st-prometheus-db-prometheus-monitor-kube-prometheus-st-prometheus-0 Bound pvc-9d4a2ab7-44b0-40e4-8248-03e26ff16f49 50Gi RWO nfs-client 58m
NAME TYPE DATA AGE
secret/alertmanager-monitor-kube-prometheus-st-alertmanager Opaque 1 58m
secret/alertmanager-monitor-kube-prometheus-st-alertmanager-generated Opaque 1 58m
secret/alertmanager-monitor-kube-prometheus-st-alertmanager-tls-assets-0 Opaque 0 58m
secret/alertmanager-monitor-kube-prometheus-st-alertmanager-web-config Opaque 1 58m
secret/default-token-vzn75 kubernetes.io/service-account-token 3 112m
secret/monitor-grafana Opaque 3 58m
secret/monitor-grafana-token-ttrxz kubernetes.io/service-account-token 3 58m
secret/monitor-kube-prometheus-st-admission Opaque 3 75m
secret/monitor-kube-prometheus-st-alertmanager-token-ff894 kubernetes.io/service-account-token 3 58m
secret/monitor-kube-prometheus-st-operator-token-l5fxx kubernetes.io/service-account-token 3 58m
secret/monitor-kube-prometheus-st-prometheus-token-twvtr kubernetes.io/service-account-token 3 58m
secret/monitor-kube-state-metrics-token-rckng kubernetes.io/service-account-token 3 58m
secret/monitor-prometheus-node-exporter-token-t4xjq kubernetes.io/service-account-token 3 58m
secret/prometheus-monitor-kube-prometheus-st-prometheus Opaque 1 58m
secret/prometheus-monitor-kube-prometheus-st-prometheus-tls-assets-0 Opaque 1 58m
secret/prometheus-monitor-kube-prometheus-st-prometheus-web-config Opaque 1 58m
secret/sh.helm.release.v1.monitor.v1 helm.sh/release.v1 1 59m
默认monitor-grafana的暴露方式为ClusterIP(其内容并不受 values.yaml 文件控制)
kubectl edit svc monitor-grafana -n monitor
# 修改其中spec.type内容为 NodePort
用户名密码存放在secret/monitor-grafana中
# 获取密码
kubectl -n monitor get secret monitor-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
# 获取用户名
kubectl -n monitor get secret monitor-grafana -o jsonpath="{.data.admin-user}" | base64 --decode ; echo
对应service monitor-kube-prometheus-st-prometheus 的NodePort端口。进入Target页面:
可以看到 api-server、coredns、kubelete、node-expoter 等关键组件都已被添加。
需要用到2.2步中修改的NodePort端口,2.3步中获取的用户名、密码
a.Plugins 界面已添加常用的项目
b.Dashboards 界面已添加常用的项目
c.查看集群内pod的资源状态