在k8s中部署Prometheus并实现对k8s集群的监控

🐇明明跟你说过:个人主页

🏅个人专栏:《Prometheus:监控的神》 🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、k8s简介

2、 Prometheus概述

二、准备k8s环境

1、k8s集群搭建

2、集群状态检查

三、部署Prometheus 

1、创建名称空间

2、安装node-exporter

3、安装Prometheus server

4、创建Service

四、访问测试


一、引言

1、k8s简介

Kubernetes单词起源于希腊语, 是“舵手”或者“领航员、飞行员”的意思。

Kubernetes(简称K8s)的前世今生可以追溯到谷歌(Google)内部的一个项目,它起源于2003年,当时谷歌正面临着不断增长的应用程序和服务的管理挑战。这个项目最初被称为"Borg",是一个早期的容器编排系统。Borg 的成功经验成为 Kubernetes 开发的契机。

 有关k8s起源的介绍,请参考《初识K8s之前世今生、架构、组件、前景》这篇文章

​​

Kubernetes的优点包括可移植性、可伸缩性和扩展性。它使用轻型的YAML清单文件实现声明性部署方法,对于应用程序更新,无需重新构建基础结构。管理员可以计划和部署容器,根据需要扩展容器并管理其生命周期。借助Kubernetes的开放源代码API,用户可以通过首选编程语言、操作系统、库和消息传递总线来构建应用程序,还可以将现有持续集成和持续交付(CI/CD)工具集成。

2、 Prometheus概述

Prometheus 是一款开源的监控和警报工具,最初由 SoundCloud 开发,现已成为 Cloud Native Computing Foundation(CNCF)的一部分。它旨在帮助用户监控其应用程序和系统的性能,并能够发现故障、进行警报和分析。

以下是 Prometheus 的一些关键特点和概述:

  1. 多维数据模型: Prometheus 使用多维数据模型来存储时间序列数据,这意味着每个样本可以与任意数量的键/值标签相关联。这种灵活性使得用户可以以灵活的方式对数据进行查询和分析。
  2. 灵活的查询语言: Prometheus 提供了 PromQL(Prometheus Query Language),这是一种强大而灵活的查询语言,可以用于从 Prometheus 中提取和处理数据。
  3. 数据采集: Prometheus 通过称为 Exporters 的插件来采集数据。Exporters 可以将各种系统和服务的指标暴露给 Prometheus,例如应用程序、操作系统、数据库等。
  4. 警报管理: Prometheus 具有内置的警报管理功能,可以通过配置警报规则来触发警报。这些警报可以发送到各种通知渠道,如电子邮件、Slack 等。
  5. 可扩展性: Prometheus 是一个高度可扩展的系统,可以通过水平扩展来处理大量的时间序列数据。它支持多种存储后端,包括本地磁盘存储和远程存储系统。
  6. 社区支持: 作为 CNCF 项目的一部分,Prometheus 拥有一个庞大而活跃的社区,不断提供新的功能、改进和支持。

总的来说,Prometheus 是一个功能强大且灵活的监控系统,适用于各种规模的环境,并且可以与其他工具集成,以构建强大的监控解决方案。

有关Prometheus的详细介绍,请参考《揭秘Prometheus:诞生之旅与核心组件全解析》这篇文章

二、准备k8s环境

1、k8s集群搭建

如果还未搭建k8s集群,请参考《深度解析:Kubernetes 1.28.2集群安装过程中的关键步骤》这篇文章

2、集群状态检查

[root@master ~]# kubectl get node

三、部署Prometheus 

1、创建名称空间

创建一个名为Prometheus的名称空间,Prometheus所有的组件都在这个名称空间下运行

[root@master ~]# kubectl create ns prometheus
namespace/prometheus created

2、安装node-exporter

node-exporter资源官网地址:Download | Prometheus

离线镜像资源我已经放到资源列表中了,大家自行下载即可

下载后,在各个节点上导入

准备YAML文件

