基于 Operator 部署 Prometheus 监控 k8s 集群

目录

一、环境准备

1.1 选择版本

1.2 过滤镜像

1.3 修改 yaml 镜像

1.4 移动 *networkPolicy*.yaml

1.5 修改 service 文件

1.6 提前下载镜像并推送到私有镜像仓库

1.7 修改镜像(可选)

二、执行创建

三、查看 pod 状态

四、访问 prometheus、grafana 页面

4.1 访问 prometheus

4.2 访问 grafana

4.2.1 获取可编辑权限


 

        operator 部署是基于已经编写好的 yaml 文件,可以将 prometheus server、altermanager、grafana、node-exporter 等组件一键批量部署。

此次是部署在 k8s-v1.25.4 环境。

一、环境准备

1.1 选择版本

kube-prometheus 官方地址:https://github.com/prometheus-operator/kube-prometheus

选择与 k8s 对应的版本:

1.2 过滤镜像

#1. 克隆项目到本地
[root@k8s-master1 ~]# git clone -b release-0.12 https://github.com/prometheus-operator/kube-prometheus.git#2. 过滤需要的镜像
[root@k8s-master1 ~]# cd kube-prometheus/manifests
[root@k8s-master1 ~/kube-prometheus/manifests]# grep image: ./* -R

1.3 修改 yaml 镜像

        有两个镜像地址为 registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.7.0、registry.k8s.io/prometheus-adapter/prometheus-adapter:v0.10.0 是下载不到的,我们得修改下对应的 yaml 文件:

[root@k8s-master1 ~/kube-prometheus/manifests]# vim kubeStateMetrics-deployment.yamlimage: bitnami/kube-state-metrics:2.7.0name: kube-state-metrics[root@k8s-master1 ~/kube-prometheus/manifests]# vim prometheusAdapter-deployment.yamlimage: registry.cn-hangzhou.aliyuncs.com/ialso/prometheus-adapter:v0.10.0livenessProbe:failureThreshold: 5

1.4 移动 *networkPolicy*.yaml

[root@k8s-master1 ~/kube-prometheus/manifests]# mkdir networkPolicy.bak
[root@k8s-master1 ~/kube-prometheus/manifests]# mv *networkPolicy*.yaml networkPolicy.bak/

1.5 修改 service 文件

#1. 暴露 grafana 的 NodePort 端口
[root@k8s-master1 ~/kube-prometheus/manifests]# vim grafana-service.yaml 
spec:type: NodePortports:- name: httpport: 3000targetPort: httpnodePort: 30300#2. 暴露 prometheus 的 NodePort 端口
[root@k8s-master1 ~/kube-prometheus/manifests]# vim prometheus-service.yaml 
spec:type: NodePortports:- name: webport: 9090targetPort: webnodePort: 30900- name: reloader-webport: 8080targetPort: reloader-webnodePort: 30800

1.6 提前下载镜像并推送到私有镜像仓库

PS:也可以直接使用我已经上传到阿里云的镜像!

