kube-prometheus部署

news/2024/5/19 1:32:38 标签: prometheus, docker, 容器

kube-prometheus(v0.11.0版本)(docker版)

kube-prometheus stackk8s 1.20k8s 1.21k8s 1.22k8s 1.23k8s 1.24
release-0.8×××
release-0.9×××
release-0.10×××
release-0.11×××
main××××

v0.11.0

kube-prometheus-0.11.0

k8s-v1.23.9

1.获取项目

mkdir ~/kube-prometheus && cd ~/kube-prometheus
wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.11.0.tar.gz
tar xf v0.11.0.tar.gz && rm -rf v0.11.0.tar.gz

2、拉取(导入)镜像(docker版)

cd kube-prometheus-0.11.0

[root@master ~/kube-prometheus/kube-prometheus-0.11.0]# find ./manifests -type f |xargs grep 'image: '|sort|uniq|awk '{print $3}'|grep ^[a-zA-Z]|grep -Evw 'error|kubeRbacProxy'|sort -rn|uniq |grep -n ".*"
1:quay.io/prometheus/prometheus:v2.36.1
2:quay.io/prometheus-operator/prometheus-operator:v0.57.0
3:quay.io/prometheus/node-exporter:v1.3.1
4:quay.io/prometheus/blackbox-exporter:v0.21.0
5:quay.io/prometheus/alertmanager:v0.24.0
6:quay.io/brancz/kube-rbac-proxy:v0.12.0
7:k8s.gcr.io/prometheus-adapter/prometheus-adapter:v0.9.1
8:k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.5.0
9:jimmidyson/configmap-reload:v0.5.0
10:grafana/grafana:8.5.5
[root@master ~/kube-prometheus/kube-prometheus-0.11.0]#

# grep image prometheusAdapter-deployment.yaml
        image: k8s.gcr.io/prometheus-adapter/prometheus-adapter:v0.9.1

# grep image kubeStateMetrics-deployment.yaml
        image: k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.5.0
cd ~/kube-prometheus/kube-prometheus-0.11.0/manifests

#1、 修改镜像(默认谷歌k8s.gcr.io)
sed -i 's/k8s.gcr.io\/prometheus-adapter/v5cn/g' prometheusAdapter-deployment.yaml

把		k8s.gcr.io/prometheus-adapter/prometheus-adapter:v0.9.1
修改为	   v5cn/prometheus-adapter:v0.9.1

# 2、修改镜像(默认谷歌k8s.gcr.io)
sed -i 's/k8s.gcr.io\/kube-state-metrics/dyrnq/g' kubeStateMetrics-deployment.yaml

把		k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.5.0
修改为	   dyrnq/kube-state-metrics:v2.5.0
# k8s-master上pull镜像
find ~/kube-prometheus/kube-prometheus-0.11.0/manifests -type f |xargs grep 'image: '|sort|uniq|awk '{print $3}'|grep ^[a-zA-Z]|grep -Evw 'error|kubeRbacProxy'|sort -rn|uniq |xargs -i docker pull {}
# 所有node节点pull镜像
cat > ~/pull.sh << 'EOF'
        v5cn/prometheus-adapter:v0.9.1
        quay.io/prometheus/prometheus:v2.36.1
        quay.io/prometheus-operator/prometheus-operator:v0.57.0
        quay.io/prometheus/node-exporter:v1.3.1
        quay.io/prometheus/blackbox-exporter:v0.21.0
        quay.io/prometheus/alertmanager:v0.24.0
        quay.io/brancz/kube-rbac-proxy:v0.12.0
        jimmidyson/configmap-reload:v0.5.0
        grafana/grafana:8.5.5
        dyrnq/kube-state-metrics:v2.5.0
EOF

cat ~/pull.sh |xargs -i docker  pull {}

3、部署kube-prometheus项目

cd ~/kube-prometheus/kube-prometheus-0.11.0

# 方式1
kubectl apply --server-side -f manifests/setup
kubectl apply -f manifests/

# 方式2(可能要多执行几遍,所以推荐使用方式1)
kubectl apply --server-side -Rf manifests

4、暴露prometheus、grafana、alertmanager服务(将ClusterIP修改为NodePort)

