首页 > 其他分享 >初始安装 Prometheus 监控k8s组件 target 状态显示失败的处理办法

初始安装 Prometheus 监控k8s组件 target 状态显示失败的处理办法

时间:2024-01-31 15:48:54浏览次数:30  
标签:kube target ## 0.0 yaml Prometheus kubeadm k8s config

当我们使用 Kubeadm 完成 Kubernetes 的搭建时,默认控制面的组件的 metrics 端点会监听在本机 127.0.0.1 接口上,这会导致 Prometheus / kube-Prometheus-stack 开局配置无法从自动发现的端点拉取到指标。

方法有如下两种:

  1. 在使用 kubeadm 初始安装集群时,更新相关配置
  2. 在 Kubernetes 集群安装后,更改相关配置文件完成配置

下面我们依次来讲上述的两种方式。

在初始配置 kubeadm 时,更改配置

大致步骤,先生成 kubeadm-config.yaml 配置文件,并编辑其配置文件,增加配置参数,最后 kubeadm init --config kubeadm-config.yaml

## generate kubeadm-config.yaml
>_ kubeadm config print init-defaults > kubeadm-config.yaml

## 配置控制面组件参数,默认只有 apiServer
## 在 kubeadm-config.yaml 中增加如下配置
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.25.0
controllerManager:
  extraArgs:
    bind-address: 0.0.0.0
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
metricsBindAddress: "0.0.0.0:10249"

## 最后安装或升级 Kubernetes 集群配置
>_ kubeadm init --config kubeadm-config.yaml

在 Kubernetes 集群安装完成后,进行各组件的配置更改

在现有 Kubernetes 集群中,修改对应组件的配置,修改后,静态容器会自动重载和重启

## controller-manager
## 更新 /etc/kubernetes/manifests/kube-controller-manager.yaml 静态pod配置文件中 bind-address 参数的值为 0.0.0.0
>_ sed -i 's/\(bind-address=\).*$/\10.0.0.0/' /etc/kubernetes/manifests/kube-controller-manager.yaml

## etcd
## 更新 /etc/kubernetes/manifests/etcd.yaml 静态pod配置文件中 listen-metrics-urls 参数的值为 http://0.0.0.0:2381
>_ sed -i 's/\(listen-metrics-urls=http:\/\/\).*\(:2381\)$/\10.0.0.0\2/' /etc/kubernetes/manifests/etcd.yaml

## kube-proxy
## 更新 kube-proxy 的 ConfigMap,为 metricsBindAddress 设定监听地址 0.0.0.0
>_ kubectl get cm -n kube-system kube-proxy -o yaml | sed 's/\(metricsBindAddress: \).*$/\1"0.0.0.0:10249"/' | kubectl replace -f - -n kube-system
>_ kubectl rollout restart -n kube-system daemonset kube-proxy

对于 kube-scheduler 组件,我们来梳理一下流程规则:

我们在安装 kube-prometheus-stack 时会代为创建三个 Service ,用于依次对应 Control Plane 控制平面的组件

我们来看 kube-scheduler Service 的定义:

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: "2024-01-29T06:14:09Z"
  labels:
    app: kube-prometheus-stack-kube-scheduler
    app.kubernetes.io/instance: kube-prometheus-stack
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/part-of: kube-prometheus-stack
    app.kubernetes.io/version: 56.2.1
    argocd.argoproj.io/instance: kube-prometheus-stack
    chart: kube-prometheus-stack-56.2.1
    heritage: Helm
    jobLabel: kube-scheduler
    release: kube-prometheus-stack
  name: kube-prometheus-stack-kube-scheduler
  namespace: kube-system
spec:
  clusterIP: None
  clusterIPs:
  - None
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - name: http-metrics
    port: 10251
    protocol: TCP
    targetPort: 10251       <---- 这里的端口与 Pod 的端口不一致,实际端口为 10259
  selector:
    component: kube-scheduler
  sessionAffinity: None
  type: ClusterIP

这个 Service 的端口与实际的 scheduler pod 端口不符,所以导致无法通过 ServiceMonitor 发现的 Endpoints 进行 target 采集。

到这里我们理清了问题原因,所以,我们需要修改 kube-prometheus-stack 的 values 定义,再重新使用 Helm 安装 prometheus 即可。

# values.yaml
.....
kubeScheduler:
  service:
    port: null
    targetPort: 10259    <---- 修改为实际pod端口
  serviceMonitor:
    enabled: true
    https: true          <---- 使用 https 协议进行 scrap 指标拉取
    insecureSkipVerify: true       <---- 跳过集群内证书验证