[root@master ~]# cat node-export.yaml 
# 输入如下内容
apiVersion: apps/v1
kind: DaemonSet
metadata:name: node-exporternamespace: prometheuslabels:name: node-exporter
spec:selector:matchLabels:name: node-exportertemplate:metadata:labels:name: node-exporterspec:hostPID: truehostIPC: truehostNetwork: truecontainers:- name: node-exporterimage: docker.io/prom/node-exporter:v1.8.0imagePullPolicy: IfNotPresentports:- containerPort: 9100securityContext:privileged: trueargs:- --path.procfs- /host/proc- --path.sysfs- /host/sys- --collector.filesystem.ignored-mount-points- '"^/(sys|proc|dev|host|etc)($|/)"'volumeMounts:- name: devmountPath: /host/dev- name: procmountPath: /host/proc- name: sysmountPath: /host/sys- name: rootfsmountPath: /rootfstolerations:- key: "node-role.kubernetes.io/master"operator: "Exists"effect: "NoSchedule"volumes:- name: prochostPath:path: /proc- name: devhostPath:path: /dev- name: syshostPath:path: /sys- name: rootfshostPath:path: /
  • apiVersion 指定了 Kubernetes API 的版本为 apps/v1。
  • kind 指定了资源的类型为 DaemonSet,即守护进程集。
  • metadata 下的 name 字段指定了 DaemonSet 的名称为 node-exporter,namespace 字段指定了 DaemonSet 所属的命名空间为 prometheus。
  • spec 下定义了 DaemonSet 的规范。
  • selector 指定了选择器,用于选择要控制的 Pod。
  • template 定义了要创建的 Pod 的模板,其中包含了 Pod 的元数据和规范。
  • hostPID: true、hostIPC: true、hostNetwork: true:指定了容器可以使用主机的 PID、IPC 和网络命名空间。
  • containers 下定义了要运行的容器,这里定义了一个名为 node-exporter 的容器。
  • image 指定了容器的镜像为 docker.io/prom/node-exporter:v1.8.0。
  • ports 定义了容器暴露的端口,这里将容器的端口 9100 映射到了宿主机上。
  • securityContext 下的 privileged: true 表示容器具有特权访问。
  • args 下指定了容器启动时的参数,这里配置了 Node Exporter 的参数。
  • volumeMounts 下定义了容器挂载的卷。
  • tolerations 下定义了容忍策略,表示容器可以容忍某些节点上的特定条件。
  • volumes 下定义了宿主机的卷,用于挂载到容器中。

查看Pod状态

访问测试,使用curl命令,如果有返回值,则部署成功

3、安装Prometheus server

离线镜像资源我已经放到资源列表中了,大家自行下载即可

下载后,在各个节点上导入

然后,在node1节点上,为Prometheus server创建一个数据目录

[root@node1 ~]# mkdir /data
[root@node1 ~]# chmod 777 /data/

为prometheus server创建一个sa,并分配权限

[root@master ~]# kubectl create serviceaccount prometheus -n prometheus
serviceaccount/prometheus created
[root@master ~]# kubectl create clusterrolebinding prometheus-clusterrolebinding -n prometheus --clusterrole=cluster-admin  --serviceaccount=prometheus:prometheus
clusterrolebinding.rbac.authorization.k8s.io/prometheus-clusterrolebinding created

 

编写Prometheus的config配置文件