# 使用脚本执行下载镜像并推送
[root@k8s-master1 ~/kube-prometheus]# vim images.sh 
#!/bin/bash# 定义目录变量
MANIFESTS_DIR="/root/kube-prometheus/manifests"
ALIYUN_REPO="registry.cn-hangzhou.aliyuncs.com/kube-prometheus_v012/kube-prometheus_v012"# 登录阿里云容器镜像仓库
echo -e "\033[36m开始登录阿里云容器镜像仓库...\033[0m"
if ! sudo docker login --username=zfhxxx registry.cn-hangzhou.aliyuncs.com --password-stdin <<< "xxx."; thenecho -e "\033[31m登录失败,请检查密码的正确性。\033[0m"exit 1
fi# 过滤并提取镜像名称
echo -e "\033[36m正在提取镜像列表...\033[0m"
images=$(grep -ohr "image: \S*" $MANIFESTS_DIR | awk '{print $2}' | sort | uniq)# 成功下载的镜像列表
successful_images=()# 检查并下载镜像
for image in $images; doif [ ! -z "$image" ]; thenecho -e "\033[36m正在下载镜像: $image\033[0m"if docker pull $image; thenecho -e "\033[32m成功下载镜像: $image\033[0m"successful_images+=($image)elseecho -e "\033[31m镜像下载失败: $image\033[0m"continuefifi
done# 处理成功下载的镜像
for image in "${successful_images[@]}"; do# 修改镜像格式,将 ":" 替换为 "-"image_name_with_version=$(echo $image | sed 's|.*/||;s|:|-|')new_image="$ALIYUN_REPO:$image_name_with_version"docker tag $image $new_imageecho -e "\033[36m正在推送镜像: $new_image\033[0m"if ! docker push $new_image; thenecho -e "\033[31m镜像推送失败: $new_image\033[0m"exit 1fi
done# 替换 yaml 文件中的镜像名称
echo -e "\033[36m正在更新 yaml 文件中的镜像名称...\033[0m"
for image in "${successful_images[@]}"; do# 修改原镜像名称格式,将 ":" 替换为 "-"image_name=$(echo $image | sed 's|.*/||')version=$(echo $image_name | sed 's|.*:||;s|:|-|')name=$(echo $image_name | sed "s|:$version||")new_image_format="$ALIYUN_REPO:$name-$version"find $MANIFESTS_DIR -type f -name '*.yaml' -exec sed -i "s|$image|$new_image_format|g" {} +
doneecho -e "\033[32m处理完成。\033[0m"[root@k8s-master1 ~/kube-prometheus]# chmod +x images.sh 
[root@k8s-master1 ~/kube-prometheus]# sh images.sh 

1.7 修改镜像(可选)

如果是在内网环境下,则需要执行此步骤!

        如果是在内网环境,会发现 alertmanager 和 prometheus 起不来,查看详细信息会发现还需要额外拉取一个镜像:quay.io/prometheus-operator/prometheus-config-reloader:v0.62.0

[root@idc-master-01 ~]# kubectl get pods -n monitoring [root@idc-master-01 ~]# kubectl get statefulsets.apps -n monitoring 
NAME                READY   AGE
alertmanager-main   0/3     16h
prometheus-k8s      0/2     16h[root@idc-master-01 ~]# kubectl describe pods -n monitoring alertmanager-main-0
[root@idc-master-01 ~]# kubectl describe pods -n monitoring prometheus-k8s-0 

#1. 下载镜像并推送至私有 Harbor 仓库
[root@idc-master-01 ~]# docker pull quay.io/prometheus-operator/prometheus-config-reloader:v0.62.0
[root@idc-master-01 ~]# docker images |grep prometheus-config
quay.io/prometheus-operator/prometheus-config-reloader                        v0.62.0                                              e31159f5e80c   15 months ago   12.5MB
[root@idc-master-01 ~]# docker tag e31159f5e80c 10.0.x.xxx/google_containers/prometheus-config-reloader:v0.62.0
[root@idc-master-01 ~]# docker push 10.0.x.xxx/google_containers/prometheus-config-reloader:v0.62.0#2. 查找这个镜像实在哪个文件里
[root@idc-master-01 ~]# grep -Rl "quay.io/prometheus-operator/prometheus-config-reloader:v0.62.0" /root/kube-prometheus/manifests
/root/kube-prometheus/manifests/prometheusOperator-deployment.yaml#3. 修改镜像名称
[root@idc-master-01 ~]# vim /root/kube-prometheus/manifests/prometheusOperator-deployment.yamlcontainers:- args:- --kubelet-service=kube-system/kubelet- --prometheus-config-reloader=10.0.x.xxx/google_containers/prometheus-config-reloader:v0.62.0image: 10.0.4.145/google_containers/prometheus-operator:v0.62.0name: prometheus-operator

二、执行创建

注意:每个 kube-prometheus 版本的执行部署命令可能有差异,具体看官方 github!

#1. 先创建资源
[root@k8s-master1 ~/kube-prometheus]# kubectl apply --server-side -f manifests/setup#2. 创建服务
[root@k8s-master1 ~/kube-prometheus]# kubectl apply -f manifests/# 卸载
# kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup

三、查看 pod 状态

[root@k8s-master1 ~/kube-prometheus]# kubectl get pods -n monitoring 
NAME                                  READY   STATUS    RESTARTS        AGE
alertmanager-main-0                   2/2     Running   1 (2m43s ago)   2m56s
alertmanager-main-1                   2/2     Running   1 (2m19s ago)   2m56s
alertmanager-main-2                   2/2     Running   1 (2m43s ago)   2m56s
blackbox-exporter-5d65c768db-79m2p    3/3     Running   0               3m48s
grafana-8444df4945-mqqr5              1/1     Running   0               3m47s
kube-state-metrics-565d4b86d6-frmj2   3/3     Running   0               3m47s
node-exporter-8qb4p                   2/2     Running   0               3m46s
node-exporter-pb5wq                   2/2     Running   0               3m46s
node-exporter-w6bqp                   2/2     Running   0               3m46s
prometheus-adapter-74648d74c7-f2ffp   1/1     Running   0               3m45s
prometheus-adapter-74648d74c7-n8k5j   1/1     Running   0               3m45s
prometheus-k8s-0                      2/2     Running   0               2m54s
prometheus-k8s-1                      2/2     Running   0               2m54s
prometheus-operator-69f4bff8-ppbv9    2/2     Running   0               3m45s[root@k8s-master1 ~/kube-prometheus]# kubectl get svc -n monitoring 
NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                         AGE
alertmanager-main       ClusterIP   10.99.205.58     <none>        9093/TCP,8080/TCP               4m14s
alertmanager-operated   ClusterIP   None             <none>        9093/TCP,9094/TCP,9094/UDP      3m21s
blackbox-exporter       ClusterIP   10.110.84.60     <none>        9115/TCP,19115/TCP              4m14s
grafana                 NodePort    10.107.147.245   <none>        3000:30300/TCP                  112s
kube-state-metrics      ClusterIP   None             <none>        8443/TCP,9443/TCP               4m12s
node-exporter           ClusterIP   None             <none>        9100/TCP                        4m11s
prometheus-adapter      ClusterIP   10.109.105.103   <none>        443/TCP                         4m11s
prometheus-k8s          NodePort    10.99.213.212    <none>        9090:30900/TCP,8080:30800/TCP   37s
prometheus-operated     ClusterIP   None             <none>        9090/TCP                        3m19s
prometheus-operator     ClusterIP   None             <none>        8443/TCP                        4m10s

四、访问 prometheus、grafana 页面

4.1 访问 prometheus

访问连接:http://192.168.170.141:30900/

4.2 访问 grafana

访问连接:http://192.168.170.141:30300/

账号:admin

密码:admin

里面已经定义好大量的模板:

4.2.1 获取可编辑权限

里面有些模版是没有 Edit 编辑按钮的:

解决办法:

点击右上角的设置:

点击 Make editable:

回到模板页面,重新点击模块,出现 Edit 按钮:

上一篇文章:【云原生 | Kubernetes 实战】01、K8s-v1.25集群搭建和部署基于网页的 K8s 用户界面 Dashboard_kubeadm1.25需要最低配置是啥-CSDN博客

下一篇文章:搭建 Hadoop 生态集群大数据监控告警平台_监控hadoop并实现自动告警-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/619694.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频编辑软件pitivi基本功之安装篇

视频编辑软件pitivi基本功之安装篇 台式机的系统是openSUSE-Leap-15.5-DVD-x86_64 应用程序——工具——终端&#xff0c;切换到root用户 ruhonglocalhost:~> su - 密码&#xff1a; localhost:~ # zypper search pitivi localhost:~ # zypper install pitivi ruhonglocalho…

Python爬虫-京东商品评论数据

前言 本文是该专栏的第68篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏之前,笔者有详细介绍京东滑块验证码的解决方法,感兴趣的同学,可以直接翻阅文章《Python如何解决“京东滑块验证码”(5)》进行查看。 而本文,笔者以京东商品详情页的评论数据为例,通过…