#1、prometheus
kubectl patch svc/prometheus-k8s -n monitoring --patch '{"spec": {"type":"NodePort"}}'

#2、grafana
kubectl patch svc/grafana -n monitoring --patch '{"spec": {"type":"NodePort"}}'

#3、alertmanager
kubectl patch svc/alertmanager-main -n monitoring --patch '{"spec": {"type":"NodePort"}}'
kubectl get svc -n monitoring |grep NodePort
  • grafana默认用户名密码 : admin/admin
  • 若以上访问不到界面的话  去manifests下清理networkPolicy.yaml关键字文件

6、监控kube-controller-manager+kube-scheduler

a、默认没监控到以上两个服务的原因分析:

1、和 ServiceMonitor 的定义有关系

2、先来查看下 kube-scheduler 组件对应的 ServiceMonitor 资源的定义

3、在ServiceMonitor 资源对象里的selector.matchLabelskube-system 这个命名空间下面匹配具有 k8s-app=kube-scheduler 这样的 Service

4、但是系统中根本就没有对应的 Service:(问题所在)

5、所以需要去创建一个对应的 Service 对象,才能与 ServiceMonitor 进行关联:(解决问题) 

cat manifests/kubernetesControlPlane-serviceMonitorKubeScheduler.yaml
kubectl get svc -n kube-system -l app.kubernetes.io/name=kube-scheduler

No resources found in kube-system namespace.

# cat manifests/kubernetesControlPlane-serviceMonitorKubeControllerManager.yaml

#2、先来查看下 kube-scheduler组件对应的 ServiceMonitor资源的定义
# cat manifests/kubernetesControlPlane-serviceMonitorKubeScheduler.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    app.kubernetes.io/name: kube-scheduler
    app.kubernetes.io/part-of: kube-prometheus
  name: kube-scheduler
  namespace: monitoring
spec:
  endpoints:
  - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
    interval: 30s
    port: https-metrics
    scheme: https
    tlsConfig:
      insecureSkipVerify: true
  jobLabel: app.kubernetes.io/name
  namespaceSelector:
    matchNames:
    - kube-system
  selector:
    matchLabels:
      app.kubernetes.io/name: kube-scheduler

b、解决问题:

mkdir ~/my-kube-prometheus && cd ~/my-kube-prometheus

1、对kube-Controller-manager的监控

cat > ~/my-kube-prometheus/prometheus-kubeControllerManagerService.yaml << EOF
apiVersion: v1
kind: Service
metadata:
  namespace: kube-system
  name: kube-controller-manager
  labels:  #必须和上面的 ServiceMonitor 下面的 matchLabels 保持一致
    app.kubernetes.io/name: kube-controller-manager
spec:
  selector:
    component: kube-controller-manager
  ports:
  - name: https-metrics
    port: 10257
    targetPort: 10257  #controller-manager的安全端口为10257
EOF

其中最重要的是上面 labels 和 selector 部分,labels 区域的配置必须和我们上面的 ServiceMonitor 对象中的 selector 保持一致,selector 下面配置的是 component=kube-scheduler,为什么会是这个 label 标签呢,我们可以去 describe 下 kube-scheduler 这个 Pod:

# kubectl describe pod kube-scheduler-master -n kube-system
Name:                 kube-scheduler-master
Namespace:            kube-system
Priority:             2000001000
Priority Class Name:  system-node-critical
Node:                 master/192.168.1.201
Start Time:           Tue, 04 Jan 2022 10:09:14 +0800
Labels:               component=kube-scheduler
                      tier=control-plane
......

可以看到这个 Pod 具有 component=kube-schedulertier=control-plane 这两个标签,而前面这个标签具有更唯一的特性,所以使用前面这个标签较好,这样上面创建的 Service 就可以和这个 Pod 进行关联了

kubectl apply -f ~/my-kube-prometheus/prometheus-kubeControllerManagerService.yaml

kubectl get svc -n kube-system
 sed -i 's/bind-address=127.0.0.1/bind-address=0.0.0.0/g' /etc/kubernetes/manifests/kube-controller-manager.yaml

因为 kube-controller-manager 启动的时候默认绑定的是 127.0.0.1 地址,所以要通过 IP 地址去访问就被拒绝了,所以需要将 --bind-address=127.0.0.1 更改为 --bind-address=0.0.0.0 ,更改后 kube-scheduler 会自动重启,重启完成后再去查看 Prometheus 上面的采集目标就正常了