[root@master ~]# vim prometheus-config.yaml 
#输入以下内容
---
kind: ConfigMap
apiVersion: v1
metadata:labels:app: prometheusname: prometheus-confignamespace: prometheus
data:prometheus.yml: |global:scrape_interval: 15sscrape_timeout: 10sevaluation_interval: 1mscrape_configs:- job_name: 'kubernetes-node'kubernetes_sd_configs:- role: noderelabel_configs:- source_labels: [__address__]regex: '(.*):10250'replacement: '${1}:9100'target_label: __address__action: replace- action: labelmapregex: __meta_kubernetes_node_label_(.+)- job_name: 'kubernetes-node-cadvisor'kubernetes_sd_configs:- role:  nodescheme: httpstls_config:ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crtbearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/tokenrelabel_configs:- action: labelmapregex: __meta_kubernetes_node_label_(.+)- target_label: __address__replacement: kubernetes.default.svc:443- source_labels: [__meta_kubernetes_node_name]regex: (.+)target_label: __metrics_path__replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor- job_name: 'kubernetes-apiserver'kubernetes_sd_configs:- role: endpointsscheme: httpstls_config:ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crtbearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/tokenrelabel_configs:- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]action: keepregex: default;kubernetes;https- job_name: 'kubernetes-service-endpoints'kubernetes_sd_configs:- role: endpointsrelabel_configs:- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]action: keepregex: true- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]action: replacetarget_label: __scheme__regex: (https?)- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]action: replacetarget_label: __metrics_path__regex: (.+)- source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]action: replacetarget_label: __address__regex: ([^:]+)(?::\d+)?;(\d+)replacement: $1:$2- action: labelmapregex: __meta_kubernetes_service_label_(.+)- source_labels: [__meta_kubernetes_namespace]action: replacetarget_label: kubernetes_namespace- source_labels: [__meta_kubernetes_service_name]action: replacetarget_label: kubernetes_name
  •  global 部分定义了全局的抓取配置,包括抓取间隔 scrape_interval、超时时间 scrape_timeout 和评估间隔 evaluation_interval。
  • scrape_configs 部分定义了要抓取的目标列表,每个 job_name 对应一个抓取目标配置。在这个示例中,有以下几个抓取目标:
  • kubernetes-node:抓取 Kubernetes 节点的指标,通过 Kubernetes 的服务发现配置 kubernetes_sd_configs,并通过 relabel_configs 将抓取地址从 :10250 替换为 :9100。
  • kubernetes-node-cadvisor:抓取 Kubernetes 节点的 cAdvisor 指标,通过 Kubernetes 的服务发现配置和 TLS 配置,以及 relabel_configs 对地址和路径进行替换和重写。
  • kubernetes-apiserver:抓取 Kubernetes API Server 的指标,通过 Kubernetes 的服务发现配置和 TLS 配置,以及 relabel_configs 保留相关标签。
  • kubernetes-service-endpoints:抓取 Kubernetes 服务的指标,通过 Kubernetes 的服务发现配置和 relabel_configs 对地址、路径和标签进行替换和重写。
  • 每个抓取目标配置中都包含了 kubernetes_sd_configs,用于从 Kubernetes 中发现相应的目标,以及 relabel_configs,用于对抓取地址、标签等进行转换和处理。

创建configMap

[root@master ~]# kubectl  apply -f prometheus-config.yaml

 编写部署Prometheus server的YAML文件

[root@master ~]# vim prometheus-deploy.yaml 
---
apiVersion: apps/v1
kind: Deployment
metadata:name: prometheus-servernamespace: prometheuslabels:app: prometheus
spec:replicas: 1selector:matchLabels:app: prometheuscomponent: server#matchExpressions:#- {key: app, operator: In, values: [prometheus]}#- {key: component, operator: In, values: [server]}template:metadata:labels:app: prometheuscomponent: serverannotations:prometheus.io/scrape: 'false'spec:nodeName: node1serviceAccountName: prometheuscontainers:- name: prometheusimage: prom/prometheus:v2.51.1imagePullPolicy: IfNotPresentcommand:- prometheus- --config.file=/etc/prometheus/prometheus.yml- --storage.tsdb.path=/prometheus- --storage.tsdb.retention=720h- --web.enable-lifecycleports:- containerPort: 9090protocol: TCPvolumeMounts:- mountPath: /etc/prometheusname: prometheus-config- mountPath: /prometheus/name: prometheus-storage-volumevolumes:- name: prometheus-configconfigMap:name: prometheus-config- name: prometheus-storage-volumehostPath:path: /datatype: Directory

部署prometheus server

[root@master ~]# kubectl apply -f  prometheus-deploy.yaml

查看pod状态

4、创建Service

为Prometheus server创建一个service,用于我们外部访问

