K8s: Prometheus 监控主机 和 K8s 集群

Prometheus 监控主机 和 K8s 集群


1 )搭建 Prometheus

  • 创建对应 ServiceAccount
    • 达成角色访问的目的,避免所有人都能看到
  • 创建配置相关的 configmap
    • 定义了一堆的任务,收集各个层面的监控数据
  • 创建告警规则相关的configmap
    • 比如内存大于 75% 就加入一些标签
    • 并且可以出发一些事件
  • 创建Prometheus的缺省用户及密码
    • 缺省用户/密码为admin/admin: echo “YWRtaW4=” | base64 -D
  • 部署Prometheus Server的Deployment
    • 对外提供 容器 9090 端口,并挂载2个configMap
    • 原始docker image是prom/prometheus:v1.7.0
  • 部署Prometheus Server的Service
    • 部署后即可在外部访问
    • :30091/graph 这个路径
    • 可以选择下拉菜单,看到不同维度的数据
    • 可以看到 Prometheus 的报表没有那么强大

2 ) 一键部署

apiVersion: v1
kind: Namespace
metadata:name: monitoring
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: prometheus
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: prometheus
subjects:
- kind: ServiceAccountname: prometheus-k8snamespace: monitoring
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: prometheus
rules:
- apiGroups: [""]resources:- nodes- nodes/proxy- services- endpoints- podsverbs: ["get", "list", "watch"]
- apiGroups: [""]resources:- configmapsverbs: ["get"]
- nonResourceURLs: ["/metrics"]verbs: ["get"]
---
apiVersion: v1
kind: ServiceAccount
metadata:name: prometheus-k8snamespace: monitoring
---
apiVersion: v1
kind: ConfigMap
metadata:creationTimestamp: nullname: prometheus-corenamespace: monitoring
data:prometheus.yaml: |global:scrape_interval: 10sscrape_timeout: 10sevaluation_interval: 10srule_files:- "/etc/prometheus-rules/*.rules"scrape_configs:# https://github.com/prometheus/prometheus/blob/master/documentation/examples/prometheus-kubernetes.yml#L37- job_name: 'kubernetes-nodes'scheme: httpstls_config:ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crtbearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/tokenkubernetes_sd_configs:- role: noderelabel_configs:#- source_labels: [__address__]#  regex: '(.*):10250'#  replacement: '${1}:10255'#  target_label: __address__- 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# https://github.com/prometheus/prometheus/blob/master/documentation/examples/prometheus-kubernetes.yml#L79- job_name: 'kubernetes-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# https://github.com/prometheus/prometheus/blob/master/documentation/examples/prometheus-kubernetes.yml#L119- job_name: 'kubernetes-services'metrics_path: /probeparams:module: [http_2xx]kubernetes_sd_configs:- role: servicerelabel_configs:- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_probe]action: keepregex: true- source_labels: [__address__]target_label: __param_target- target_label: __address__replacement: blackbox- source_labels: [__param_target]target_label: instance- action: labelmapregex: __meta_kubernetes_service_label_(.+)- source_labels: [__meta_kubernetes_namespace]target_label: kubernetes_namespace- source_labels: [__meta_kubernetes_service_name]target_label: kubernetes_name# https://github.com/prometheus/prometheus/blob/master/documentation/examples/prometheus-kubernetes.yml#L156- job_name: 'kubernetes-pods'kubernetes_sd_configs:- role: podrelabel_configs:- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]action: keepregex: true- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]action: replacetarget_label: __metrics_path__regex: (.+)- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]action: replaceregex: (.+):(?:\d+);(\d+)replacement: ${1}:${2}target_label: __address__- action: labelmapregex: __meta_kubernetes_pod_label_(.+)- source_labels: [__meta_kubernetes_namespace]action: replacetarget_label: kubernetes_namespace- source_labels: [__meta_kubernetes_pod_name]action: replacetarget_label: kubernetes_pod_name- source_labels: [__meta_kubernetes_pod_container_port_number]action: keepregex: 9\d{3}- job_name: 'kubernetes-cadvisor'scheme: httpstls_config:ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crtbearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/tokenkubernetes_sd_configs:- role: noderelabel_configs:- action: labelmap- 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---
apiVersion: v1
kind: ConfigMap
metadata:creationTimestamp: nullname: prometheus-rulesnamespace: monitoring
data:cpu-usage.rules: |ALERT NodeCPUUsageIF (100 - (avg by (instance) (irate(node_cpu{name="node-exporter",mode="idle"}[5m])) * 100)) > 75FOR 2mLABELS {severity="page"}ANNOTATIONS {SUMMARY = "{{$labels.instance}}: High CPU usage detected",DESCRIPTION = "{{$labels.instance}}: CPU usage is above 75% (current value is: {{ $value }})"}instance-availability.rules: |ALERT InstanceDownIF up == 0FOR 1mLABELS { severity = "page" }ANNOTATIONS {summary = "Instance {{ $labels.instance }} down",description = "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minute.",}low-disk-space.rules: |ALERT NodeLowRootDiskIF ((node_filesystem_size{mountpoint="/root-disk"} - node_filesystem_free{mountpoint="/root-disk"} ) / node_filesystem_size{mountpoint="/root-disk"} * 100) > 75FOR 2mLABELS {severity="page"}ANNOTATIONS {SUMMARY = "{{$labels.instance}}: Low root disk space",DESCRIPTION = "{{$labels.instance}}: Root disk usage is above 75% (current value is: {{ $value }})"}ALERT NodeLowDataDiskIF ((node_filesystem_size{mountpoint="/data-disk"} - node_filesystem_free{mountpoint="/data-disk"} ) / node_filesystem_size{mountpoint="/data-disk"} * 100) > 75FOR 2mLABELS {severity="page"}ANNOTATIONS {SUMMARY = "{{$labels.instance}}: Low data disk space",DESCRIPTION = "{{$labels.instance}}: Data disk usage is above 75% (current value is: {{ $value }})"}mem-usage.rules: |ALERT NodeSwapUsageIF (((node_memory_SwapTotal-node_memory_SwapFree)/node_memory_SwapTotal)*100) > 75FOR 2mLABELS {severity="page"}ANNOTATIONS {SUMMARY = "{{$labels.instance}}: Swap usage detected",DESCRIPTION = "{{$labels.instance}}: Swap usage usage is above 75% (current value is: {{ $value }})"}ALERT NodeMemoryUsageIF (((node_memory_MemTotal-node_memory_MemFree-node_memory_Cached)/(node_memory_MemTotal)*100)) > 75FOR 2mLABELS {severity="page"}ANNOTATIONS {SUMMARY = "{{$labels.instance}}: High memory usage detected",DESCRIPTION = "{{$labels.instance}}: Memory usage is above 75% (current value is: {{ $value }})"}---
apiVersion: v1
kind: Secret
data:admin-password: YWRtaW4=admin-username: YWRtaW4=
metadata:name: grafananamespace: monitoring
type: Opaque
---
apiVersion: apps/v1
kind: Deployment
metadata:name: prometheus-corenamespace: monitoringlabels:app: prometheuscomponent: core
spec:replicas: 1selector:matchLabels:app: prometheuscomponent: coretemplate:metadata:name: prometheus-mainlabels:app: prometheuscomponent: corespec:serviceAccountName: prometheus-k8scontainers:- name: prometheus#image: prom/prometheus:v1.7.0image: prom/prometheus:v1.7.0args:- '-storage.local.retention=12h'- '-storage.local.memory-chunks=500000'- '-config.file=/etc/prometheus/prometheus.yaml'- '-alertmanager.url=http://alertmanager:9093/'ports:- name: webuicontainerPort: 9090resources:requests:cpu: 500mmemory: 500Mlimits:cpu: 500mmemory: 500MvolumeMounts:- name: config-volumemountPath: /etc/prometheus- name: rules-volumemountPath: /etc/prometheus-rulesvolumes:- name: config-volumeconfigMap:name: prometheus-core- name: rules-volumeconfigMap:name: prometheus-rules
---
apiVersion: v1
kind: Service
metadata:name: prometheusnamespace: monitoringlabels:app: prometheuscomponent: coreannotations:prometheus.io/scrape: 'true'
spec:type: NodePortports:- port: 9090protocol: TCPname: webuinodePort: 30091selector:app: prometheuscomponent: core
---

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

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

