k8s集群 安装配置 Prometheus+grafana+alertmanager

k8s集群 安装配置 Prometheus+grafana+alertmanager

  • k8s环境如下:
    • 机器规划:
  • node-exporter组件安装和配置
    • 安装node-exporter
    • 通过node-exporter采集数据
      • 显示192.168.40.180主机cpu的使用情况
      • 显示192.168.40.180主机负载使用情况
  • Prometheus server安装和配置
    • 创建sa账号,对sa做rbac授权
    • 创建prometheus数据存储目录
    • 安装Prometheus server服务
    • 通过deployment部署prometheus
    • 给prometheus pod创建一个service
    • Prometheus热加载
  • 可视化UI界面Grafana的安装和配置
    • 安装Grafana
      • Grafana界面接入Prometheus数据源
    • 配置grafana界面:
      • 导入的监控模板,可在如下链接搜索
      • 如果Grafana导入Prometheusz之后,发现仪表盘没有数据,如何排查?
  • 安装kube-state-metrics组件
    • kube-state-metrics是什么?
    • 安装kube-state-metrics组件

k8s环境如下:

k8s集群: k8s的控制节点
ip:192.168.40.110
主机名:k8smaster1
配置:4vCPU/4Gi内存

k8s的工作节点:
ip:192.168.40.111
主机名:k8snode1
配置:4vCPU/4Gi内存

k8s版本1.25

机器规划:

我的实验环境使用的k8s集群是一个master节点和一个node节点
master节点的机器ip是192.168.40.110,主机名是k8smaster1
node节点的机器ip是192.168.40.111,主机名是k8snode1

node-exporter组件安装和配置

node-exporter介绍
node-exporter可以采集机器(物理机、虚拟机、云主机等)的监控指标数据,能够采集到的指标包括CPU, 内存,磁盘,网络,文件数等信息。

安装node-exporter

node-exporter.tar.gz镜像压缩包上传到k8s的各个节点,手动解压:
链接:https://pan.baidu.com/s/1EBsJPfWDO3c1qMeaESe5Ig?pwd=7bbw
提取码:7bbw

kubectl create ns monitor-sa
ctr -n=k8s.io images import node-exporter.tar.gz
docker load -i node-exporter.tar.gz

node-export.yaml
链接:https://pan.baidu.com/s/1wqaDok9afK58AGTR-QlvGg?pwd=fjfr
提取码:fjfr

cat  node-export.yaml
kind: DaemonSet  #可以保证k8s集群的每个节点都运行完全一样的podspec:hostPID: truehostIPC: truehostNetwork: true
# hostNetwork、hostIPC、hostPID都为True时,表示这个Pod里的所有容器
#会直接使用宿主机的网络,直接与宿主机进行IPC(进程间通信)通信,可以看到宿主机里正在运行的所有进程。
#加入了hostNetwork:true会直接将我们的宿主机的9100端口映射出来
#从而不需要创建service 在我们的宿主机上就会有一个9100的端口cpu: 0.15  #这个容器运行至少需要0.15核cpusecurityContext:privileged: true  #开启特权模式args:- --path.procfs  #配置挂载宿主机(node节点)的路径- /host/proc- --path.sysfs  #配置挂载宿主机(node节点)的路径- '"^/(sys|proc|dev|host|etc)($|/)"'#通过正则表达式忽略某些文件系统挂载点的信息收集volumeMounts:- name: devmountPath: /host/dev- name: procmountPath: /host/proc- name: sysmountPath: /host/sys- name: rootfsmountPath: /rootfs
#将主机/dev、/proc、/sys这些目录挂在到容器中,这是因为我们采集的很多节点数据都是通过这些文件来获取系统信息的。

通过kubectl apply更新node-exporter.yaml文件

kubectl apply -f node-export.yaml

查看node-exporter是否部署成功

kubectl get pods -n monitor-sa

显示如下,看到pod的状态都是running,说明部署成功

在这里插入图片描述

通过node-exporter采集数据