第一节:什么是操作系统

什么是操作系统 一、一台计算机的组成部分1、计算机能干啥2、谈谈计算机硬件 二、什么是操作系统三、学习操作系统的层次 一、一台计算机的组成部分 如下图所示&#xff1a; 这就是就是构成一台计算机的组成部分 1、计算机能干啥 ∙ \bullet ∙计算机是我们专业吃饭的家伙&a…

有什么好用的财务记账软件?

易舟云财务软件是一款功能强大且易于使用的财务记账软件&#xff0c;适用于个人和小型企业。它提供了一系列财务管理工具&#xff0c;包括收支记录、会计凭证、资产负债表和利润表等。用户可以轻松录入和管理日常收支&#xff0c;生成详细的财务报表&#xff0c;帮助用户更好地…

一款免费、开源、可批量识别的离线OCR软件,适用于 Windows7 x64及以上平台

免费&#xff1a;本项目所有代码开源&#xff0c;完全免费。方便&#xff1a;解压即用&#xff0c;离线运行&#xff0c;无需网络。高效&#xff1a;自带高效率的离线OCR引擎&#xff0c;内置多种语言识别库。灵活&#xff1a;支持命令行、HTTP接口等外部调用方式。功能&#x…

神经网络模型底层原理与实现8-BERT

首先介绍什么是自监督学习&#xff1a; 普通的有监督学习是每个x对应有个y&#xff0c;x训练得到y&#xff0c;将y与y作比较&#xff0c;而自监督是没有对应y&#xff0c;直接把一部分样本x作为训练目标x&#xff0c;训练得x后和x对比 bert中如何创造x&#xff1a;以文字处理为…

【备战测开】—— 编程语言Python(二)

续上上篇的讲解&#xff1a;【备战测开】—— 编程语言Python&#xff08;一&#xff09; 6 面向对象编程 所谓的面向对象其实就是把属性和方法封装起来&#xff0c;以供重复调用 6.1 类和对象 参考博客&#xff1a;python类和对象最全详解&#xff08;持续修订中&#xff…

vue3 动态class和style

1、需求&#xff1a;一个删除的弹窗&#xff0c;点击会提示“是否需要删除XXXXX&#xff08;name&#xff09;”&#xff0c;但是name不固定&#xff0c;所以删除弹窗的width不能写死。&#xff08;如果不设置width&#xff0c;本项目的弹窗会自适应变得特别长&#xff09;

最新版守约者二级域名分发系统

主要功能 二级域名管理&#xff1a; 我们的系统提供全面的二级域名管理服务&#xff0c;让您轻松管理和配置二级域名。 域名分发&#xff1a;利用我们先进的域名分发技术&#xff0c;您可以自动化地分配和管理域名&#xff0c;确保每个用户或客户都能及时获得所需的域名资源。…

[Spring Cloud] (3)gateway令牌token拦截器

文章目录 集成redisNacos配置增加 redis配置配置pomredis配置RedisConfigredis序列化工具FastJson2JsonRedisSerializer测试 令牌校验拦截器nacos配置拦截器代码微服务登录接口实现 最终效果-登录接口与数据接口 本文gateway与微服务已开源到gitee 杉极简/gateway网关阶段学习 …

深度学习驱动的蛋白质设计技术与前沿实践-从基础到尖端应用

在生物信息学、合成生物学、药物研发、生物材料制备等领域&#xff0c;深度学习技术的革新正在重塑蛋白质设计工具的边界&#xff0c;使其从单纯的结构预测跃升至具有创造性的设计层面。RFdiffusion作为美国华盛顿大学David Baker教授团队的最新科研成果&#xff0c;凭借其卓越…

springboot+vue科普知识商城考试论坛交流系统网站

本系统主要是设计出新能源科普网站&#xff0c;基于B/S构架&#xff0c;后台数据库采用了Mysql&#xff0c;可以使数据的查询和存储变得更加有效&#xff0c;可以确保新能源科普网站管理的工作能够正常、高效的进行&#xff0c;从而提高工作的效率。总体的研究内容如下&#xf…