9-1 Kubernetes二进制部署的Prometheus实现服务发现

news2024/11/20 9:39:56

文章目录

  • 前言
  • 创建用户
  • 复制Token
  • 配置文件
    • 全局配置
    • Master节点发现
    • Node节点发现
    • Namespace Pod发现
    • 自定义Pod发现

前言

在上一章节介绍了 8-5 在Prometheus实现Kubernetes-apiserver及Coredns服务发现 基于K8s集群内部安装的Prometheus,添加服务发现时更加方便。Prometheus的安装方式有多种,详情参考 8-1 基于Operator和二进制安装Prometheus系统。

对于二进制部署的Prometheus,即集群外部的监控系统。配置服务发现时涉及到创建用户,授权,添加job,重写标签等。



创建用户

创建用户prometheus和密码:

---
# 创建用户
apiVersion: v1
kind: ServiceAccount
metadata:
  name: prometheus
  namespace: monitoring

---
# 创建密码
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
  name: monitoring-token
  namespace: monitoring
  annotations:
    kubernetes.io/service-account.name: "prometheus"

设置权限,并将用户与权限绑定:

---
# 设置权限
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: prometheus
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  - services
  - endpoints
  - pods
  - nodes/proxy
  # 对于基本资源可读可观察
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - "extensions"
  resources:
    - ingresses
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - configmaps
  - nodes/metrics
  # 配置资源只读
  verbs:
  - get
- nonResourceURLs:
  - /metrics
  verbs:
  - get
  
---
# 绑定权限
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: prometheus
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: prometheus
subjects:
- kind: ServiceAccount
  name: prometheus
  namespace: monitoring

复制Token

在K8s集群内查看secret 资源,复制token的值:

sudo kubectl describe secret monitoring-token -n monitoring
Name:         monitoring-token
Namespace:    monitoring
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: prometheus
              kubernetes.io/service-account.uid: da94b15f-55bb-4eba-9d20-52f0b33a9852

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1302 bytes
namespace:  10 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IkF3Y3h6QklHbXh3S1g3Nl9LNlBIcTNTVEQ3MWpJRU9NcEdJM2hTZDU4SzgifQ.eyJpc3
MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5poTd1njdbdMYlmaUuAPIT_5hY5D3pRgabQ6tysWc0QuFN_mn6U-E
nbBlka6ZUB3gjlvk4XBKZJutqHyFHtkc6RYN98kKSPeRBCXFd8vZROx9PsOjL1uIseox4IeaZ8BvGje3RkGHiyTp_djmc8eyBBA6DwtKKldsd
3hhuD0eX2hbbg2YZVbiYOkLK976gL5pX_8BPQeZ66McDTCPlaoiYOIcegVGwZs49kA4YlYV_A5bO8WUSvnKQfPK_74qLy0BGp-rx0gjTc7w

到K8s集群外的Prometheus服务器,粘贴token的值:

vim /apps/prometheus/k8s.token
eyJhbGciOiJSUzI1NiIsImtpZCI6IkF3Y3h6QklHbXh3S1g3Nl9LNlBIcTNTVEQ3MWpJRU9NcEdJM2hTZDU4SzgifQ.eyJpc3MiOiJrdWJlcm5l
GVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5poTd1njdbdMYlmaUuAPIT_5hY5D3pRgabQ6tysWc0QuFN_mn6U-EnbBlka6ZUB3gjlvk4
XBKZJutqHyFHtkc6RYN98kKSPeRBCXFd8vZROx9PsOjL1uIseox4IeaZ8BvGje3RkGHiyTp_djmc8eyBBA6DwtKKldsd3hhuD0eX2hbbg2YZVbi
OkLK976gL5pX_8BPQeZ66McDTCPlaoiYOIcegVGwZs49kA4YlYV_A5bO8WUSvnKQfPK_74qLy0BGp-rx0gjTc7w

配置文件

修改Prometheus全局配置,再依次添加收集node,pod,service,endpoint等工作。

全局配置

在二进制部署的Prometheus服务器,找出配置文件并修改:

vim /apps/prometheus/prometheus.yml

# my global config
global:
  # 每15秒收集一次信息
  scrape_interval: 15s 
  # 每15秒刷新一次规则
  evaluation_interval: 15s

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. 
  - job_name: "prometheus"
    # metrics_path defaults to '/metrics' 
    # scheme defaults to 'http'
    # 示例工作,收集服务器自己的运行指数:
    static_configs: 
      - targets: ["localhost:9090"]
      

