基于 Operator 部署 Prometheus 监控 k8s 集群

news2025/3/12 1:07:19

目录

一、环境准备

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.yaml
        image: bitnami/kube-state-metrics:2.7.0
        name: kube-state-metrics
        
[root@k8s-master1 ~/kube-prometheus/manifests]# vim prometheusAdapter-deployment.yaml
        image: registry.cn-hangzhou.aliyuncs.com/ialso/prometheus-adapter:v0.10.0
        livenessProbe:
          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: NodePort
  ports:
  - name: http
    port: 3000
    targetPort: http
    nodePort: 30300

#2. 暴露 prometheus 的 NodePort 端口
[root@k8s-master1 ~/kube-prometheus/manifests]# vim prometheus-service.yaml 
spec:
  type: NodePort
  ports:
  - name: web
    port: 9090
    targetPort: web
    nodePort: 30900
  - name: reloader-web
    port: 8080
    targetPort: reloader-web
    nodePort: 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."; then
    echo -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; do
    if [ ! -z "$image" ]; then
        echo -e "\033[36m正在下载镜像: $image\033[0m"
        if docker pull $image; then
            echo -e "\033[32m成功下载镜像: $image\033[0m"
            successful_images+=($image)
        else
            echo -e "\033[31m镜像下载失败: $image\033[0m"
            continue
        fi
    fi
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_image
    echo -e "\033[36m正在推送镜像: $new_image\033[0m"
    if ! docker push $new_image; then
        echo -e "\033[31m镜像推送失败: $new_image\033[0m"
        exit 1
    fi
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" {} +
done

echo -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.yaml
      containers:
      - args:
        - --kubelet-service=kube-system/kubelet
        - --prometheus-config-reloader=10.0.x.xxx/google_containers/prometheus-config-reloader:v0.62.0
        image: 10.0.4.145/google_containers/prometheus-operator:v0.62.0
        name: 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.coloradmin.cn/o/1598969.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring】依赖注入(DI)时常用的注解@Autowired和@Value

目录 1、Autowired 自动装配 1.1、要实现自动装配不是一定要使用Autowired 1.2、Autowired的特性 &#xff08;1&#xff09;首先会根据类型去spring容器中找(bytype),如果有多个类型&#xff0c;会根据名字再去spring容器中找(byname) &#xff08;2&#xff09;如果根据名…

冯喜运:4.16中东对抗风暴下,黄金原油市场何去何从?

黄金行情走势分析&#xff1a;4小时图布林道开始收口&#xff0c;昨日下探至下轨附近&#xff0c;也是此前的起涨低点2320启稳上升&#xff0c;十字K线配合单阳拉起&#xff0c;重新去摸高上轨。目前4小时图处于摸高当中。周线和日线留意多空转换&#xff0c;摸高之后是强势延续…

使用Scrapy选择器提取豆瓣电影信息,并用正则表达式从介绍详情中获取指定信息

本文同步更新于博主个人博客&#xff1a;blog.buzzchat.top 一、Scrapy框架 1. 介绍 在当今数字化的时代&#xff0c;数据是一种宝贵的资源&#xff0c;而网络爬虫&#xff08;Web Scraping&#xff09;则是获取网络数据的重要工具之一。而在 Python 生态系统中&#xff0c;S…

03-echarts如何画立体柱状图

echarts如何画立体柱状图 一、创建盒子1、创建盒子2、初始化盒子&#xff08;先绘制一个基本的二维柱状图的样式&#xff09;1、创建一个初始化图表的方法2、在mounted中调用这个方法3、在方法中写options和绘制图形 二、画图前知识1、坐标2、柱状图图解分析 三、构建方法1、创…

第七周学习笔记DAY.1-封装

学完本次课程后&#xff0c;你能够&#xff1a; 理解封装的作用 会使用封装 会使用Java中的包组织类 掌握访问修饰符&#xff0c;理解访问权限 没有封装的话属性访问随意&#xff0c;赋值也可能不合理&#xff0c;为了解决这些代码设计缺陷&#xff0c;可以使用封装。 面向…

RabbitMQ入门实战

文章目录 RabbitMQ入门实战基本概念安装快速入门单向发送多消费者 RabbitMQ入门实战 官方&#xff1a;https://www.rabbitmq.com 基本概念 AMQP协议&#xff1a;https://www.rabbitmq.com/tutorials/amqp-concepts.html 定义&#xff1a;高级信息队列协议&#xff08;Advanc…

LangChain入门:19.探索结构化工具对话

引言 在人工智能的浪潮中&#xff0c;对话代理技术正逐渐成为企业和开发者关注的焦点。LangChain&#xff0c;作为对话代理领域的一颗新星&#xff0c;自2021年9月诞生以来&#xff0c;以其强大的功能和灵活的应用场景迅速赢得了市场的认可。本文将带你深入了解LangChain中的S…

