公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享
前言
K8s本身不包含内置的监控工具,所以市场上有不少这样监控工具来填补这一空白,但是没有一个监控工具有k8s全家桶使用率高,因为它由 CNCF维护,已经成为了监控 k8s 集群的事实上的行业标准,下面介绍一下如何在K8s快速部署一个kube-prometheus项目,来实现对k8s 相关资源监控与告警
kube-prometheus介绍
kube-prometheus是一个完整的监控解决方案,可以轻松地将其部署到 Kubernetes 集群中,它包括以下内容
Prometheus 用于度量收集
Alertmanager 用于指标警报和通知
Grafana 用于图形用户界面
一组特定于K8s的exporters,用作指标收集代理
使用 Prometheus Operator 来简化和自动化该堆栈的设置
快速安装
在将 kube-prometheus部署到 k8s 集群之前,先确认与你的 k8s匹配的是版本,然后在下载
下载
执行kubectl version
查看k8s 版本,下载对应版本
由于本人的 k8s 版本为 v1.25.13
,所以下载kube-prometheus-0.12.0
wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.12.0.zip
解压
tar -zxvf kube-prometheus-0.12.0.zip & cd kube-prometheus-0.12.0
修改镜像地址
由于网络原因,kube-state-metrics和prometheus-adapter镜像地址,在国内无法下载,因此需要修改以下地址
vi manifests/kubeStateMetrics-deployment.yaml
image: bitnami/kube-state-metrics:2.7.0
vi manifests/prometheusAdapter-deployment.yaml
image: cloveropen/prometheus-adapter:v0.10.0
访问配置
为了可以从外部访问 Prometheus
、Grafana
、Alertmanager
,需要修改 service
类型为 NodePort
类型。
修改 Prometheus 的 service
vi manifests/prometheus-service.yaml
# 设置对外访问端口,增加如下两行
type: NodePort
nodePort: 31922
修改 Grafana 的 service
vi manifests/grafana-service.yaml
# 设置对外访问端口,增加如下两行
type: NodePort
nodePort: 30300
修改 Alertmanager 的 service
vi manifests/alertmanager-service.yaml
# 设置对外访问端口,增加如下两行
type: NodePort
nodePort: 30200
安装
在kube-prometheus-0.12.0目录下执行以下命令进行安装
kubectl apply --server-side -f manifests/setup
kubectl apply -f manifests/
执行完成以后,访问monitoring 空间,查看部署状态,可以看到启动成功,并且都是高可用部署
kubectl get pods -n monitoring
验证
Prometheus验证
选一台 node 节点ip+31922,即可访问prometheus的 Web UI
Alertmanager验证
选一台 node 节点ip+30200,即可访问alertmanager的 Web UI,可以看到有一些报警,由于alertmanager的报警配置比较复杂同时对国内的通讯工具支持有限,因此可以使用PrometheusAlert
进行告警配置
Grafana验证
选一台 node 节点ip+30300,即可访问grafana的 Web UI,默认用户名密码:admin/admin,登录会提示更改密码,登录以后,可以看到已经内置了不少监控大盘
集群资源监控
节点资源监控,可以看到当前节点部署了哪些 pod,以及对应的负载是多少
卸载
执行以下命令即可卸载相关组件
kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup
存在的问题
持久存储
以上我们安装未使用持久化存储,所以如果Prometheus或者Grafana重启,那么采集的数据和自定义的仪表盘等数据会丢失,因此如果考虑在生产环境使用,需要把数据使用存储卷挂载至文件系统。
Grafana显示时间问题
由于grafana默认时区是UTC,比中国时间慢了8小时,很不便于日常监控查看,需要进行修改,如下图
因此需要调整成中国时间,utc+8,替换grafana-dashboardDefinitions.yaml
sed -i '' 's/utc/utc+8/g' grafana-dashboardDefinitions.yaml
sed -i '' 's/UTC/UTC+8/g' grafana-dashboardDefinitions.yaml
grep -i timezone grafana-dashboardDefinitions.yaml
总结
以上我们介绍了什么是kube-prometheus以及如何在k8s中快速部署kube-prometheus,后续会深入讲解相关使用,同时在操作过程中如果有疑问,也欢迎关注我的公众号进行技术交流,如果本篇文章对您有所帮助,麻烦帮忙一键三连(点赞、转发、收藏)~