.....

标签:kube,target,##,0.0,yaml,Prometheus,kubeadm,k8s,config
From: https://www.cnblogs.com/TopGear/p/17998635

相关文章

  • Prometheus+Grafana+Jmeter监控服务器资源及中间件(Prometheus & node_exporter &mysq
    一、Prometheus&node_exporter&Grafana的原理Prometheus:Prometheus是一个开源的系统监控和报警工具包,它负责定时从各种数据源(如NodeExporter)中获取指标数据,并将其存储在自己的时间序列数据库中。Prometheus支持灵活的查询和报警功能,用户可以方便地对这些指标数据进行查询......
  • Prometheus结合Consul采集多个MySQL实例的监控指标
    本文主要介绍如何利用Prometheus官网提供的mysqld_exporter进行多MySQL实例的监控指标采集建议安装最新版的mysqld_exporter,因为从’2022-09-01’之后才支持多实例功能的。具体的官网说明详见 Supportforscrapingmultiplemysqldhosts(#651)[1]ok,开始今天的教程~1、下载安......
  • k8s-master 设置调度污点
    k8smaster调度污点NoSchedule:K8Snode添加这个effecf类型污点,新的不能容忍的pod不能再调度过来,但是老的运行在node上不受影响NoExecute:K8Snode添加这个effecf类型污点,新的不能容忍的pod不能调度过来,老的pod也会被驱逐PreferNoSchedule:pod会尝试将pod分配到该节点#设置mas......
  • 在K8S中,apiservice与kube-schedule高可用原理?
    在Kubernetes(简称K8s)中,为了实现高可用性(HA),不同的组件有不同的机制:kube-apiserver高可用原理:负载均衡:在一个集群中,通常会部署多个kube-apiserver实例,并通过负载均衡器(如云服务商的负载均衡服务或硬件负载均衡器,或者是内部软件如NGINX等)对外提供统一入口。这样可以确保即使有单......
  • 在K8S中,创建pod过程?
    在Kubernetes(简称K8s)中创建Pod的过程涉及多个组件的交互,以下是简化版的Pod创建流程:客户端请求:用户通过kubectlapply命令、控制台界面或者API调用提交一个Pod的定义文件(YAML或JSON格式),向集群中的kube-apiserver发送创建Pod的请求。验证与准入控制:kube-apiserver接收到......
  • 在K8S中,flannel能固定节点IP和Pod的IP地址吗?
    Flannel作为一个Kubernetes集群的网络插件,其设计目标之一是为Pod分配固定的IP地址,并确保不同节点上的PodIP地址不会冲突。具体来说:PodIP固定:Flannel在每个节点上预分配一个子网供Pod使用,当创建新Pod时,Flannel会从该节点的子网中分配一个唯一的IP地址给Pod,从而确保Pod在整个生......
  • 在K8S中,Pod亲和性概念是什么?
    在Kubernetes(简称K8S)中,Pod亲和性和反亲和性(AffinityandAnti-Affinity)是集群调度策略的重要组成部分,它们用于控制Pod如何与节点或其他Pod相对应地放置或避免放置在一起。Pod亲和性(Affinity):Pod亲和性允许用户指定某种规则,使得Pod更倾向于被调度到满足特定条件的节点上运行,或者与......
  • 07.搭建prometheus
    yaml文件内容及权限:global:scrape_interval:15s#定义抓取指标的时间间隔evaluation_interval:15s#定义评估规则的时间间隔scrape_configs:-job_name:'prometheus'#设置监控任务的名称static_configs:#定义静态目标配置-targets:['localhost:9......
  • prometheus+alertmanager告警消息对接企业微信、飞书、钉钉
    前言  很多公司都在使用prometheus作为监控,并使用alertmanager发送告警消息,然而有的公司内部通讯软件使用的是企业微信,或者是飞书,或者是钉钉,那么如何让监控告警消息发送到这些通讯软件呢。  本文主要通过讲解自己开发的工具alertmanager-webhook来实现该功能,该工具已经支持......
  • 在K8S中,PV生命周期状态有哪些?
    在Kubernetes中,PersistentVolume(PV)对象具有以下几种生命周期状态:Available(可用):PV在被创建并设置为可供绑定的状态时处于Available状态。在此状态下,PV尚未与任何PersistentVolumeClaim(PVC)关联或绑定。Bound(已绑定):当管理员或Kubernetes自动将PV与一个匹配的Persis......