显示192.168.40.180主机cpu的使用情况

curl  http://虚拟机ip:9100/metrics
curl http://192.168.40.110:9100/metrics | grep node_cpu_seconds

在这里插入图片描述

  • #HELP:解释当前指标的含义,上面表示在每种模式下node节点的cpu花费的时间,以s为单位
  • #TYPE:说明当前指标的数据类型,上面是counter类型
node_cpu_seconds_total{cpu="0",mode="idle"}
  • cpu0上idle进程占用CPU的总时间,CPU占用时间是一个只增不减的度量指标,从类型中也可以看出node_cpu的数据类型是counter(计数器)
  • counter计数器:只是采集递增的指标

显示192.168.40.180主机负载使用情况

curl http://192.168.40.180:9100/metrics | grep node_load

在这里插入图片描述

  • node_load1该指标反映了当前主机在最近一分钟以内的负载情况,系统的负载情况会随系统资源的使用而变化,因此node_load1反映的是当前状态,数据可能增加也可能减少,从注释中可以看出当前指标类型为gauge(标准尺寸)
  • gauge标准尺寸:统计的指标可增加可减少

Prometheus server安装和配置

创建sa账号,对sa做rbac授权

创建一个sa账号monitor

kubectl create serviceaccount monitor -n monitor-sa 

把sa账号monitor通过clusterrolebing绑定到clusterrole上

kubectl create clusterrolebinding monitor-clusterrolebinding -n monitor-sa --clusterrole=cluster-admin  --serviceaccount=monitor-sa:monitor

注意:行上面授权可能回报错,那就需要下面的授权命令

kubectl create clusterrolebinding monitor-clusterrolebinding-1  -n monitor-sa --clusterrole=cluster-admin   --user=system:serviceaccount:monitor:monitor-sa

创建prometheus数据存储目录

在k8s集群的xianchaonode1节点上创建数据存储目录

#在节点创建
mkdir /data
chmod 777 /data/

安装Prometheus server服务

创建一个configmap存储卷,用来存放prometheus配置信息
通过kubectl apply更新configmap
prometheus-cfg.yaml文件上传到k8s控制节点k8smaster1上:
链接:https://pan.baidu.com/s/1lQGQLp7ikDHSanOusSMTWQ?pwd=w6w4
提取码:w6w4

kubectl apply  -f  prometheus-cfg.yaml
cat prometheus-cfg.yaml
      scrape_interval: 15s  #采集目标主机监控据的时间间隔scrape_timeout: 10s  # 数据采集超时时间,默认10sevaluation_interval: 1m   #触发告警检测的时间,默认是1m#我们写了超过80%的告警,结果收到多条告警,但是真实超过80%的只有一个时间点。#这是另外一个参数影响的
evaluation_interval #这个是触发告警检测的时间,默认为1m。假如我们的指标是5m被拉取一次。
#检测根据evaluation_interval 1m一次,所以在值被更新前,我们一直用的旧值来进行多次判断,造成了1m一次,同一个指标被告警了4次。
scrape_configs:
#scrape_configs:配置数据源,称为target,每个target用job_name命名。又分为静态配置和服务发现- job_name: 'kubernetes-node'kubernetes_sd_configs:
#使用的是k8s的服务发现- role: node
# 使用node角色,它使用默认的kubelet提供的http端口来发现集群中每个node节点。relabel_configs:
#重新标记- source_labels: [__address__] #配置的原始标签,匹配地址regex: '(.*):10250'   #匹配带有10250端口的url
        replacement: '${1}:9100'  #把匹配到的ip:10250的ip保留target_label: __address__ #新生成的url是${1}获取到的ip:9100action: replace- action: labelmap 
#匹配到下面正则表达式的标签会被保留,如果不做regex正则的话,默认只是会显示instance标签regex: __meta_kubernetes_node_label_(.+)

通过deployment部署prometheus

