一篇文章讲明白Kubernetes(k8s)部署Promehteus监控

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 一篇文章讲明白Kubernetes(k8s)部署Promehteus监控

一、概述

Prometheus是一个开源监控系统,生态包括了很多组件,它们中的一些是可选的:

主服务Prometheus Server负责抓取和存储时间序列数据

客户库负责检测应用程序代码

支持短生命周期的PUSH网关

基于Rails/SQL仪表盘构建器的GUI

多种导出工具,可以支持Prometheus存储数据转化为HAProxy、StatsD、Graphite等工具所需要的数据存储格式

警告管理器

命令行查询工具

其他各种支撑工具

Prometheus Operator的本职就是一组用户自定义的CRD资源以及Controller的实现,Prometheus Operator负责监听这些自定义资源的变化,并且根据这些资源的定义自动化的完成如Prometheus Server自身以及配置的自动化管理工作。以下是Prometheus Operator的架构图:

Prometheus Operator 是CoreOS的一个开源项目,用来增强Prometheus在Kubernetes中的管理运维能力。利用Kubernetes的自定义资源定义 (Custom Resource Definition)的特性,实现声明式管理运维Prometheus监控告警系统。

kube-prometheus 为基于 Prometheus 和 Prometheus Operator 的完整集群监控堆栈提供示例配置。这包括部署多个 Prometheus 和 Alertmanager 实例、指标导出器(例如用于收集节点指标的 node_exporter)、抓取将 Prometheus 链接到各种指标端点的目标配置,以及用于通知集群中潜在问题的示例警报规则。

两个项目的关系:前者只包含了Prometheus Operator,后者既包含了Operator,又包含了Prometheus相关组件的部署及常用的Prometheus自定义监控,具体包含下面的组件

The Prometheus Operator:创建CRD自定义的资源对象

Highly available Prometheus:创建高可用的Prometheus

Highly available Alertmanager:创建高可用的告警组件

Prometheus node-exporter:创建主机的监控组件

Prometheus Adapter for Kubernetes Metrics APIs:创建自定义监控的指标工具(例如可以通过nginx的request来进行应用的自动伸缩)

kube-state-metrics:监控k8s相关资源对象的状态指标

Grafana:进行图像展示

二、安装kube-prometheus

1. 项目地址

在GitHub中下载,地址:

可以通过git clone,如果服务器网络不通也可以直接下载好源代码在上传服务器

下载要看清楚版本,分支不同对应k8s版本不一样

由于服务器上git 不下来,我直接在网站上下载了zip包

把包中的manifests文件上传到服务器上,里面都是yaml文件。

2. 修改yaml文件镜像源

把这几个文件的image地址都修改成下面的地址,源地址不一定能拉的下镜像

【root@k8s-master1 manifests】# grep -rn 'image: '

alertmanager-alertmanager.yaml:13: image: quay.mirrors.ustc.edu.cn/prometheus/alertmanager:v0.23.0

blackboxExporter-deployment.yaml:32: image: quay.mirrors.ustc.edu.cn/prometheus/blackbox-exporter:v0.19.0

blackboxExporter-deployment.yaml:54: image: jimmidyson/configmap-reload:v0.5.0

blackboxExporter-deployment.yaml:77: image: quay.mirrors.ustc.edu.cn/brancz/kube-rbac-proxy:v0.11.0

grafana-deployment.yaml:32: image: grafana/grafana:8.3.3

kubeStateMetrics-deployment.yaml:34: image: cnych/kube-state-metrics:v2.3.0

kubeStateMetrics-deployment.yaml:50: image: quay.mirrors.ustc.edu.cn/brancz/kube-rbac-proxy:v0.11.0

kubeStateMetrics-deployment.yaml:71: image: quay.mirrors.ustc.edu.cn/brancz/kube-rbac-proxy:v0.11.0

nodeExporter-daemonset.yaml:37: image: quay.mirrors.ustc.edu.cn/prometheus/node-exporter:v1.3.1

nodeExporter-daemonset.yaml:65: image: quay.mirrors.ustc.edu.cn/brancz/kube-rbac-proxy:v0.11.0

prometheusAdapter-deployment.yaml:39: image: cnych/prometheus-adapter:v0.9.1

prometheusOperator-deployment.yaml:32: image: //代码效果参考:http://www.zidongmutanji.com/zsjx/535243.html

quay.mirrors.ustc.edu.cn/prometheus-operator/prometheus-operator:v0.53.1

prometheusOperator-deployment.yaml:51: image: quay.mirrors.ustc.edu.cn/brancz/kube-rbac-proxy:v0.11.0

prometheus-prometheus.yaml:21: image: quay.mirrors.ustc.edu.cn/prometheus/prometheus:v2.32.1

3. 修改yaml文件svc,暴露服务端口

这三个svc分别是告警,grafana,prometheus的web页面服务,暴露端口方便在外部访问

【root@k8s-master1 manifests】# grep -rn 'NodePort'

alertmanager-service.yaml:13: type: NodePort

grafana-service.yaml:12: type: NodePort

prometheus-service.yaml:13: type: NodePort

