K8s快速部署Prometheus

Prometheus组件介绍

  • prometheus server: 主服务,接受外部http请求,收集、存储与查询数据
  • promeheus targets:静态收集的目标服务数据
  • service discovery:动态发现服务
  • prometheus alerting: 报警通知
  • push gateway:数据收集代理服务器(类似于zabbix proxy)
  • data visualization and export:数据可视化与数据导出(访问客户端)

使用Operator部署Prometheus

克隆Operator仓库

sh 复制代码
git clone https://github.com/prometheus-operator/kube-prometheus.git

进入目录应用yaml文件

sh 复制代码
# 进入项目目录
[root@node1 ~]# cd kube-prometheus/

查看项目使用的谷歌镜像有哪些

可以看到kube-state-metrics和prometheus-adapter使用了google官方的镜像仓库,国内无法访问,所以后面得替换下

sh 复制代码
[root@node1 kube-prometheus]# grep image: ./* -R | grep registry.k8s.io
./manifests/kubeStateMetrics-deployment.yaml:        image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.9.2
./manifests/prometheusAdapter-deployment.yaml:        image: registry.k8s.io/prometheus-adapter/prometheus-adapter:v0.11.1

使用docker hub的镜像替换registry.k8s.io的镜像

该步骤需要自己将上面的两个镜像推送到自己的docker hub仓库里面

sh 复制代码
sed -i "s#registry.k8s.io/kube-state-metrics/kube-state-metrics.*#postkarte/kube-state-metrics:v2.9.2#g" manifests/kubeStateMetrics-deployment.yaml

sed -i "s#registry.k8s.io/prometheus-adapter.*#postkarte/prometheus-adapter:v0.11.1#g" manifests/prometheusAdapter-deployment.yaml

首先应用setup目录里面的yaml文件

注意应用时候需要加上--server-side,表示Server-side Apply

该目录包括创建名称空间等初始化资源清单文件

sh 复制代码
[root@node1 kube-prometheus]# kubectl apply --server-side -f manifests/setup/
customresourcedefinition.apiextensions.k8s.io/alertmanagerconfigs.monitoring.coreos.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/alertmanagers.monitoring.coreos.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/podmonitors.monitoring.coreos.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/probes.monitoring.coreos.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/prometheuses.monitoring.coreos.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/prometheusagents.monitoring.coreos.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/prometheusrules.monitoring.coreos.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/scrapeconfigs.monitoring.coreos.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/servicemonitors.monitoring.coreos.com serverside-applied
customresourcedefinition.apiextensions.k8s.io/thanosrulers.monitoring.coreos.com serverside-applied
namespace/monitoring serverside-applied

等待上一步资源创建成功

sh 复制代码
kubectl wait \
	--for condition=Established \
	--all CustomResourceDefinition \
	--namespace=monitoring

此命令的含义是:

  • kubectl wait:等待某个事件满足条件之后再返回

  • --for condition=Established:等待条件为"Established",即等待到达"Established"状态

  • --all CustomResourceDefinition:等待的对象是所有类型为CustomResourceDefinition的资源

  • --namespace=monitoring:限定查看monitoring命名空间下的CRD

换而言之,这个命令在monitoring命名空间下,等待所有的CustomResourceDefinition资源对象都进入"Established"状态之后才返回。

CustomResourceDefinition (CRD)需要一段时间从定型状态变成已建立状态,这期间CRD资源还无法正常使用。

此命令就是等待所有的CRD建立完成,确保它们都能正常工作后,kubectl命令才继续执行后面的操作。

使用kubectl wait可以避免在CRD还未完全就绪的情况下进行后续操作,从而避免因CRD状态不全导致的处理失败。这对于需要依赖CRD定义的其他资源来说,是必要的同步机制。

在上一步资源创建成功后,应用Prometheus和grafana的yaml文件

sh 复制代码
[root@node1 kube-prometheus]# kubectl apply -f manifests/

查看资源部署情况

sh 复制代码

遇到的错误

在应用manifests/setup/文件中的yaml文件时候出现如下错误,解决办法是加上--server-side

sh 复制代码
Error from server (Invalid): error when creating "manifests/setup/0prometheusCustomResourceDefinition.yaml": CustomResourceDefinition.apiextensions.k8s.io "prometheuses.monitoring.coreos.com" is invalid: metadata.annotations: Too long: must have at most 262144 bytes
Error from server (Invalid): error when creating "manifests/setup/0prometheusagentCustomResourceDefinition.yaml": CustomResourceDefinition.apiextensions.k8s.io "prometheusagents.monitoring.coreos.com" is invalid: metadata.annotations: Too long: must have at most 262144 bytes
相关推荐
Gogo8161 小时前
BigInt 与 Number 的爱恨情仇,为何大佬都劝你“能用 Number 就别用 BigInt”?
后端
fuquxiaoguang1 小时前
深入浅出:使用MDC构建SpringBoot全链路请求追踪系统
java·spring boot·后端·调用链分析
毕设源码_廖学姐2 小时前
计算机毕业设计springboot招聘系统网站 基于SpringBoot的在线人才对接平台 SpringBoot驱动的智能求职与招聘服务网
spring boot·后端·课程设计
野犬寒鸦3 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
逍遥德4 小时前
如何学编程之01.理论篇.如何通过阅读代码来提高自己的编程能力?
前端·后端·程序人生·重构·软件构建·代码规范
MX_93594 小时前
Spring的bean工厂后处理器和Bean后处理器
java·后端·spring
程序员泠零澪回家种桔子5 小时前
Spring AI框架全方位详解
java·人工智能·后端·spring·ai·架构
源代码•宸6 小时前
大厂技术岗面试之谈薪资
经验分享·后端·面试·职场和发展·golang·大厂·职级水平的薪资
晚霞的不甘7 小时前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
喵叔哟7 小时前
06-ASPNETCore-WebAPI开发
服务器·后端·c#