[root@master ~]# vim prometheus-svc.yaml 
#输入如下内容
apiVersion: v1
kind: Service
metadata:name: prometheusnamespace: prometheuslabels:app: prometheus
spec:type: NodePortports:- port: 9090targetPort: 9090protocol: TCPselector:app: prometheuscomponent: server

 创建service

[root@master ~]# kubectl apply -f  prometheus-svc.yaml

查看service的nodeport端口

四、访问测试

在浏览器输入node ip + service端口 

点击Status并点击Targets,如果能显示下面的内容,说明监控数据采集成功 

目前采集的目录并不适合直接阅读,还需要配合Grafana进行数据的展示,关于Grafana,我们将在后期的章节中介绍

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Prometheus的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!

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

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

相关文章

2024年生物医学、医学图像与信号处理国际会议(ICBMISP2024)

2024年生物医学、医学图像与信号处理国际会议(ICBMISP2024) 会议简介 2024年国际生物医学、医学成像和信号处理会议(ICBMISP2024)很高兴邀请您提交主题为“生物医学、医学图像和信号处理的当前挑战和未来前景”的原稿。通过ICBMISP2024,生物…

idea-自我常见配置

1. 主题配置 2. 显示方法分隔符 Editor->General->Appearance 3. 忽略大小写提示 Editor->General->Code Completion 4. 自动导包 Editor->general->Auto Import 5. 取消单行显示Tabs Editor->General->Editor Tabs 效果如下图: 6. 设置…

HarmonyOS NEXT星河版之美团外卖点餐功能实战(下)

文章目录 一、购物车逻辑1.1 购物车及加减菜1.2 菜品的加减---方案一1.3 菜品的加减---方案二1.4 购物车View完善1.5 清空购物车1.5 购物车数量和价格 二、小结 一、购物车逻辑 1.1 购物车及加减菜 在utils目录下新建CartStore.ets文件,如下: import …

Vue3的CRUD模版(附Demo)

目录 前言模版 前言 用惯Vue2之后,在碰Vue3后,整体还是有所区别 此文主要做一个回顾总结 假设界面如下: 可CRUD,对应的新增 添加一些必选项: 其中数据库的设计如下: 模版 对应需要注意参数位置、初始…

(41)5.6-5.8数据结构(栈和队列的应用和数组)

1.栈在括号匹配中的应用 #define _CRT_SECURE_NO_WARNINGS #define MaxSize 10 typedef struct { char data[MaxSize];//静态数组存放栈中元素 int top; //栈顶指针 }SqStack;//初始化栈 void InitStack(SqStack& S);//判断栈是否为空 bool StackEmpty(SqStack S…

Feign 第一次调用为什么会很慢?

feign调用的大致过程? Feign进行远程调用的,这里面包括,注册中心、负载均衡、FeignClient之间的关系,微服务通过不论是eureka、nacos也好注册到服务端,Feign是靠Ribbon做负载的,而Ribbon需要拿到注册中心的…

从零开始构建现代深度学习框架:数据支持、网站链接与代码步骤

文章目录 一、数据支持二、网站链接三、代码步骤1. 导入必要的库和模块2. 加载和预处理数据(以MNIST为例)3. 定义模型结构4. 编译模型5. 训练模型6. 评估模型 一、数据支持 在构建深度学习框架的过程中,数据是不可或缺的。以下是一些可能用到…

android进阶-Binder

参考:Android——Binder机制-CSDN博客 机制:Binder是一种进程间通信的机制 驱动:Binder是一个虚拟物理设备驱动 应用层:Binder是一个能发起进程间通信的JAVA类 Binder相对于传统的Socket方式,更加高效Binder数据拷贝…

豆芽机置入语音芯片WTN6040-8S:开启智能生活新篇章,让豆芽制作更便捷有趣

豆芽机的开发背景: 豆芽作为一种营养丰富、味道鲜美的食品,深受广大消费者的喜爱。然而,传统的豆芽生产过程繁琐,需要耗费大量的时间和人力,且存在生产效率低、质量不稳定等问题。随着人们生活节奏的加快和对健康饮食的…

DataLab-数据分析的Ai辅助工具