镜像prometheus-2-2-1.tar.gz上传到k8s的工作节点k8snode1上,手动解压
链接:https://pan.baidu.com/s/1arlhVb0q-9tWe9KHZG1Htg?pwd=j6m1
提取码:j6m1

ctr -n=k8s.io images import prometheus-2-2-1.tar.gz
#1.24前用  docker load -i prometheus-2-2-1.tar.gz

prometheus-deploy.yaml 上传至k8smaster1
链接:https://pan.baidu.com/s/11QOcz5udgbMpxGoYD6pP9w?pwd=rkp6
提取码:rkp6

kubectl apply -f prometheus-deploy.yaml
cat prometheus-deploy.yaml- --storage.tsdb.path=/prometheus  #旧数据存储目录- --storage.tsdb.retention=720h    #何时删除旧数据,默认为15天。- --web.enable-lifecycle   #开启热加载

注意:在上面的prometheus-deploy.yaml文件有个nodeName字段,这个就是用来指定创建的这个prometheus的pod调度到哪个节点上,我们这里让nodeName=k8snode1,也即是让pod调度到k8snode1节点上,因为k8snode1节点我们创建了数据目录/data,所以大家记住:你在k8s集群的哪个节点创建/data,就让pod调度到哪个节点,nodeName根据你们自己环境主机去修改即可。

查看prometheus是否部署成功

kubectl get pods -n monitor-sa

在这里插入图片描述

给prometheus pod创建一个service

prometheus-svc.yaml文件上传到k8s的控制节点k8smaster1上:
链接:https://pan.baidu.com/s/1j9Nz7trUT6rgZ9kS-ANb7Q?pwd=hgql
提取码:hgql

kubectl apply -f prometheus-svc.yaml

查看service在物理机映射的端口

kubectl get svc -n monitor-sa

在这里插入图片描述

通过上面可以看到service在宿主机上映射的端口是31090,这样我们访问k8s集群的master1节点的ip:31090,就可以访问到prometheus的web ui界面了
#访问prometheus web ui界面
火狐浏览器输入如下地址:

http://192.168.40.110:31090/graph

可看到如下页面:

在这里插入图片描述

点击页面的Status->Targets,可看到如下,说明我们配置的服务发现可以正常采集数据
在这里插入图片描述

Prometheus热加载

为了每次修改配置文件可以热加载prometheus,也就是不停止prometheus,就可以使配置生效,想要使配置生效可用如下热加载命令:

kubectl get pods -n monitor-sa -o wide -l app=prometheus

在这里插入图片描述

10.244.249.2是prometheus的pod的ip地址,如何查看prometheus的pod ip

想要使配置生效可用如下命令热加载:

curl -X POST http://10.244.249.2:9090/-/reload
  • 热加载速度比较慢,可以暴力重启prometheus,如修改上面的prometheus-cfg.yaml文件之后,可执行如下强制删除:
kubectl delete -f prometheus-cfg.yaml
kubectl delete -f prometheus-deploy.yaml
  • 然后再通过apply更新:
kubectl apply -f prometheus-cfg.yaml
kubectl apply -f prometheus-deploy.yaml

注意:线上最好热加载,暴力删除可能造成监控数据的丢失

可视化UI界面Grafana的安装和配置

安装Grafana

镜像heapster-grafana-amd64_v5_0_4.tar.gz上传到k8s的工作节点k8snode1上,手动解压:
链接:https://pan.baidu.com/s/1CMP6Ju-Zi-4dmJy2eSVtew?pwd=fkls
提取码:fkls

ctr -n=k8s.io images import  heapster-grafana-amd64_v5_0_4.tar.gz

grafana.yaml文件上传到k8s的控制节点:

kubectl apply -f grafana.yaml

查看grafana是否创建成功:

kubectl get pods -n kube-system -l task=monitoring

在这里插入图片描述

Grafana界面接入Prometheus数据源

查看grafana前端的service

kubectl get svc -n kube-system | grep grafana  

在这里插入图片描述

登陆grafana,在浏览器访问
192.168.40.110:30551

配置grafana界面:

