news 2026/7/4 3:47:08

十一、在k8s集群中安装prometheus

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
十一、在k8s集群中安装prometheus

1.在master机器上创建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

2.在k8s集群的每一个node节点上创建数据目录

mkdir data

chmod 777 data

3.在master节点创建一个configmap,用来存放prometheus配置信息

vim prometheus-cfg.yaml

输入:

---
kind: ConfigMap
apiVersion: v1
metadata:
labels:
app: prometheus
name: prometheus-config
namespace: monitor-sa
data:
prometheus.yml: |
global:
scrape_interval: 15s
scrape_timeout: 10s
evaluation_interval: 1m
scrape_configs:
- job_name: 'kubernetes-node'
kubernetes_sd_configs:
- role: node
relabel_configs:
- source_labels: [__address__]
regex: '(.*):10250'
replacement: '${1}:9100'
target_label: __address__
action: replace
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- job_name: 'kubernetes-node-cadvisor'
kubernetes_sd_configs:
- role: node
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- action: labelmap
regex: __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
- job_name: 'kubernetes-apiserver'
kubernetes_sd_configs:
- role: endpoints
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
action: keep
regex: default;kubernetes;https
- job_name: 'kubernetes-service-endpoints'
kubernetes_sd_configs:
- role: endpoints
relabel_configs:
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
action: replace
target_label: __scheme__
regex: (https?)
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
action: replace
target_label: __address__
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
- action: labelmap
regex: __meta_kubernetes_service_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_service_name]
action: replace
target_label: kubernetes_name
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- action: keep
regex: true
source_labels:
- __meta_kubernetes_pod_annotation_prometheus_io_scrape
- action: replace
regex: (.+)
source_labels:
- __meta_kubernetes_pod_annotation_prometheus_io_path
target_label: __metrics_path__
- action: replace
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
source_labels:
- __address__
- __meta_kubernetes_pod_annotation_prometheus_io_port
target_label: __address__
- action: labelmap
regex: __meta_kubernetes_pod_label_(.+)
- action: replace
source_labels:
- __meta_kubernetes_namespace
target_label: kubernetes_namespace
- action: replace
source_labels:
- __meta_kubernetes_pod_name
target_label: kubernetes_pod_name

保存退出

kubectl apply -f prometheus-cfg.yaml

查看是的创建成功

kubectl get cm -n monitor-sa

可以看见下面的内容就表示成功了

3.在集群的每一个机器上导入prometheus镜像

docker pull prom/prometheus:v2.45.0

docker save -o prometheus.tar prom/prometheus:v2.45.0

ctr -n=k8s.io images import prometheus.tar

创建一个vim prometheus-notcenter.yaml文件

输入:

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: prometheus
namespace: monitor-sa
labels:
app: prometheus
spec:
replicas: 2
serviceName: prometheus-server
selector:
matchLabels:
app: prometheus
component: server
template:
metadata:
labels:
app: prometheus
component: server
annotations:
prometheus.io/scrape: "true"
spec:
serviceAccountName: monitor
containers:
- name: prometheus
image: docker.io/prom/prometheus:v2.45.0
imagePullPolicy: IfNotPresent
command:
- prometheus
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.path=/prometheus
- --storage.tsdb.retention=720h
- --web.enable-lifecycle
ports:
- containerPort: 9090
volumeMounts:
- name: prometheus-config
mountPath: /etc/prometheus
- name: prometheus-storage-volume
mountPath: /prometheus
volumes:
- name: prometheus-config
configMap:
name: prometheus-config
- name: prometheus-storage-volume
hostPath:
path: /root/prometheus/data
type: Directory

保存退出

kubectl apply -f prometheus-notcenter.yaml

kubectl get pods -n monitor-sa -owide

看到下面的内容说明启动成功

4.、给prometheus pod创建一个service

vim prometheus-svc.yaml

输入:

apiVersion: v1
kind: Service
metadata:
name: prometheus-service
namespace: monitor-sa
labels:
app: prometheus
spec:
type: NodePort
ports:
- port: 9090
targetPort: 9090
protocol: TCP
selector:
app: prometheus
component: server

保存退出

kubectl apply -f prometheus-svc.yaml

kubectl get svc -n monitor-sa

查看到端口 32363

登录webUI这里就可以

此时登录http://192.168.40.180:32363/targets可以看到下面的内容

但是此时会有一个很惊人的发现就是

http://192.168.40.180:32363/targets

http://192.168.40.181:32363/targets

http://192.168.40.182:32363/targets

无论是180的master机器还是181或者182的node机器都是看到所有的数据,所以其实在k8s机器数量较少的情况下可以不需要prometheus中心


~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 3:46:38

【Camera】Monocular vs Stereo Calibration

文章目录一、单目标定得到什么?① 内参(Intrinsic)② 畸变参数(Distortion)③ 每张图片的外参(Pose)二、双目标定得到什么?三、最大的区别四、OpenCV 返回值也能看出来五、总结不完全…

作者头像 李华
网站建设 2026/7/4 3:45:34

小程序开发技术栈全面对比:uni-app vs Taro vs 原生开发深度解析

前言 2026年,小程序已经成为企业数字化转型的标配入口。然而,在实际开发中,很多团队都会面临一个灵魂拷问:到底该选什么技术栈? 原生开发性能最好,但维护多端成本高跨端框架能复用代码,但性能和…

作者头像 李华
网站建设 2026/7/4 3:43:48

前端学习致命误区

** 90%前端新手都会踩的致命学习误区|为什么你学完不会写项目? 一、前言 在自学前端的这段时间里,我走过无数弯路:视频看了几十套、笔记记了几万字、知识点学了一大堆,但是真正上手写项目的时候依旧寸步难行。 相信绝大…

作者头像 李华
网站建设 2026/7/4 3:42:55

Python dict实现:增删改查一把梭,不会用等于白学

1.dict的增删改查及初始化1.1 dict的初始化1.dict() 构造函数可以直接从键值对序列里创建字典>>> dict((sape, 含有不明确含义的4139), (guido, 有着特定意义的4127), (jack, 代表这个数值的4098)。以sape为键的值是4139, 以guido为键的值是4127, 以jack为键的值是409…

作者头像 李华
网站建设 2026/7/4 3:40:19

ClaudeAPI 医疗场景落地指南:适用边界、提示词与审核流程

医疗行业引入大模型,难点其实不只是“它能不能回答医学问题”。更关键的是:哪些工作可以让 AI 帮忙,哪些内容必须由人来复核,以及怎样防止模型一本正经地“编”出内容,最后流入真实临床流程。如果团队打算基于 Claude …

作者头像 李华