添加图片注释,不超过 140 字(可选)DataLab是一个由DataCamp提供的强大在线数据分析平台,它通过AI技术简化了数据处理流程,使得用户无需编程或数据分析的高级技能即可快速获取数据洞察。它支持多种数据源,包…

C++多态实现原理详解

阅读引言: 我想象了一下, 假如人有突然问我什么是多态, 我该如何给别人说清楚呢?所以写下这篇文章, 希望大家看完有所收获。 ①. 开胃小菜 先看这样一个开胃小菜 这里我有点小小的疑惑, 大小为啥是1。 在C…

Python | Leetcode Python题解之第74题搜索二维矩阵

题目&#xff1a; 题解&#xff1a; class Solution:def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:row,col len(matrix),len(matrix[0])row_l,row_r 0,row-1while row_l < row_r:m (row_lrow_r)//2if target < matrix[m][0]:row_r m-1…

使用 Docker 部署 VS Code in The Browser

1&#xff09;介绍 GitHub&#xff1a;https://github.com/coder/code-server 在日常学习工作中&#xff0c;Vscode 已成为我们首选的代码编辑器。然而&#xff0c;其局限性在于当我们从家到公司移动时&#xff0c;难以保持连续的编码体验。针对这一痛点&#xff0c;虽然市面上…

oracle 数据库与服务、实例与SID、表空间、用户与表模式

一、数据库与数据库服务: 概念:就是一个数据库的标识,在安装时就要想好,以后一般不修改,修改起来也麻烦,因为数据库一旦安装,数据库名就写进了控制文件,数据库表,很多地方都会用到这个数据库名。是数据库系统的入口,它会内置一些高级权限的用户如SYS,SYSTEM等。我们…

11.买卖股票的最佳时机Ⅰ

文章目录 题目简介题目解答解法一&#xff1a;一次遍历代码&#xff1a;复杂度分析&#xff1a; 题目链接 大家好&#xff0c;我是晓星航。今天为大家带来的是 买卖股票的最佳时机面试题Ⅰ 相关的讲解&#xff01;&#x1f600; 题目简介 题目解答 解法一&#xff1a;一次遍历…

怎么把手机ip地址变成了外省

在日常使用中&#xff0c;有时我们可能因为某些原因需要快速切换手机的IP地址&#xff0c;特别是当需要从一个省份切换到另一个省份的IP时。这种需求可能来源于网络访问限制、地理位置相关服务的使用、或者网络安全等方面的考虑。那么&#xff0c;怎么把手机IP地址变成外省呢&a…

Adobe Premiere Pro v24.3.0 解锁版 (领先的视频编辑软件)

前言 Adobe Premiere Pro&#xff08;简称PR&#xff09;是一款知名的专业视频编辑软件&#xff0c;数字视频剪辑软件。主要用来编辑视频和音频&#xff0c;可以在RGB和YUV色彩空间中以高达32位色彩的视频分辨率对4K和更高质量的视频文件进行编辑&#xff0c;支持VST音频插件和…

C++ 搜索二叉树

目录 1.二叉搜索树概念 2. 实现二叉搜索树 2.1. 二叉搜索树的插入 2.2查找 2.3删除节点 3.二叉树的应用&#xff08;KV结构&#xff09; 1.二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为…

Web界面加持!数据库备份神器,助你轻松备份数据!

使用这款带有Web界面的数据库备份神器&#xff0c;你可以轻松设置定时备份&#xff0c;确保数据安全无忧。备份结果即时通知&#xff0c;让你随时掌握备份状态。备份完成后&#xff0c;你将收到备份结果通知。无论是成功备份还是出现错误&#xff0c;你都能及时了解备份情况&am…

自适应熔断限流揭秘

原创 Chasen 拍码场 前言 自适应熔断与限流是在分布式系统中常用的机制&#xff0c;用于保护系统免受服务雪崩效应与突发流量影响。它能够根据系统的负载情况和性能指标自动调整限流策略&#xff0c;以确保系统能提供稳定可靠的服务&#xff0c;目前在业内已经有了不少的探索…