选择Create your first data source
Name: Prometheus
Type: Prometheus
HTTP 处的URL写 如下:

http://prometheus.monitor-sa.svc:9090

配置好的整体页面如下:
在这里插入图片描述

点击左下角Save & Test,出现如下Data source is working,说明prometheus数据源成功的被grafana接入了

导入的监控模板,可在如下链接搜索

https://grafana.com/dashboards?dataSource=prometheus&search=kubernetes

上面Save & Test测试没问题之后,就可以返回Grafana主页面
点击左侧+号下面的Import,出现如下界面
在这里插入图片描述

可直接导入node_exporter.json监控模板,这个可以把node节点指标显示出来
node_exporter.json
链接:https://pan.baidu.com/s/1lK43XIWKuMYiQoWBAtJJ-Q?pwd=j01k
提取码:j01k

在这里插入图片描述
在这里插入图片描述

docker_rev1.json,显示容器资源指标的
链接:https://pan.baidu.com/s/1F_9ApBvKCV3lkHvxPLP-OQ?pwd=wkph
提取码:wkph

导入docker_rev1.json监控模板,步骤和上面导入node_exporter.json步骤一样,导入之后显示如下:
在这里插入图片描述

如果Grafana导入Prometheusz之后,发现仪表盘没有数据,如何排查?

打开grafana界面,找到仪表盘对应无数据的图标
在这里插入图片描述

Edit之后出现如下:

在这里插入图片描述

node_cpu_seconds_total 就是grafana上采集的cpu的时间,需要到prometheus ui界面看看采集的指标是否是node_cpu_seconds_total

在这里插入图片描述

如果在prometheus ui界面输入node_cpu_seconds_total没有数据,那就看看是不是prometheus采集的数据是node_cpu_seconds_totals,怎么看呢?

在这里插入图片描述

安装kube-state-metrics组件

kube-state-metrics是什么?

  • kube-state-metrics通过监听API Server生成有关资源对象的状态指标,比如Node、Pod,需要注意的是kube-state-metrics只是简单的提供一个metrics数据,并不会存储这些指标数据,所以我们可以使用Prometheus来抓取这些数据然后存储,主要关注的是业务相关的一些元数据,
  • 比如Pod副本状态等;调度了多少个replicas?现在可用的有几个?多少个Pod是running/stopped/terminated状态?Pod重启了多少次?我有多少job在运行中。

安装kube-state-metrics组件

创建sa,并对sa授权
kube-state-metrics-rbac.yaml文件上传到k8s的控制节点:
链接:https://pan.baidu.com/s/1fNAovsSfabcQMTpX4AknnQ?pwd=m6r0
提取码:m6r0

kubectl apply -f kube-state-metrics-rbac.yaml

安装kube-state-metrics组件
kube-state-metrics_1_9_0.tar.gz组件上传到k8s各个工作节点,手动解压:
链接:https://pan.baidu.com/s/1UufIAWnnQgP1vYSTvushSw?pwd=uunh
提取码:uunh

ctr -n=k8s.io images import kube-state-metrics_1_9_0.tar.gz

kube-state-metrics-deploy.yaml上传到k8smaster1节点
链接:https://pan.baidu.com/s/1GnMeja2VQUwHXj9MPsCHqQ?pwd=n0o9
提取码:n0o9

kubectl apply -f kube-state-metrics-deploy.yaml

查看kube-state-metrics是否部署成功

kubectl get pods -n kube-system -l app=kube-state-metrics

在这里插入图片描述

创建service
kube-state-metrics-svc.yaml文件上传到k8s的k8smaster1节点:
链接:https://pan.baidu.com/s/1DjZuLFDcH9mjRXY6CHJNfw?pwd=uo52
提取码:uo52

kubectl apply -f kube-state-metrics-svc.yaml

查看service是否创建成功

kubectl get svc -n kube-system | grep kube-state-metrics

在这里插入图片描述

在grafana web界面导入Kubernetes Cluster (Prometheus)-1577674936972.json和Kubernetes cluster monitoring (via Prometheus) (k8s 1.16)-1577691996738.json