2、对kube-Scheduler的监控

cat > ~/my-kube-prometheus/prometheus-kubeSchedulerService.yaml << EOF
apiVersion: v1
kind: Service
metadata:
  namespace: kube-system
  name: kube-scheduler
  labels:  #必须和上面的 ServiceMonitor 下面的 matchLabels 保持一致
    app.kubernetes.io/name: kube-scheduler
spec:
  selector:
    component: kube-scheduler
  ports:
  - name: https-metrics
    port: 10259  
    targetPort: 10259  #需要注意现在版本默认的安全端口是10259
EOF
kubectl apply -f ~/my-kube-prometheus/prometheus-kubeSchedulerService.yaml
sed -i 's/bind-address=127.0.0.1/bind-address=0.0.0.0/g' /etc/kubernetes/manifests/kube-scheduler.yaml

如果要清理 Prometheus-Operator,可以直接删除对应的资源清单即可:

# kubectl delete -f manifests

# kubectl delete -f manifests/setup

感谢:linuxkaifa


http://www.niftyadmin.cn/n/344834.html

相关文章

代码随想录算法训练营第二十七天|39. 组合总和 40.组合总和II131.分割回文串

文章目录 39. 组合总和思路代码总结 40.组合总和II思路代码总结 131.分割回文串思路代码总结 39. 组合总和 思路 我举过例子&#xff0c;如果是一个集合来求组合的话&#xff0c;就需要startIndex&#xff0c;例如&#xff1a;77.组合 &#xff0c;216.组合总和III 。 如果是…

OS7安装rabbitmq

1.卸载存在的rabbitmq 停止rabbitmq服务&#xff1a; systemctl stop rabbitmq-server 查看rabbitmq安装的相关列表: yum list | grep rabbitmq 卸载rabbitmq已安装的相关内容: yum -y remove rabbitmq-server.noarch 查看erlang安装的相关列表: yum list | grep erlang 卸…

提高Java代码质量的这7个实用技巧,你知道吗?

在软件编程的世界里&#xff0c;编写高质量的Java代码是每个开发者的追求。优秀的代码不仅易于维护和扩展&#xff0c;还能提高应用程序的性能和稳定性。在本篇博客中&#xff0c;我将与你分享七个实用的技巧&#xff0c;帮助你提升Java代码的质量。无论你是初学者还是有多年经…

python数据可视化显示(附代码)

Python是一种非常流行的编程语言,具有广泛的应用领域,包括数据可视化。在数据可视化中,Python提供了多种工具来帮助用户创建各种类型的图表、图形和可视化效果。本文将介绍Python数据可视化的基本概念、工具和技术,并提供代码示例以说明如何使用Python进行数据可视化。 Py…

OOB配对原理及应用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言一、OOB是啥&#xff1f;二、OOB配对实践总结 前言 本文先简单介绍OOB配对的流程&#xff0c;然后结合CC2652蓝牙芯片调试OOB配对 一、OOB是啥&#xff1f; OOB就是…

论文阅读_语音合成_Spear-TTS

论文信息 number headings: auto, first-level 2, max 4, _.1.1 name_en: Speak, Read and Prompt: High-Fidelity Text-to-Speech with Minimal Supervision name_ch: 说话、阅读和提示&#xff1a;少量监督实现高保真文本转语音 paper_addr: http://arxiv.org/abs/2302.0354…

系统调用与API

系统调用介绍 什么是系统调用 为了让应用程序有能力访问系统资源&#xff0c;也为了让程序借助操作系统做一些由操作系统支持的行为&#xff0c;每个操作系统都会提供一套接口&#xff0c;以供应用程序使用。系统调用涵盖的功能很广&#xff0c;有程序运行所必需的支持&#xf…

灰度图基本概念及其C++代码实例

目录 概述一、灰度图的概念二、灰度图的应用三、C代码实例四、总结 概述 在计算机视觉领域中&#xff0c;灰度图是一种常用的图像表示方式。它将彩色图像中的每个像素点的颜色值转换为一个灰度值&#xff0c;从而将彩色图像转换为黑白图像。本文将介绍灰度图的概念、应用和C代…