(k8s)Kubernetes部署Promehteus

转载:Kubernetes(k8s)部署Promehteus

 

一、概述

在1.8版本以后heapster由metrics-server替代;从k8s的v1.11版本开始已经全面转向以Prometheus为核心的新监控体系架构;kube-prometheus 中包含了 prometheus 监控所用到的所有组件,当然也包含 prometheus-operator。

Helm中心仓库的PrometheusOperator Chart,在2020年9月已经不维护了,新的Chart在Prometheus Community的Repo中,叫 kube-prometheus-stack,使用时需要先添加该Repo。

heapster-》metrics-server-》prometheus-operator -》kube-prometheus-》kube-prometheus-stack

  • prometheus-operator GitHub地址

  • kube-prometheus GitHub地址

  • kube-prometheus-stack GitHub地址

1)metrics-server简介

metrics-server 通过kubelet(cAdvisor)获取监控数据,主要作用是为kube-scheduler,HPA等k8s核心组件,以及kubectl top命令和Dashboard等UI组件提供数据来源。

【注意】如果要部署prometheus,就不用部署了metrics-server了,否则冲突,推荐只部署prometheus,所以这里也只讲prometheus的部署。

2)Prometheus简介

Prometheus是一个开源监控系统,它前身是SoundCloud的警告工具包。从2012年开始,许多公司和组织开始使用Prometheus。

Prometheus的主要特征有:

  • 多维度数据模型

  • 灵活的查询语言

  • 不依赖分布式存储,单个服务器节点是自主的

  • 以HTTP方式,通过pull模型拉去时间序列数据

  • 也通过中间网关支持push模型

  • 通过服务发现或者静态配置,来发现目标服务对象

  • 支持多种多样的图表和界面展示,grafana也支持它

组件
Prometheus生态包括了很多组件,它们中的一些是可选的:

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

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

  • 支持短生命周期的PUSH网关

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

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

  • 警告管理器

  • 命令行查询工具

  • 其他各种支撑工具

3)Prometheus Operator

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

4)metrics-server&Promehteus对比&特性

  • 使用metric-server收集数据给k8s集群内使用,如kubectl,hpa,scheduler等

  • 使用prometheus-operator部署prometheus,存储监控数据

  • 使用kube-state-metrics收集k8s集群内资源对象数据

  • 使用node_exporter收集集群中各节点的数据

  • 使用prometheus收集apiserver,scheduler,controller-manager,kubelet组件数据

  • 使用alertmanager实现监控报警

  • 使用grafana实现数据可视化

5)Prometheus Operator VS kube-prometheus

最开始是Heapster+cAdvisor方式监控,这是Prometheus Operator出现之前的k8s监控方案。后来出现了Prometheus Operator,但是目前Prometheus Operator已经不包含完整功能,完整的解决方案已经变为kube-prometheus。

  • 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自定义监控,具体包含下面的组件

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

    2. Highly available Prometheus:创建高可用的Prometheus

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

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

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

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

    7. Grafana:进行图像展示

二、安装kube-prometheus

前面我们学习了Heapster+cAdvisor方式监控,这是Prometheus Operator出现之前的k8s监控方案。后来出现了Prometheus Operator,但是目前Prometheus Operator已经不包含完整功能,完整的解决方案已经变为kube-prometheus。项目地址为:https://github.com/coreos/kube-prometheus。

1)安装git

$ yum install -y git

2)下载kube-prometheus

# 下载
$ git clone https://github.com/prometheus-operator/kube-prometheus.git
$ cd kube-prometheus/manifests
# yaml文件比较多,下面进行归档
$ mkdir -p serviceMonitor prometheus adapter node-exporter blackbox kube-state-metrics grafana alertmanager operator other/{nfs-storage,ingress}
$ mv alertmanager-* alertmanager/ && mv blackbox-exporter-* blackbox/ &&  mv grafana-* grafana/ && mv kube-state-metrics-* kube-state-metrics/ && mv node-exporter-*  node-exporter/ && mv prometheus-adapter-* adapter/ && mv prometheus-* prometheus/ && mv kubernetes-serviceMonitor* serviceMonitor/
$ 

3)修改镜像源

国外镜像源某些镜像无法拉取,我们这里修改prometheus-operator,prometheus,alertmanager,kube-state-metrics,node-exporter,prometheus-adapter的镜像源为国内镜像源。我这里使用的是中科大的镜像源。

# 查找
$ grep -rn 'quay.io' *
# 批量替换
$ sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' `grep "quay.io" -rl *`
# 再查找
$ grep -rn 'quay.io' *
$ grep -rn 'image: ' *

4)修改类型为NodePort

为了可以从外部访问prometheus,alertmanager,grafana,我们这里修改promethes,alertmanager,grafana的service类型为NodePort类型。

1、修改prometheus的service
# 设置对外访问端口:30080
$ cat prometheus-service.yaml

2、修改grafana的service
# 设置对外访问端口:30081
$ cat grafana-service.yaml

3、修改alertmanager的service
# 设置对外访问端口:30082
$ cat alertmanager-service.yaml

4、安装CRD和prometheus-operator

【温馨提示】CustomResourceDefinition:自定义资源

$ kubectl apply -f setup/

下载prometheus-operator镜像需要花费几分钟,这里等待几分钟,直到prometheus-operator变成running状态

$ kubectl get pod -n monitoring

5、安装prometheus, alertmanager, grafana, kube-state-metrics, node-exporter等资源
$ kubectl apply -f .

稍等一段时间再查看,查看命名空间monitoring下面的pod状态,直到monitoring命名空间下所有pod都变为running状态,就大功告成了。

$ kubectl get pod -n monitoring

如果上面下载镜像失败,可以使用以下地址下载,当然也可以去hub.docker.com下载。

链接:https://pan.baidu.com/s/1JUx_m-JAJ8gUeJE-Gmhzig
提取码:8888

6、工作流程

Prometheus Server定期从配置好的Exporters/Jobs中拉metrics,或者来着pushgateway发过来的metrics,或者其它的metrics,收集完后运行定义好的alert.rules,记录时间序列或者向Alertmanager推送警报。

7、组件说明
  • node_exporter:用来监控运算节点上的宿主机的资源信息,需要部署到所有运算节点

  • kube-state-metric:prometheus采集k8s资源数据的exporter,能够采集绝大多数k8s内置资源的相关数据,例如pod、deploy、service等等。同时它也提供自己的数据,主要是资源采集个数和采集发生的异常次数统计

  • blackbox_exporter:监控业务容器存活性

  • prometheus-adapter:由于本身prometheus属于第三方的 解决方案,原生的k8s系统并不能对Prometheus的自定义指标进行解析,就需要借助于k8s-prometheus-adapter将这些指标数据查询接口转换为标准的Kubernetes自定义指标。

8、验证
$ kubectl get svc -n monitoring

浏览器访问
prometheus:http://192.168.0.113:30080/

grafana:http://192.168.0.113:30081/login
默认账号/密码:admin/admin

alertmanager:http://192.168.0.113:30082/

9、Grafana添加数据源

1、修改prometheus地址

10、导入DashBoards

dashboards地址:https://grafana.com/grafana/dashboards/
1)从官网下载模板,导入模板

2)kubernetes模板导入(k8s模板)

三、使用Helm3安装kube-prometheus-stack

# 添加repo
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm repo update
$ helm search repo prometheus-community/prometheus

1)下载kube-prometheus-stack包

# 拉包
$ helm pull prometheus-community/kube-prometheus-stack
# 解包
$ tar -xf kube-prometheus-stack-19.2.3.tgz

查看所需要的镜像,最好提前下载镜像,要不然很大可能会因为下载镜像失败而安装失败。

$ grep -A3 'image:' kube-prometheus-stack/values.yaml

这里提供镜像下载地址,当前也可以去hub.docker.com网站上下载,或者其它地方下载,如果下载不到对应的版本号,可以下载最新的,然后tag一个就行了。

链接:https://pan.baidu.com/s/1NDHckhvVgDngq98BXlHLFw
提取码:8888

2)导入镜像(所有节点都执行)

$ docker image load -i k8s.gcr.io-ingress-nginx-kube-webhook-certgen-v1.0.tar
$ docker image load -i quay.io-prometheus-alertmanager-v0.22.2.tar
$ docker image load -i quay.io-prometheus-operator-prometheus-operator-v0.50.0.tar
$ docker image load -i quay.io-prometheus-prometheus-v2.28.1.tar

3)安装kube-prometheus-stack

# 创建命名空间
$ kubectl create ns kube-prometheus-stack
$ helm install mykube-prometheus-stack kube-prometheus-stack \-n kube-prometheus-stack \--set prometheus-node-exporter.hostRootFsMount=false \--set prometheus.ingress.enabled=true \--set prometheus.ingress.hosts='{prometheus.k8s.local}' \--set prometheus.ingress.paths='{/}' \--set prometheus.ingress.pathType=Prefix \--set alertmanager.ingress.enabled=true \--set alertmanager.ingress.hosts='{alertmanager.k8s.local}' \--set alertmanager.ingress.paths='{/}' \--set alertmanager.ingress.pathType=Prefix \--set grafana.ingress.enabled=true \--set grafana.ingress.hosts='{grafana.k8s.local}' \--set grafana.ingress.paths='{/}' \--set grafana.ingress.pathType=Prefix

这里我没跑起来,机器跑的东西太多,已经不能支撑跑kube-prometheus-stack了,有兴趣的小伙伴可以试试~

发现K8s v1.21+,PSP已经被废弃,不建议使用,完全移除在v1.25版本。再不学习它就学不到了。PSP官方讲解

4)清理

$ helm uninstall mykube-prometheus-stack -n kube-prometheus-stack

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

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

相关文章

Kubernetes(K8S)实战:构建高可用的微服务架构

Kubernetes(K8S)实战:构建高可用的微服务架构 在云计算与容器化技术日新月异的今天,Kubernetes(简称K8S)凭借其强大的容器编排能力,已成为企业构建云原生应用的首选平台。本文将深入探讨Kubernetes的核心概念、架构设计原则,并通过一个实际案例——构建一个高可用的微…

pg入门18—如何使用pg gis

1. 下载postgre gis镜像 2. 运行镜像 docker run -p 15432:5432 -d -e POSTGRES_PASSWORDAb123456! postgis/postgis:12-3.4-alpine 3. 使用gis # 进入容器,登录pgdocker exec -it bash# 登录数据库psql -U postgres# 创建数据库CREATE DATABASE mygeotest;# 使用…

算法:双指针题目练习

文章目录 算法:双指针移动零复写零快乐数盛最多水的容器有效三角形的个数查找总价格为目标值的两个商品三数之和四数之和 总结 算法:双指针 移动零 定义两个指针,slow和fast.用这两个指针把整个数组分成三块. [0,slow]为非零元素,[slow1,fast-1]为0元素,[fast,num.length]为未…

数据库面试题整理

数据库面试题整理 整理了下常见的有关数据的面试题,持续更新中 1. mysql数据库事务的四个特性: 原子性(Atomicity):事务要么做,要么不做一致性(Consistency):使数据库从…

Nginx泛域名 解析的匹配前缀绑定或转发到子目录

网站的目录结构为: # tree /home/wwwroot/landui.com /home/wwwroot/landui.com ├── bbs │ └── index.html └── www └── index.html 2 directories, 2 files /home/wwwroot/landui.com为nginx的安装目录下默认的存放源代码的路径。 bbs为论坛…

GPU使用

0. 写这篇文章的背景 最近还是在使用GPU、连接远程服务器上出现了一点问题,发现在这方面的知识还是学得很模糊。(最让人感到困惑的是之前GPU的使用都没有问题) 总结一下最近的问题: 1.每一次连接远程服务器(选择的Ubuntu22.04),使用服务器的文件夹还好(关键是现在用…

YARN性能优化高频面试题及答案

目录 高频面试题及答案1. 什么是YARN?它在Hadoop生态系统中的作用是什么?2. 如何通过合理配置`Container`大小来优化YARN性能?3. 如何通过调整`ResourceManager`的调度策略优化YARN性能?4. 如何优化YARN中`ResourceManager`和`NodeManager`的内存配置?5. 如何通过调节`Map…

【Web】御网杯信息安全大赛2024 wp(全)

目录 input_data admin flask 如此多的FLAG 一夜醒来之全国CTF水平提升1000倍😋 input_data 访问./.svn后随便翻一翻拿到flag admin dirsearch扫出来 访问./error看出来是java框架 测出来是/admin;/路由打Spring View Manipulation(Java)的SSTI https:/…

基于ECC簇内分组密钥管理算法的无线传感器网络matlab性能仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于ECC簇内分组密钥管理算法的无线传感器网络matlab性能仿真,对比网络通信开销,存活节点数量,网络能耗以及数据通信量四个指标…

Unity射击游戏开发教程:(36)敌人关卡生成器的设计和开发

丰富多样地游戏关卡生成器能自动生成不同的关卡地图和游戏内容,以增加游戏的可玩性和挑战性。关卡生成可以基于随机算法或者预设的规则生成不同的地图布局、敌人位置、道具位置等。 定义关卡生成器WaveSpawner 如何设置通用的 Wave Spawner?我将此 Wave Spawner 脚本附加到…

QT 中中文乱码的问题处理

在使用 QT 开发应用程序时,可能会遇到中文乱码的问题,这是因为 QT 使用的编码方式和系统的编码方式不一致导致的。下面是 QT 中中文乱码的问题处理的方法: 设置编码方式 第一步:在 QT 中,可以使用 QTextCodec 对象来设…

【Linux篇】TCP/IP协议(笔记)

目录 一、TCP/IP协议族体系结构 1. 数据链路层 (1)介绍 (2)常用协议 ① ARP协议(Address Resolve Protocol,地址解析协议) ② RARP协议(Reverse Address Resolve Protocol&…

js进阶——this和对象原型

1. this 在 JavaScript 中的应用 在 JavaScript 中,this 的值取决于函数的执行上下文和调用方式。以下是 this 在不同上下文中的行为解释: A. 全局上下文(非严格模式) 在全局执行上下文中,this 指向全局对象&#x…

华为为什么要做三折叠屏手机?

前些天我做了一条视频,关于讲华W的新的三折叠屏手机。我说我有点失望,结果引起了华W的同事的一些关注。于是,华W几位高管都跑过来,跟我解释为什么会出现这样的一个状态。 我才知道,这款手机他们其实是亏着钱在卖的。因…

C++速通LeetCode中等第1题-字母异位词分组

思路要点&#xff1a;对字符串排序&#xff0c;排序结果存放在map的key中&#xff0c;排序结果相同的字符串存放到map的value中 。 class Solution { public:string keys;vector<vector<string>> groupAnagrams(vector<string>& strs) {vector<vecto…

EECS498 Deep Learning for Computer Vision (一)软件使用指南

#最近开始学习深度学习的相关基础知识&#xff0c;记录一下相关笔记及学习成果# learning&#xff1a;building artificial systems that learn from data and experience deep learning(a set of machine learning): hierarchical learning algorithms with many "laye…

海洋大地测量基准与水下导航系列之二国外海底大地测量基准和海底观测网络发展现状(上)

海底大地控制网建设构想最先由美国斯克里普斯海洋研究所(Scripps Institution of Oceanography,SIO)提出&#xff0c;目前仅有少数发达国家具备相应技术条件。美国、日本、俄罗斯和欧盟等发达国家通过布测先进的海底大地控制网&#xff0c;不断完善海洋大地测量基准基础设施&am…

6、等级保护政策内容

数据来源&#xff1a;6.等级保护政策内容_哔哩哔哩_bilibili 信息安全产品管理与响应 等级管理 对信息系统中使用的信息安全产品实行按等级管理&#xff0c;信息安全事件应分等级响应与处置。 预测评服务由测评公司和咨询公司提供预测评服务&#xff0c;根据技术要求和测评要…

c语言中define使用方法

在C语言中&#xff0c;#define指令是预处理指令&#xff0c;用于定义宏。其常用格式是&#xff1a; 定义常量&#xff1a; #define 常量名 常量值 例子&#xff1a; #define PI 3.14159 #define MAX_SIZE 100 这里&#xff0c;PI和MAX_SIZE在代码中会被替换为其对应的值。没有…

深度学习01-概述

深度学习是机器学习的一个子集。机器学习是实现人工智能的一种途径&#xff0c;而深度学习则是通过多层神经网络模拟人类大脑的方式进行学习和知识提取。 深度学习的关键特点&#xff1a; 1. 自动提取特征&#xff1a;与传统的机器学习方法不同&#xff0c;深度学习不需要手动…