Master节点发现

在上述通用配置文件prometheus.yml,末尾添加API Server工作:

# API Serevr 节点发现
  - job_name: 'kubernetes-apiservers-monitor' 
    kubernetes_sd_configs: 
    - role: endpoints
      # 填写一个master即可,会自动发现三个。
      api_server: https://192.168.100.191:6443
      # 连续该master所需的token
      tls_config:
        insecure_skip_verify: true
      bearer_token_file: /apps/prometheus/k8s.token
    scheme: https
    # 连续其它master所需的token
    tls_config:
      insecure_skip_verify: true
    bearer_token_file: /apps/prometheus/k8s.token
    relabel_configs:
    # 配置这些类型保留采集
    - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
      action: keep
      regex: default; kubernetes; https
    # 替换发现的服务端口、协议等
    - source_labels: [__address__]
      regex: '(.*):6443' 
      replacement: '${1}:9100' 
      target_label: __address__ 
      action: replace
    - source_labels: [__scheme__]
      regex: https
      replacement: http
      target_label: __scheme__ 
      action: replace

可以看到服务端口和协议变成了9100和http:

在这里插入图片描述

Node节点发现

在通用配置文件prometheus.yml,末尾添加Node节点发现:

# node 节点发现
  - job_name: 'kubernetes-nodes-monitor' 
    # 通过连接master,获取集群node信息
    kubernetes_sd_configs: 
    - role: node
      api_server: https://192.168.100.192:6443
      tls_config:
        insecure_skip_verify: true
      bearer_token_file: /apps/prometheus/k8s.token
    # 连接api-server所需的token
    scheme: http
    tls_config:
      insecure_skip_verify: true
    bearer_token_file: /apps/prometheus/k8s.token

    relabel_configs:     
    - source_labels: [__address__]
      # 10250是kubelet端口,即node节点。
      regex: '(.*):10250' 
      # 转换成exporter端口9100,采集节点信息。
      replacement: '${1}:9100' 
      target_label: __address__ 
      action: replace
    - source_labels: [__meta_kubernetes_node_label_failure_domain_beta_kubernetes_io_region]
      regex: '(.*)' 
      replacement: '${1}' 
      action: replace
      target_label: LOC
    - source_labels: [__meta_kubernetes_node_label_failure_domain_beta_kubernetes_io_region]
      regex: '(.*)' 
      replacement: 'NODE' 
      action: replace
      target_label: Type
    - source_labels: [__meta_kubernetes_node_label_failure_domain_beta_kubernetes_io_region]
      regex: '(.*)' 
      replacement: 'K8S-test' 
      action: replace
      target_label: Env
    - action: labelmap
      regex: __meta_kubernetes_node_label_(.+)

master也有kubelet,所以集群有6个节点:



Namespace Pod发现

在通用配置文件prometheus.yml,末尾添加Namespace Pod发现:

#指定namespace的pod
  - job_name: 'kubernetes-namespace-pod' 
    kubernetes_sd_configs: 
    - role: pod
      api_server: https://192.168.100.193:6443
      tls_config:
        insecure_skip_verify: true
      bearer_token_file: /apps/prometheus/k8s.token
      # 选择命名空间为monitoring
      namespaces:
        names: 
        - monitoring
    relabel_configs: 
    # 保留这些标签和值
    - action: labelmap
      regex: __meta_kubernetes_pod_label_(.+) 
      # 更换标签
    - source_labels: [__meta_kubernetes_namespace]
      action: replace
      target_label: kubernetes_namespace
    - source_labels: [__meta_kubernetes_pod_name]
      action: replace
      target_label: kubernetes_pod_name

可以发现7个实例有6个可采集,有1个pod是down因为没有安装cadvisor。

在这里插入图片描述

自定义Pod发现

要发现自定义Pod,首先创建Pod时要添加annotation_prometheus_io_scrape,值为true:

apiVersion: apps/v1
kind: Deployment
...
spec:
  template:
    metadata:
      annotations:
        prometheus.io/scrape: 'true'
...    

然后在通用配置文件prometheus.yml,末尾添加自定义Pod发现:

# 自定义Pod发现
  - job_name: 'kubernetes-condition-pod' 
    kubernetes_sd_configs: 
    - role: pod
      api_server: https://192.168.100.191:6443
      tls_config:
        insecure_skip_verify: true
      bearer_token_file: /apps/prometheus/k8s.token
	
    relabel_configs: 
    # 开启scrape的Pod才保留监控
    - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
      action: keep
      regex: true
    - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
      action: replace
      target_label: __metrics_path__
      regex: (.+) 
    - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
      action: replace
      regex: ([^:]+)(?::\d+)?;(\d+)
      replacement: $1:$2
      target_label: __address__
    - action: labelmap
      # 保留以下开头的标签和值
      regex: __meta_kubernetes_pod_label_(.+) 
    - source_labels: [__meta_kubernetes_namespace]
      action: replace
      target_label: kubernetes_namespace
    - source_labels: [__meta_kubernetes_pod_name]
      # 修改标签
      action: replace
      target_label: kubernetes_pod_name
    - source_labels: [__meta_kubernetes_pod_label_pod_template_hash]
      regex: '(.*)' 
      replacement: 'K8S-test' 
      action: replace
      target_label: Env

Prometheus已经收集符合条件的6个pod,但状态都是down。还需要在pod安装Prometheus插件,监控才能正常显示。



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

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

相关文章