导入Kubernetes Cluster (Prometheus)-1577674936972.json文件
链接:https://pan.baidu.com/s/1SpGM2hb0uuEsyJaYnhE_Rw?pwd=u1dz
提取码:u1dz
在这里插入图片描述

在grafana web界面导入Kubernetes cluster monitoring (via Prometheus) (k8s 1.16)-1577691996738.json
链接:https://pan.baidu.com/s/1v-zwCmwqC3iRix1M5s_GnA?pwd=2jhl
提取码:2jhl
在这里插入图片描述

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

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

相关文章

PDF小工具poppler

1. 简介 介绍一下一个不错的PDF库poppler。poppler的官网地址在:https://poppler.freedesktop.org/ 它是一个PDF的渲染库,顾名思义,它的用途就是读取PDF文件,然后显示到屏幕(显示到屏幕上只是一种最狭义的应用,包括使用Windows上的GDI技术显示文件内容,当然可以渲染到…

k8s核心操作_存储抽象_K8S中使用ConfigMap抽取配置_实现配置热更新---分布式云原生部署架构搭建032

现在有个问题,是上面我们利用pv和pvc 就是持久卷 以及 持久卷申请,实现了对存储的,pod删除以后,对其使用的存储空间也进行了删除,那么还有个问题,对于redis这种我们希望,他的配置也管理起来. 比如这个redis的配置文件. 以后其他的配置文件也是这样. 使用配置文件的存储在k8s中…

服务器系统盘存储不够,添加数据盘并挂载(阿里云)

目录 1.获取数据盘设备名称 2.为数据盘创建分区 3.为分区创建文件系统 4.配置开机自动挂载分区 阿里云数据盘挂载说明链接:在Linux系统中初始化小于等于2 TiB的数据盘_云服务器 ECS(ECS)-阿里云帮助中心 1.获取数据盘设备名称 sudo fdisk -lu 运行结果如下所示…

uniapp转小程序,小程序转uniapp方法