【从浅学到熟知Linux】进程控制上篇=>进程创建、进程终止与进程等待(含_exit与exit的区别、fork函数详解、wait与waitpid详解)

&#x1f3e0;关于专栏&#xff1a;Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 进程创建fork函数写时拷贝 进程退出进程退出操作系统做了什么&#xff1f;进程退出场景进程退出的常见方法…

openstack修改实例名称但是gnocchi监控数据中实例名称没有变更的问题处理

文章目录 一、问题描述二、调研过程1、变更实例名称2、查看grafana中的监控数据3、libvirt服务中的xml文件4、现有的监控数据流转架构 总结 一、问题描述 openstack修改实例名称但是gnocchi监控数据中实例名称没有变更的问题处理。 通过修改实例名称的功能修改了实例名称&…

大模型赋能:爬虫技术的全新革命

大模型加持下的爬虫技术革新&#xff1a;从BS4到提示工程的飞跃 在爬虫技术的演进历程中&#xff0c;内容解析一直是一个核心环节。传统的爬虫技术&#xff0c;如使用BeautifulSoup&#xff08;BS4&#xff09;等工具&#xff0c;需要逐个解析网页内容&#xff0c;通过XPath或C…

XILINX 7系列时钟资源

文章目录 前言一、时钟概要1.1、CC1.2、BUFR、BUFIO、BUFMR1.3、CMT1.4、BUFH1.5、BUFG 二、时钟路由资源三、CMT 前言 本文主要参考xilinx手册ug472 一、时钟概要 7系列FPGA时钟资源主要有CC、BUFR、BUFIO、BUFMR、CMT、BUFG、BUFH和GTE_COMMON 1.1、CC “CC”&#xff0…

OpenHarmony开发案例:【自定义通知】

介绍 本示例使用[ohos.notificationManager] 等接口&#xff0c;展示了如何初始化不同类型通知的通知内容以及通知的发布、取消及桌面角标的设置&#xff0c;通知类型包括基本类型、长文本类型、多行文本类型、图片类型、带按钮的通知、点击可跳转到应用的通知。 效果预览&am…

TensorFlow实战Google深度学习框架 PDF书籍分享

今天又来给大家推荐一本TensorFlow方面的书籍<TensorFlow实战Google深度学习框架>。本书适用于想要使用深度学习或TensorFlow的数据科学家、工程师&#xff0c;希望了解大数据平台工程师&#xff0c;对人工智能、深度学习感兴趣的计算机相关从业人员及在校学生等。 下载当…

【数据结构与算法】用两个栈实现一个队列

题目 用两个栈&#xff0c;实现一个队列功能 add delete length 队列 用数组可以实现队列&#xff0c;数组和队列的区别是&#xff1a;队列是逻辑结构是一个抽象模型&#xff0c;简单地可以用数组、链表实现&#xff0c;所以数组和链表是一个物理结构&#xff0c;队列是一个逻…

Cannot access ‘androidx.activity.FullyDrawnReporterOwner‘

Android Studio新建项目就报错&#xff1a; Cannot access ‘androidx.activity.FullyDrawnReporterOwner’ which is a supertype of ‘cn.dazhou.osddemo.MainActivity’. Check your module classpath for missing or conflicting dependencies 整个类都报错了。本来原来一直…

阿里面试:DDD中的实体、值对象有什么区别?

在领域驱动设计&#xff08;DDD&#xff09;中&#xff0c;有两个基础概念&#xff1a;实体&#xff08;Entity&#xff09;和值对象&#xff08;Value Object&#xff09;。 使用这些概念&#xff0c;我们可以把复杂的业务需求映射成简单、明确的数据模型。正确使用实体和值对…

【环境】原则

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 【环境】原则 一、培养项目系统性思维 1.1 系统性思维 1.2 系统性思维的价值 1.3 建模和推演&数字孪生 二、项目的复杂性和如何驾驭复杂性 2.1 复杂性的三个维度 2.2 如何驾驭复杂性 三、…

【御控物联】Java JSON结构转换(4):对象To对象——规则属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、术语解释三、案例之《JSON对象 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

谷歌pixel6/7pro等手机WiFi不能上网,显示网络连接受限

近期在项目中遇到一个机型出现的问题,先对项目代码进行排查,发现别的设备都能正常运行,就开始来排查机型的问题,特意写出来方便后续查看,也方便其它开发者来自查。 设备机型:Pixel 6a 设备安卓版本:13 该方法无需root,只需要电脑设备安装adb(即Android Debug Bridge…

GPT提示词分享 —— 解梦

&#x1f449; 对你描述的梦境进行解读。 我希望你能充当一个解梦者。我将给你描述我的梦&#xff0c;而你将根据梦中出现的符号和主题提供解释。不要提供关于梦者的个人意见或假设。只提供基于所给信息的事实性解释。 GPT3.5的回答 GPT3.5 &#x1f447; 感觉有点傻&#xf…