二叉树遍历原理 | 深度优先-广度优先 | 栈-队列

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 14天阅读挑战赛 文章目录二叉树遍历原理队列和栈区别深度优先遍历(DFS)前序遍历(根-左-右)中序遍历(左-根-右)后序遍历(左-右-根)广度优先遍历(BFS)逐层遍历(上-下 | …

软件研发人效提升之道,法,术,器,势

在华为的寒气传递之前&#xff0c;笔者已经在思考和实战如何提高研发人效。目的目标很明确: 提高软件研发人效&#xff0c;所谓的软件人效&#xff0c;简单粗暴的定义就是以最低单位人均成本&#xff0c;快速&#xff0c;高质量&#xff0c;高频率&#xff0c;安全地交付软件产…

C++笔记之bitset使用

C++笔记之bitset使用 文章目录 C++笔记之bitset使用0.进制介绍1.cppreference2.常规使用3.用法总结3.1.bitset是什么3.2.使用方法3.3.相关使用函数3.4.转换函数0.进制介绍 1.cppreference

C语言高级教程-C语言数组(五):二维(多维)数组初始化和基于数组的综合实例->帽子选购问题

C语言高级教程-C语言数组&#xff08;五&#xff09;&#xff1a;二维&#xff08;多维&#xff09;数组初始化和基于数组的综合实例->帽子选购问题一、本文的编译环境二、二维数组的初始化三、三维数组的初始化四、使用for循环求三维数组元素值的和4.1、for循环求数组元素值…

行业周期分析的主要内容,怎么分析行业生命周期

如何分析经济周期&#xff1f; 很多人认为经济周期分析很难&#xff0c;很复杂。但是作为一个投资者&#xff0c;必须了解一定的经济周期分析原理。所以今天康少就用一张图来简单讲解下经济周期的分析。 一、经济周期判断1、经济趋向繁荣&#xff1a;普通股收益将大幅提高&am…

第07篇:巧用Spring类型转换, ConverterFormatter知识点学习。

公众号: 西魏陶渊明 CSDN: https://springlearn.blog.csdn.net 天下代码一大抄, 抄来抄去有提高, 看你会抄不会抄&#xff01; 文章目录一、前言1.1 类型转换1.2 格式化输出二、Converter 类型转换2.1 Converter2.1.1 接口定义2.1.2 接口功能2.2 ConverterFactory2.2.1 接口定义…

java8特性,lambda表达式,简写的演变及应用

&#x1f36c;博主介绍 &#x1f468;‍&#x1f393; 博主主页&#xff1a;chad_chang的主页 ✨主攻领域&#xff1a;【大数据】【java】【python】【面试分析】 文章目录lambda表达式1.1.简介1.1.1.什么是Lambda&#xff1f;1.1.2.为什么使用Lambda1.1.3.Lambda对接口的要求1…

【Linux】特别篇--SMBus 协议

【Linux】特别篇--SMBus 协议一、SMBus 简介二、SMBus 与 I2C 区别三、SMBus协议分析3.1 符号含义3.2 SMBus Quick Command3.3 SMBus Receive Byte3.4 SMBus Send Byte3.5 SMBus Read Byte3.6 SMBus Read Word3.7 SMBus Write Byte3.8 SMBus Write Word3.9 SMBus Block Read3.1…

672页21万字智慧高速数据中心大数据平台建设方案

目 录 第1章 设计总述 6 1.1 项目概述 6 1.1.1 项目名称 6 1.1.2 建设单位概况 6 1.1.3 公司具备的优势 6 1.2 对项目的理解分析 7 1.2.1 项目现状分析 7 1.2.2 建设目标分析 10 1.2.3 建设内容分析 13 1.2.4 项目建设重难点分析 19 1.2.5 项目风险分析 22 1.2.6 各中心职能需求…

python控制台颜色输出设置

python控制台颜色输出设置 控制台输出内容的颜色有前景色与背景色 控制台的展示效果有限&#xff0c;并不能像前端一样炫酷&#xff0c;只能做一些简单的设置 原理 python终端的字符颜色是用转义序列控制的&#xff0c;是文本模式下的系统显示功能&#xff0c;和具体的语言无…

【C++笔试强训】第十天

&#x1f387;C笔试强训 博客主页&#xff1a;一起去看日落吗分享博主的C刷题日常&#xff0c;大家一起学习博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a;夜色难免微凉&#xff0c;前方必有曙光 &#x1f31e;。 &#x1f4a6; &…

操作系统的地址、数据存储和大小端问题

文章目录基本概念什么是位&#xff0c;什么是字节&#xff1f;地址总线内存地址物理地址虚拟地址寻址空间存储单元CPU位数CPU寻址大端存储和小端存储原理为什么会有大小端模式的区分基本概念 什么是位&#xff0c;什么是字节&#xff1f; 位表示的是二进制位&#xff0c;一般…

C语言中用sizeof和strlen观察数组的变化2

目录 一.前言 二.用sizeof观察字符串数组的变化 代码 运行结果 结果解释 图解 三.用sizeof观察字符数组的变化 代码 注意 运行结果 图解 注意 证明 一.前言 数组名大部分情况下是首元素的地址&#xff0c;只有两种情况除外&#xff1a; sizeof&#xff08;数组名&…

哈希桶的基本操作 || HashMap和HashSet介绍(手撕源码)

目录 前言&#xff1a; 哈希表介绍 哈希冲突 闭散列 开散列&#xff08;哈希桶&#xff09; 模拟实现哈希桶中插入和获取方法 代码实现 HashMap介绍 手撕源码 HashSet介绍 手撕源码 小结&#xff1a; 前言&#xff1a; &#x1f388;一棵搜索树的最快查找数据的时间复杂度是O(…

Java------String类和正则表达式

String在设计时被定义成了final类&#xff08;最终类&#xff09;&#xff0c;所以不能定义String类的子类&#xff0c;String用来表示字符串常量&#xff0c;是引用数据类型&#xff0c;一旦String类对象的字符序列被定义&#xff0c;那么这个字符序列的值是不能再变化的。 创…

今年十八,喜欢SQL注入

#1024程序员节&#xff5c;用代码&#xff0c;改变世界# 前言 &#x1f340;作者简介&#xff1a;被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 &#x1f341;个人主页&#xff1a;被吉师散养的职业混子 &#x1fad2;每日emo&#xff1a;怀揣…

牛客竞赛每日俩题 - Day5

DP贪心 年终奖_牛客题霸_牛客网 思路&#xff1a; 定义f(i,j)表示从左上角走到坐标(i&#xff0c;j)处能获得的最大奖励。 搜索所有从左上角走到右下角的路径&#xff0c;找到最优路径。 f(i,j)分三种情况&#xff1a; 第一列&#xff1a;f(i, 0) f(i-1, 0) board(i, 0) 如果…

Java:企业应该用Java构建供应链软件吗?

很多公司使用Java编程语言&#xff0c;Java是最流行的编程语言之一&#xff0c;它帮助开发人员简化复杂企业解决方案的应用程序开发过程。 供应链是零售和制造业的重要组成部分&#xff0c;6%的零售业公司使用Java&#xff0c;另一方面&#xff0c;4%的制造公司使用编程语言&am…

基于莱维飞行扰动策略的麻雀搜索算法-附代码

基于莱维飞行扰动策略的麻雀搜索算法 文章目录基于莱维飞行扰动策略的麻雀搜索算法1.麻雀优化算法2. 改进麻雀算法2.1 莱维飞行搜索机制2.2 莱维飞行扰动策略2.3 初始化混沌搜索机制3.实验结果4.参考文献5.Matlab代码6.Python代码摘要&#xff1a;为了解决麻雀搜索算法存在迭代…

(02)Cartographer源码无死角解析-(04) 熟悉bag文件,配置.launch与.lua文件,初步调参

本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解(02)Cartographer源码无死角解析-接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/127350885 文…