每个svc都添加type:NodePort,和对应的端口,端口自定义不重复即可

4. 安装部署

在manifests目录下执行

#在一步要使用create,使用apply安装过程中会提示 Too long: must have at most 262144 bytes

#这会创建一个名为 monitoring 的命名空间,以及相关的 CRD 资源对象声明

【root@k8s-master1 manifests】# kubectl create -f setup/

#安装服务

【root@k8s-master1 manifests】# kubectl apply -f .

安装需要等一会,需要下载镜像

看到//代码效果参考:http://www.zidongmutanji.com/zsjx/247447.html

所有pod都running即部署完成

【root@k8s-master1 ~】# kubectl get pod -n monitoring

NAME READY STATUS RESTARTS AGE

alertmanager-main-0 2/2 Running 4 (17m ago) 16h

alertmanager-main-1 2/2 Running 0 86s

alertmanager-main-2 2/2 Running 0 89s

blackbox-exporter-5f4d9ff7f4-f9t8j 3/3 Running 6 (17m ago) 16h

grafana-78d8cfccff-5vjcc 1/1 Running 2 (17m ago) 16h

kube-state-metrics-5fc765d7b9-skwtl 3/3 Running 6 (17m ago) 16h

node-exporter-48qvw 2/2 Running 4 (66m ago) 24h

node-exporter-tgrcr 2/2 Running 56 (13m ago) 24h

node-exporter-vqchr 2/2 Running 8 (17m ago) 24h

prometheus-adapter-7c55854c56-2s4ll 1/1 Running 2 (17m ago) 16h

prometheus-adapter-7c55854c56-sfn2g 1/1 Running 2 (17m ago) 16h

prometheus-k8s-0 2/2 Running 0 89s

prometheus-k8s-1 2/2 Running 0 85s

prometheus-operator-67bcf4bb4f-ntsvw 2/2 Running 4 (17m ago) 16h

查询svc

【root@k8s-master1 ~】# kubectl get svc -n monitoring

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

alertmanager-main NodePort 10.103.39.12 9093:30082/TCP,8080:30280/TCP 24h

alertmanager-operated ClusterIP None 9093/TCP,9094/TCP,9094/UDP 24h

blackbox-exporter ClusterIP 10.100.135.40 9115/TCP,19115/TCP 24h

grafana NodePort 10.103.204.230 3000:30081/TCP 24h

kube-state-metrics ClusterIP None 8443/TCP,9443/TCP 24h

node-exporter ClusterIP None 9100/TCP 24h

prometheus-adapter ClusterIP 10.101.197.199 443/TCP 24h

prometheus-k8s NodePort 10.111.219.237 9090:30080/TCP,8080:31486/TCP 24h

prometheus-operated ClusterIP None 9090/TCP 24h

prometheus-operator ClusterIP None 8443/TCP 24h

5. 页面访问

promethus server页面

grafana页面,默认密码admin/admin

告警页面

6. 登录grafana配置监控

在设置中选择配置

默认就已经带有k8s的监控,可以直接使用也可以点击add data source手动配置

配置完成后,点击test测试

在主页上,点击导入import,导入监控模板

315是其中一个监控模板id,可以手动去grafana官网下载需要的模板再导入。这里直接使用315测试监控效果,点击load

自定义name,promethus选择刚才配置的,点击import

页面监控数据

7. 配置告警

配置邮箱告警,修改下告警配置yaml文件。修改前记得把原有的告警配置delete

【root@k8s-master1 alter】# kubectl delete -f alertmanager-secret.yaml

修改yaml

【root@k8s-master1 alter】# cat alertmanager-secret.yaml

apiVersion: v1

data: {}

kind: Secret

metadata:

name: alertmanager-main

namespace: monitoring

stringData:

alertmanager.yaml: |-

global:

resolve_timeout: 5m

smtp_require_tls: false

route:

group_by: 【'alertname'】

group_interval: 5m

group_wait: 30s

receiver: default-receiver

repeat_interval: 12h

routes:

- receiver: 'lms-saas'

match_re:

namespace: ^(lms-saas|lms-standard).*$ # 根据namespace进行区分报警

receivers:

- name: 'default-receiver'

email_configs:

send_resolved: true

send_resolved: true

- name: 'lms-saas' # 跟上面定义的名字必须一样

email_configs:

send_resolved: true

send_resolved: true

type: Opaque

重新配置告警

【root@k8s-master1 alter】# kubectl apply -f alertmanager-secret.yaml

测试告警,删掉一个pod可以正常收到告警邮件

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
238 2
|
6月前
|
存储 Kubernetes 异构计算
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
|
7月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
685 33
|
7月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
396 19
|
7月前
|
存储 运维 Kubernetes
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
|
Kubernetes 开发者 微服务
简化Kubernetes应用部署工具-Helm之Hook
本文讲的是简化Kubernetes应用部署工具-Helm之Hook【编者的话】微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get / yum,由Deis 公司发起,该公司已经被微软收购。
2706 0
|
5月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
213 9
|
5月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
7月前
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
|
10月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。

热门文章

最新文章

推荐镜像

更多