🤵 作者:coderYYY 🧑 个人简介:前端程序媛,目前主攻web前端,后端辅助,其他技术知识也会偶尔分享🍀欢迎和我一起交流!🚀(评论和私信一般会回&#…

How to integrate GPT-4 model hosted on Azure with the gptstudio package

题意:怎样将托管在Azure上的GPT-4模型与gptstudio包集成? 问题背景: I am looking to integrate the OpenAI GPT-4 model into my application. Here are the details I have: Endpoint: https://xxxxxxxxxxxxxxx.openai.azure.com/Locatio…

SpringBoot集成MQTT实现交互服务通信

引言 本文是springboot集成mqtt的一个实战案例。 gitee代码库地址:源码地址 一、什么是MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe&…

插画毕业:成都亚恒丰创教育科技有限公司

【插画毕业:笔尖下的梦想绽放】 在这个色彩斑斓的世界里,有这样一群追梦者,他们以纸为舟,以笔为桨,穿梭于现实与想象的边界,用一幅幅生动的插画,绘制着属于自己的青春篇章。当毕业的钟声悄然响…

探索Facebook的最新更新:社交体验的新高度

Facebook作为全球领先的社交媒体平台,一直致力于不断创新和改进,以提供更优质的用户体验。近期,Facebook推出了一系列新的更新,旨在提升用户的社交互动体验和平台功能。本文将详细探讨这些最新更新,分析其对用户和社交…

06MFC之对话框--重绘元文件

文章目录 实现示例展示需要绘制的窗口/位置控件位置更新下一次示例粗细滑动部分更新重绘元文件(窗口变化内容消失)方法一:使用元文件方法二:兼容设备方法三:使用自定义类存储绘图数据除画笔外功能处理画笔功能处理保存前面画的线及色彩实现示例展示 需要绘制的窗口/位置 …

阿里云开源 Qwen2-Audio 音频聊天和预训练大型音频语言模型

Qwen2-Audio由阿里巴巴集团Qwen团队开发,它能够接受各种音频信号输入,对语音指令进行音频分析或直接文本回复。与以往复杂的层次标签不同,Qwen2-Audio通过使用自然语言提示简化了预训练过程,并扩大了数据量。 喜好儿网 Qwen2-Au…

HouseCrafter:平面草稿至3D室内场景的革新之旅

在室内设计、房地产展示和影视布景设计等领域,将平面草稿图快速转换为立体的3D场景一直是一个迫切的需求。HouseCrafter,一个创新的AI室内设计方案,正致力于解决这一挑战。本文将探索HouseCrafter如何将这一过程自动化并提升至新的高度。 一、定位:AI室内设计的革新者 Ho…

全国数据智能与智慧政务行业产教融合共同体学术年会暨广东行政职业学院(广东青年职业学院)第一届“求是论坛”成功举办

为进一步深化现代职业教育体系建设理论研究,丰富行业产教融合共同体实践探索,7月13日,全国数据智能与智慧政务行业产教融合共同体学术年会暨广东行政职业学院(广东青年职业学院)第一届“求是论坛”在广东行政职业学院&…

本地部署,强大的音频分离工具,spleeter

目录 什么是 Spleeter? Spleeter 的主要功能 如何使用 Spleeter? 安装 Spleeter 命令行安装 使用 Spleeter 分离音轨 其他分离模式 Docker安装 Spleeter 的应用场景 结论 https://github.com/deezer/spleeterhttps://github.com/deezer/spleet…

华为HCIP Datacom H12-821 卷41

1.多选题 以下关于BGP Atomic_Aggregate和Aggregator的描述,正确的是哪些项? A、Aggregator属性属于可选过渡属性 B、Atomic_Aggregate属于公认任意属性 C、收到携带Atomic_Aggregate属性的路由表示这条路由不能再度明细化 D、 Agregator表示某条路由可能出现…

Linux中的环境变量

一、环境变量定义 一般是指在操作系统中用来指定操作系统运行环境的一些参数 如:我们在编写C/C代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但 是照样可以链接成功,生成可执行程序&#xff0c…

操作系统基础 (二)

目录 六. 运行机制两种指令两种CPU状态两种程序 七. 中断和异常中断的作用中断类型中断机制基本原理 八. 系统调用定义系统调用与库函数系统调用实现的功能系统调用过程 九. OS体系结构内核分层结构模块化外核 十. 系统引导相关的数据磁盘数据主存数据 系统引导过程总述 十一. …

uniapp小程序上传pdf文件

<template><view class"mainInnBox"><view class"formBox"><!-- 注意&#xff0c;如果需要兼容微信小程序&#xff0c;最好通过setRules方法设置rules规则 --><u-form :model"form" ref"uForm" :rules&quo…

240717.LeetCode——2974.最小数字游戏

题目描述 你有一个下标从 0 开始、长度为 偶数 的整数数组 nums &#xff0c;同时还有一个空数组 arr 。Alice 和 Bob 决定玩一个游戏&#xff0c;游戏中每一轮 Alice 和 Bob 都会各自执行一次操作。游戏规则如下&#xff1a; 每一轮&#xff0c;Alice 先从 nums 中移除一个 …

JavaSE从零开始到精通

1.前置知识 JVM&#xff1a;java virtrual machine, java虚拟机, 专门用于执行java代码的一款软件。可以将class文件&#xff0c;转换为机器认识的机器码&#xff0c;因为我们的计算机只认识010101的二进制语言。JRE&#xff1a;java runtime enviroment, java运行时环境, jav…

关于Linux的面试题(实时更新中~)

一、软连接和硬连接的区别&#xff1a; 软连接创建方式 ln -s 被链接文件 链接文件 &#xff08;1&#xff09;软链接是一个链接文件&#xff1b; &#xff08;2&#xff09;软链接有着自己的 inode 号&#xff08;文件编号&#xff09;&#xff1b; &#xff08;3&#…