媒介
监控k8s集群,目前主流就是使用prometheus以及其周围的生态,本文开始介绍怎么一步步完成k8s监控的建立
环境准备
组件版本操作系统Ubuntu 22.04.4 LTSminikubev1.30.1docker24.0.7prometheusv2.54.1kube-state-metricsv2.13.0node-exporterv1.8.2下载编排文件
本文所有的编排文件,都在这里- ▶ cd /tmp && git clone git@github.com:wilsonchai8/installations.git && cd installations/prometheus
复制代码 使用minikube搭建k8s测试环境
1)下载 minikube
2)启动,minikube start- ▶ docker ps | grep minikube
- db877d660750 kicbase/stable:v0.0.39 "/usr/local/bin/entr…" 37 seconds ago Up 33 seconds 127.0.0.1:32782->22/tcp, 127.0.0.1:32781->2376/tcp, 127.0.0.1:32780->5000/tcp, 127.0.0.1:32779->8443/tcp, 127.0.0.1:32778->32443/tcp minikube
复制代码 3)检查k8s是否正常工作- ▶ kubectl get node
- NAME STATUS ROLES AGE VERSION
- minikube Ready control-plane 4m41s v1.26.3
复制代码 这里需要注意一下,由于如今镜像地址全部被墙了,大家可以实验这个方法解决
安装prometheus
1)创建命名空间- ▶ kubectl create ns prometheus
- namespace/prometheus created
复制代码 2)启动- ▶ cd /tmp/installations/prometheus
- ▶ kubectl apply -f prometheus.yaml
复制代码 检查是否启动- ▶ kubectl -n prometheus get pod -owide
- NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
- prometheus-deploy-8495dfd557-xcwnp 1/1 Running 0 2m52s 10.244.0.3 minikube <none> <none>
复制代码 这里需要注意的是configmap的设置,由于是一步一步的演示,以是configmap的文件内容是一步一步的充实进去的,后面会逐步修改- apiVersion: v1
- kind: ConfigMap
- metadata:
- name: prometheus-cm
- labels:
- name: prometheus-cm
- namespace: prometheus
- data:
- prometheus.yml: |-
- global:
- scrape_interval: 5s
- evaluation_interval: 5s
- alerting:
- alertmanagers:
- - static_configs:
- - targets: ['alertmanager:9093']
- rule_files:
- - /etc/prometheus/*.rules
- scrape_configs:
- - job_name: 'prometheus'
- static_configs:
- - targets: ['localhost:9090']
复制代码 3)访问页面服务
检察service设置,nodeport的端口是32648- ▶ kubectl -n prometheus get svc
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- prometheus-service NodePort 10.99.231.160 <none> 9090:32648/TCP 12m
- ▶ kubectl get node -owide
- NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
- minikube Ready control-plane 4d5h v1.26.3 192.168.49.2 <none> Ubuntu 20.04.5 LTS 6.8.0-45-generic docker://23.0.2
复制代码 访问 192.168.49.2:32648
至此,prometheus已经安装完成了,监控的框架算是搭建起来了,但是没有监控指标,这并不是一个完整的监控系统,我们需要prometheus监控k8s的底子指标
安装k8s exporter
简单来说,exporter就是提供监控数据的组件,prometheus定期到exporter收罗数据。而即将介绍的 kube-state-metrics ,就是专门用来提供k8s相关数据的exporter
而安装exporter也是非常简单的,exporter也是一个组件服务,只需要把它编排进k8s即可- ▶ cd /tmp/installations/prometheus
- ▶ kubectl apply -f kube-state-metrics.yaml
复制代码 检察exporter是否启动- ▶ kubectl -n kube-system get pod | grep kube-state-metrics
- kube-state-metrics-6cd66dbcd8-4mqh4 1/1 Running 0 63s
复制代码 exporter安装完成,需要告诉prometheus去收罗新的exporter,修改prometheus configmap- apiVersion: v1
- kind: ConfigMap
- metadata:
- name: prometheus-cm
- labels:
- name: prometheus-cm
- namespace: prometheus
- data:
- prometheus.yml: |-
- global:
- scrape_interval: 5s
- evaluation_interval: 5s
- alerting:
- alertmanagers:
- - static_configs:
- - targets: ['alertmanager:9093']
- rule_files:
- - /etc/prometheus/*.rules
- scrape_configs:
- - job_name: 'prometheus'
- static_configs:
- - targets: ['localhost:9090']# 从这里是新加的 - job_name: "prometheus-kube-state-metrics" static_configs: - targets: ["kube-state-metrics.kube-system:8080"]
复制代码 修改了configmap之后,需要重启prometheus- ▶ kubectl -n prometheus rollout restart deploy prometheus-deploy
复制代码 重新打开页面之后检察,有新的监控指标被收罗上来了
安装node exporter
需要注意的是,kube-state-metrics 并没有关注node相关的监控数据,这时候又有一个exporter需要上场了,那就是node-exporter- ▶ cd /tmp/installations/prometheus
- ▶ kubectl apply -f node-exporter.yaml
复制代码 检察exporter是否启动成功- ▶ kubectl -n prometheus get pod | grep node-exporter
- node-exporter-q8rmq 1/1 Running 0 75s
复制代码 node-exporter的工作方式与kube-state-metrics不一样,kube-state-metrics是借助k8s的服务发现本事,可以知道k8s集群内部到底有多少pod、deploy、service等资源的状态
node-exporter也是部署在k8s内部,通过daemonset的方式,在每一个节点启动一个收罗服务,然后袒露api等待prometheus来收罗数据,但是node-exporter自身并没有服务发现本事,以是在节点扩容或者缩容的时候,prometheus并不知道当前有多少节点需要收罗。固然prometheus不知道,但是k8s确知道当前集群有多少节点,以是这里node-exporter也需要借用k8s得服务发现的本事来主动发现当前的节点数
修改prometheus configmap- apiVersion: v1
- kind: ConfigMap
- metadata:
- name: prometheus-cm
- labels:
- name: prometheus-cm
- namespace: prometheus
- data:
- prometheus.yml: |-
- global:
- scrape_interval: 5s
- evaluation_interval: 5s
- alerting:
- alertmanagers:
- - static_configs:
- - targets: ['alertmanager:9093']
- rule_files:
- - /etc/prometheus/*.rules
- scrape_configs:
- - job_name: 'prometheus'
- static_configs:
- - targets: ['localhost:9090'] - job_name: "prometheus-kube-state-metrics" static_configs: - targets: ["kube-state-metrics.kube-system:8080"]# 从这里是新加的 - job_name: 'kubernetes-nodes' tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token 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_(.+)
复制代码 修改了configmap之后,需要重启prometheus- ▶ kubectl -n prometheus rollout restart deploy prometheus-deploy
复制代码 这里已经可以看到node相关的指标了
切到Status --> Targets,可以看到通过k8s服务发现的节点
为了验证服务发现,我们新加一个节点检查新加节点- ▶ kubectl get node
- NAME STATUS ROLES AGE VERSION
- minikube Ready control-plane 5d3h v1.26.3
- minikube-m02 Ready <none> 70s v1.26.3
复制代码 再去页面检查,已经主动发现了第二个节点
至此,一个可以监控k8s各种资源的监控系统已经初步达成
注意事项
由于本文是演示一步一步安装prometheus以及相关组件,以是设置文件也是一步一步累加出来的,终极出如今仓库的设置文件是终极版,可以直接将编排文件fully apply,从而跳过这些调试步调
接洽我
至此,本文结束
在下才疏学浅,有撒汤漏水的,请各位不吝赐教...
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |