kubernetes第七篇:使用kubernetes部署prometheus+grafana监控系统(kubernetes工作实践类)(代码片段)

毛奇志 毛奇志     2022-10-21     547

关键词:

文章目录

一、前言

本文属于Kubernetes工作实践类,工作中,在机器上安装好了kubernetes之后,需要同时安装好prometheus+grafana监控。

所需配置文件:node-exporter.yaml + prometheus.yaml + grafana.yaml

二、K8s监控系统架构

2.1 Prometheus简介

prometheus 官网 :https://prometheus.io/
prometheus github :https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/prometheus

grafana 官网:https://grafana.com/grafana/dashboards

对于开发,
官网的价值在于所有API都在这里
github源码的价值在于下载下来,定制化修改一下,就可以打一个镜像
常用功能直接百度/谷歌都有人做过,实际问题直接百度/谷歌都有人解决过

2.2 Prometheus架构

2.3 Prometheus知识普及

1、支持pull、push数据添加方式
2、支持k8s服务发现
3、提供查询语言PromQL
4、时序(time series)是由名字(Metric)以及一组key/value标签定义的
5、数据类型

三、K8s监控系统搭建

3.1 三类数据采集metrics

metrics 是一个接口 然后将 metrics 的数据给 普罗米修斯 ,下面介绍三类:
nodeExporter通过自己的 /metrics 接口得到数据,给prometheus;
静态pod通过自带的 /metrics 接口得到数据,给prometheus;

第一,K8S集群每个服务器数据

通过NodeExporter:https://github.com/prometheus/node_exporter

k8s集群每个机器node都安装一个NodeExporter(使用daemonSet部署方式就要确保每个node都安装上了)

理论支持:exporter 是一个数据采集工具,除了Node Exporter之外,还有HAProxy Exporter、MySQL Exporter、Redis Exporter和Rabbitmq Exporter。

第二,K8S集群每个组件数据:k8s每个组件都有metrics接口,如下:

ETCD:https://ip:2379/metrics
APIServer:https://ip:6443/metrics
ControllerManager:https://ip:10252/metrics
Scheduler:https://ip:10251/metrics

理论支持:k8s四个静态pod的kubectl底层都是有 restful 风格的接口支持的,所以通过 /metrics 接口获取数据是可行的。

第三,容器数据:通过cAdvisor,

3.2 Prometheus+Grafana

在master上创建prometheus目录
网盘/课堂源码/*.yaml

(1)创建命名空间ns-monitor

(2)创建node-exporter
namespace.yaml node-exporter.yaml prometheus.yaml grafana.yaml ingress.yaml
kubectl apply -f namespace.yaml
kubectl get namespace

(3)部署prometheus pod
包含rbac认证、ConfigMap等 注意 :记得修改prometheus.yaml文件中的ip为master的ip和path[PV需要使用到]

(4)部署grafana

(5)增加域名访问[没有域名好像没有灵魂] 前提 :配置好ingress controller和域名解析

3.3 实践一下:将prometheus+grafana搭建起来

3.3.1 搭建

# 下载好镜像(所需要的三个镜像都可以下载到,无需科学上网)
docker pull prom/node-exporter:v0.16.0
docker pull prom/prometheus:latest
docker pull grafana/grafana:latest

# 新建目录和命名空间,并上传三个yaml到目录中
mkdir /root/ns-monitor   # 用来存放三个yaml文件
kubectl create ns ns-monitor  

# 配置好nfs和需要新增的目录
mkdir /nfs/data/prometheus
mkdir /nfs/data/grafana

# 第一步,安装nfs
yum install -y nfs-utils

# 第二步,创建nfs目录并授予权限  /nfs/data/nginx     这个目录就是nfs ip那个目录
# 创建nfs目录
mkdir -p /nfs/data/
# 授予权限
chmod -R 777 /nfs/data

# 第三步,编辑export文件并保存
# 编辑export文件   对于/nfs/data目录,授予可读可写权限、根目录权限、同步数据权限
vi /etc/exports
  /nfs/data *(rw,no_root_squash,sync)
# 使得配置生效
exportfs -r
# 查看生效
exportfs

# 第四步,启动rpcbind、nfs服务并验证
# 启动rpcbind、nfs服务,并验证两个服务启动 ps -ef|grep rpcbind  ps -ef|grep nfs
systemctl restart rpcbind && systemctl enable rpcbind
systemctl restart nfs && systemctl enable nfs
# 查看rpc服务的注册情况
rpcinfo -p localhost
# showmount测试     
# showmount命令用于查询NFS服务器的相关信息     -e或--exports  显示NFS服务器的输出清单。
showmount -e master-ip  
showmount -e 192.168.100.151

3.3.2 分步测试

注意分步验证:
验证node exporter
验证 普罗米修斯
验证 grafana

3.3.2.1 安装 node exporter 测试好了

3.3.2.2 使用kubernetes部署prometheus

关于prometheus.yaml,从界面验证各个yaml

(1) 验证 kubectl get all -n ns-monitor | kubectl get pv,pvc -A

(2) 持久化:验证 pv pvc 去 /nfs/data/prometheus 目录下

(3) configmap:验证 configmap 去service discovery

(4) rbac:验证 rbac 能运行起来就验证了 (rbac是apiserver四特性中的第二特性,如果rbac配置错误,无法apply成功)

(5) deployment-service:验证 deployment service 能看到界面就验证好了


kubectl get all -n ns-monitor 服务启动成功
kubectl get pv,pvc -A 持久化绑定bound成功

验证启动:192.168.100.151:30841 (prometheus服务的 nodePort 暴露的出来端口)

http://192.168.100.151:30841/targets 查看所有的/metrics的数据被prometheus监控到了,如下:

进入 /nfs/data/prometheus ,这里表示持久化完成

3.3.2.3 grafana测试成功

最后解释一下,pv pvc 如何匹配上的

3.3.3 Grafana将同一个集群中的prometheus配置为数据源datasource



3.3.4 Grafana导入Dashboard和查看Dashboard

3.3.4.1 Grafana导入看板Dashboard的三种方式


所有的dashboard看板实际就是一个json文件,三个红色框框表示三种方式

第一种,将电脑本地的JSON导入到Grafana中
第二种,官网下载地址:https://grafana.com/grafana/dashboards,进入到官网,将ID复制过来,点击右边的Load


第三种,直接将JSON字符串的内容复制过来,点击下面的Load

3.3.4.2 Grafana查看看板Dashboard

四、尾声

finish!!!

Learn technology well, Day Day Up !

kubernetes第七篇:pod进阶controller进阶resource和dashboard(代码片段)

文章目录一、前言二、Pod进阶学习之路2.1Pod的生命周期Lifecycle2.2Pod的重启策略RestartPolicy2.3静态Pod2.4Pod的健康检查2.5ConfigMap2.5.1ConfigMap的创建创建方式1:命令行创建configmap创建方式2:根据配置文件中创建configmap创建方式3&#... 查看详情

flask第七篇flask中的wtforms使用

一、简单介绍flask中的wtformsWTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。安装:pip3installwtforms二、简单使用wtforms组件1、用户登录具体代码:fromflaskimportFlask,render_template,request,redirectfromwtforms.fieldsimp... 查看详情

第七篇7.1章

1.继承起源  继承:根据‘已有的一个类’进行扩展,‘继承该类的属性和行为’来创建一个‘新的类’,已有的类称为‘父类’(超类,基类),新类称为‘子类’(派生类)   什么时候使用继承:使用继承不仅可以... 查看详情

第七篇使用uiview的animatewithduration方法制作简易动画

 importUIKitclassLolitaCircleButton:UIButton{privatevarcolor:UIColorprivatevarimageURL:Stringinit(color:UIColor,imageURL:String){self.color=colorself.imageURL=imageURLsuper.init(frame:CGRectZero) 查看详情

第七篇:面向对象高级

第七篇:面向对象高级   PYTHON-绑定方法反射内置函数PYTHON-组合封装多态property装饰器 查看详情

docker系列-第七篇docker构建springboot应用

1.基于Dockerfile构建SpringBoot镜像1.1准备工作将SpringBoot项目通过maven打成jar包mvncleanpackage#使用maven打包项目1.2使用Dockerfile构建镜像step1在存放jar所在目录下创建Dockerfile文件touchDockerfilestep2编辑Dockerfile增加以下内容FROMjava:8MAINTAINERniuga 查看详情

docker系列-第七篇docker构建springboot应用

1.基于Dockerfile构建SpringBoot镜像1.1准备工作将SpringBoot项目通过maven打成jar包mvncleanpackage#使用maven打包项目1.2使用Dockerfile构建镜像step1在存放jar所在目录下创建Dockerfile文件touchDockerfilestep2编辑Dockerfile增加以下内容FROMjava:8MAINTAINERniuga 查看详情

第七篇:使用fcntl函数获取,设置文件的状态标志

前言    当打开一个文件的时候,我们需要指定打开文件的模式(只读,只写等)。那么在程序中如何获取,修改这个文件的状态标志呢?本文将告诉你如何用fcntl函数获取指定文件的状态标志。解决思路   ... 查看详情

springcloud第七篇|声明式服务调用feign

本文是SpringCloud专栏的第七篇文章,了解前六篇文章内容有助于更好的理解本文:SpringCloud第一篇|SpringCloud前言及其常用组件介绍概览SpringCloud第二篇|使用并认识Eureka注册中心SpringCloud第三篇|搭建高可用Eureka注册中心SpringCloud第四... 查看详情

第七篇camunda系列-身份服务(代码片段)

身份服务  在流程定义中在任务结点的assignee固定设置任务负责人,在流程定义时将参与者固定设置在.bpmn文件中,如果临时任务负责人变更则需要修改流程定义,系统可扩展性差。针对这种情况可以给任务设置多个候选人或... 查看详情

第七篇图像分类的评价指标

文章目录摘要混淆矩阵准确率(Accuracy)精确率(Precision)召回率(Recall)F1-score代码样例 查看详情

混合编程jni第七篇之jni的命令行们(代码片段)

 系列目录:【混合编程Jni】系列目录_香菜聊游戏的博客-CSDN博客        今天将继续JNI的学习,jni编程中常使用的一些命令行工具如何使用事半功倍,今天就快速的过一下,希望在接下来的使用中... 查看详情

第七篇图像分类的评价指标

文章目录摘要1、混淆矩阵2、准确率(Accuracy)3、精确率(Precision)4、召回率(Recall)5、F1-score6、代码样例 查看详情

第七篇:两个经典的文件io程序示例

前言    本文分析两个经典的C++文件IO程序,提炼出其中文件IO的基本套路,留待日后查阅。程序功能  程序一打印用户指定的所有文本文件,程序二向用户指定的所有文本文件中写入数据。程序一代码及其注释1#... 查看详情

springboot之旅第七篇-docker

一、引言记得上大三时,要给微机房电脑安装系统,除了原生的操作系统外,还要另外安装一些必要的开发软件,如果每台电脑都重新去安装的话工作量就很大了,这个时候就使用了windows镜像系统,我们将要安装的软件装好打... 查看详情

第七篇-列表式app:listactivity及listview

一、新建一个emptyactivity的项目。二、修改MainActivity.java:extendsAppCompactActivity改为extendsListActivity。注释掉setContentView(R.layout.activity_main);packagecom.example.aimee.listapp;importandroid.app.ListActivity;im 查看详情

html+css第七篇-表格

表格标签:table表格thead表格头tbody表格主体tfoot表格尾tr表格行th元素定义表头td元素定义表格单元表格样式重置table{border-collapse:collapse;}单元格间隙合并th,td{padding:0;}重置单元格默认填充colspan属性规定单元格可横跨的列数。<tdco... 查看详情

directx11第七篇光照模型——环境光

      本系列文章主要翻译和参考自《Real-Time3DRenderingwithDirectXandHLSL》一书(感谢原书作者),同时会加上一点个人理解和拓展,文章中如有错误,欢迎指正。      这里是书中的代码和资源。      本... 查看详情