相关文章

【1762】java校园单车投放系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

一、源码特点 java校园单车投放管理系统是一套完善的java web信息管理系统 采用serlvetdaobean,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S 模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#…

C语言基础知识笔记——万字学习记录

Hi,大家好,我是半亩花海。本文主要参考浙大翁恺老师的C语言讲解以及其他博主的C语言学习笔记,进而梳理C语言的基础知识,为后续系统性学习数据结构和其他语言等知识夯实一定的基础。(其他博主学习笔记的链接包括&#x…

网络服务SSH-远程访问及控制

一.SSH远程管理 1.SSH介绍 SSH(Secure Shell)是一种安全通道协议,最早是由芬兰的一家公司开发出来,并且在IETF (Internet Engineering Task Force)的网络草案基础上制定而成的标准协议。主要用来实现字符…

案例-部门管理-删除

黑马程序员JavaWeb开发教程 文章目录 一、查看页面原型二、查看接口文档三、开发1、Controller2、Service(1)service接口层(3)service实现层 3、Mapper4、Postman 一、查看页面原型 二、查看接口文档 三、开发 1、Controller 因…

android博客

csdn千里马 yi诺千金_Android,Android Framework从入门到入土,前端开发-CSDN博客 阿豪 Android Framework 坂田 https://djlr0d3mqe.feishu.cn/wiki/TvArwktx5iNO00k0G2WcUH9QnBf?fromtab_home#part-KmC4d5iTRoNYSUxEkKlc7O1Lnbe 阿豪 https://yuandaimaahao.gitee.io/A…

使用python写一个识别人脸

人脸识别的原理涉及多个领域,包括图像处理、特征提取和机器学习等。以下是一个简化的概述,并展示了如何使用Python和OpenCV库来实现基本的人脸识别。 人脸识别原理概述 图像预处理:首先,我们需要对输入的图像进行预处理&#xf…

短视频账号“四部定位法”,让流量噌噌上涨 沈阳短视频剪辑培训

在当下短视频的风潮中,企业纷纷涉足这一领域,希望通过短视频平台吸引用户、提升品牌知名度、促进销售转化。 然而,面对海量的内容和激烈的竞争,企业如何才能在短视频领域脱颖而出? 在企业涉足短视频领域之前&#xf…

用友裁应届

下半年准备来用友的24应届生们,请三思!!! 我是23届某9研究生,2月份用友以绩效低为由被裁(我一个应届生跟老员工比绩效,搞笑呢)。 半年被裁,找工作太难了&a…

# 使用 spring boot 时,@Autowired 注解 自动装配注入时,变量报红解决方法:

使用 spring boot 时,Autowired 注解 自动装配注入时,变量报红解决方法: 1、使用 Resource 代替 Autowired 注解,根据类型注入改为根据名称注入(建议)。 2、在 XXXMapper 上添加 Repository 注解&#xff0…

Git的基本概念和使用方式

Git 是一个分布式版本控制系统,用于跟踪文件的变化并协调多人在同一个项目中的工作。它可以帮助团队协作开发,管理代码版本,以及追踪文件的修改历史。 Git 的基本概念包括仓库(repository)、分支(branch&a…

区块链技术:NFG元宇宙电商模式

大家好,我是微三云周丽 随着互联网技术的迅猛发展,电子商务行业逐渐崛起为现代经济的重要支柱。而在这一浪潮中,元宇宙电商以其独特的商业模式和巨大的发展潜力,成为行业的新宠。其中,NFG作为元宇宙电商模式的代表&am…

【Transformer原理解析】

Transformer是一种基于自注意力机制(Self-Attention Mechanism)的深度学习模型,它在自然语言处理(NLP)领域取得了显著的成就,特别是在机器翻译任务中。以下是Transformer原理的简要介绍以及使用PyTorch实现…

单链表-java

此次我们主要通过数组来模拟一下单链表,并完成一些基本的功能。 文章目录 前言 一、单链表 二、思路模拟 1.引入变量解释 2.链表初始化 3.在头结点后插入一个结点 4.表示在第k个数后面插入一个数 5. 把第k个数后面的一个数删除掉 三、代码如下 1.代码如下&#xff1…

NDK 入门(二)—— 调音小项目

NDK 入门系列主要介绍 JNI 的相关内容,目录如下: NDK 入门(一)—— JNI 初探 NDK 入门(二)—— 调音小项目 NDK 入门(三)—— JNI 注册与 JNI 线程 NDK 入门(四&#xff…

数字滤波器设计笔记1

系统结构 1.先利用matlab的simulink和FDA进行滤波器建模设计,通过仿真后,确定模型达到相应的性能要求,再利用verilog进行电路设计。最后使用modelsim进行功能验证。其中testbench的输入数据,利用matlab模型的输入数据。 2.Matlab…

IOS 设置UIButton按钮的选中状态样式

设置按钮的边框 self.titleBtn.backgroundColor UIColor.whiteColor;self.titleBtn.layer.borderColor [UIColor colorWithHexString:"#B3B3B3" withAlpha:0.3].CGColor;self.titleBtn.layer.borderWidth 0.5;self.titleBtn.clipsToBounds YES;self.titleBtn.hei…

SQL Server的基本操作示例

我可以为您提供一些SQL Server的基本操作示例。以下是增删改查的简单示例: 增加数据: INSERT INTO 表名 (列1, 列2, 列3) VALUES (值1, 值2, 值3);示例: INSERT INTO Employees (FirstName, LastName, Age) VALUES (John, Doe, 30);删除数…

最最普通程序员,如何利用工资攒够彩礼,成为人生赢家

今天我们不讲如何提升你的专业技能去涨工资,不讲面试技巧如何跳槽涨工资,不讲如何干兼职赚人生第一桶金,就讲一个最最普通的程序员,如何在工作几年后,可以攒够彩礼钱,婚礼酒席钱,在自己人生大事…

Flutter 之PopScope组件的基本用法,拦截系统返回键

Flutter中提供了PopScope组件替代了原来的WillPopScope组件,PopScope组件的作用就是管理系统的返回操作: Manages system back gestures.,该组件提供给来三个参数: const PopScope({super.key,required this.child,//布局Widgetthis.canPop = true,this

Oracle用户授权的一些知识点

Oracle用户授权的一些知识点 常见用户授权场景跨模式授权的场景常见用户授权场景 数据库对象创建权限修改权限删除权限执行权限Procedure(存储过程)CREATE PROCEDURE 或 CREATE ANY PROCEDURE自己SCHEMA内无需额外授权;或 ALTER ANY PROCEDURE自己SCHEMA内无需额外授权;或 …