循规蹈矩--从零开始建立k8s监控(一)

打印 上一主题 下一主题

主题 726|帖子 726|积分 2178

媒介

监控k8s集群,目前主流就是使用prometheus以及其周围的生态,本文开始介绍怎么一步步完成k8s监控的建立
环境准备

组件版本操作系统Ubuntu 22.04.4 LTSminikubev1.30.1docker24.0.7prometheusv2.54.1kube-state-metricsv2.13.0node-exporterv1.8.2下载编排文件

本文所有的编排文件,都在这里
  1. ▶ cd /tmp && git clone git@github.com:wilsonchai8/installations.git && cd installations/prometheus
复制代码
使用minikube搭建k8s测试环境

1)下载 minikube
2)启动,minikube start
  1. ▶ minikube start
复制代码
  1. ▶ docker ps | grep minikube
  2. 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是否正常工作
  1. ▶ kubectl get node
  2. NAME       STATUS   ROLES           AGE     VERSION
  3. minikube   Ready    control-plane   4m41s   v1.26.3
复制代码
这里需要注意一下,由于如今镜像地址全部被墙了,大家可以实验这个方法解决
安装prometheus

1)创建命名空间
  1. ▶ kubectl create ns prometheus
  2. namespace/prometheus created
复制代码
2)启动
  1. ▶ cd /tmp/installations/prometheus
  2. ▶ kubectl apply -f prometheus.yaml
复制代码
检查是否启动
  1. ▶ kubectl -n prometheus get pod -owide
  2. NAME                                 READY   STATUS    RESTARTS   AGE     IP           NODE       NOMINATED NODE   READINESS GATES
  3. prometheus-deploy-8495dfd557-xcwnp   1/1     Running   0          2m52s   10.244.0.3   minikube   <none>           <none>
复制代码
这里需要注意的是configmap的设置,由于是一步一步的演示,以是configmap的文件内容是一步一步的充实进去的,后面会逐步修改
  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4.   name: prometheus-cm
  5.   labels:
  6.     name: prometheus-cm
  7.   namespace: prometheus
  8. data:
  9.   prometheus.yml: |-
  10.     global:
  11.       scrape_interval: 5s
  12.       evaluation_interval: 5s
  13.     alerting:
  14.       alertmanagers:
  15.         - static_configs:
  16.             - targets: ['alertmanager:9093']
  17.     rule_files:
  18.       - /etc/prometheus/*.rules
  19.     scrape_configs:
  20.       - job_name: 'prometheus'
  21.         static_configs:
  22.         - targets: ['localhost:9090']
复制代码
3)访问页面服务
检察service设置,nodeport的端口是32648
  1. ▶ kubectl -n prometheus get svc
  2. NAME                 TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
  3. prometheus-service   NodePort   10.99.231.160   <none>        9090:32648/TCP   12m
  4. ▶ kubectl get node -owide
  5. NAME       STATUS   ROLES           AGE    VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
  6. 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即可
  1. ▶ cd /tmp/installations/prometheus
  2. ▶ kubectl apply -f kube-state-metrics.yaml
复制代码
检察exporter是否启动
  1. ▶ kubectl -n kube-system get pod | grep kube-state-metrics
  2. kube-state-metrics-6cd66dbcd8-4mqh4   1/1     Running   0             63s
复制代码
exporter安装完成,需要告诉prometheus去收罗新的exporter,修改prometheus configmap
  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4.   name: prometheus-cm
  5.   labels:
  6.     name: prometheus-cm
  7.   namespace: prometheus
  8. data:
  9.   prometheus.yml: |-
  10.     global:
  11.       scrape_interval: 5s
  12.       evaluation_interval: 5s
  13.     alerting:
  14.       alertmanagers:
  15.         - static_configs:
  16.             - targets: ['alertmanager:9093']
  17.     rule_files:
  18.       - /etc/prometheus/*.rules
  19.     scrape_configs:
  20.       - job_name: 'prometheus'
  21.         static_configs:
  22.         - targets: ['localhost:9090']# 从这里是新加的      - job_name: "prometheus-kube-state-metrics"        static_configs:          - targets: ["kube-state-metrics.kube-system:8080"]
复制代码
修改了configmap之后,需要重启prometheus
  1. ▶ kubectl -n prometheus rollout restart deploy prometheus-deploy
复制代码
重新打开页面之后检察,有新的监控指标被收罗上来了

安装node exporter

需要注意的是,kube-state-metrics 并没有关注node相关的监控数据,这时候又有一个exporter需要上场了,那就是node-exporter
  1. ▶ cd /tmp/installations/prometheus
  2. ▶ kubectl apply -f node-exporter.yaml
复制代码
检察exporter是否启动成功
  1. ▶ kubectl -n prometheus get pod | grep node-exporter
  2. 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
  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4.   name: prometheus-cm
  5.   labels:
  6.     name: prometheus-cm
  7.   namespace: prometheus
  8. data:
  9.   prometheus.yml: |-
  10.     global:
  11.       scrape_interval: 5s
  12.       evaluation_interval: 5s
  13.     alerting:
  14.       alertmanagers:
  15.         - static_configs:
  16.             - targets: ['alertmanager:9093']
  17.     rule_files:
  18.       - /etc/prometheus/*.rules
  19.     scrape_configs:
  20.       - job_name: 'prometheus'
  21.         static_configs:
  22.         - 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
  1. ▶ kubectl -n prometheus rollout restart deploy prometheus-deploy
复制代码
这里已经可以看到node相关的指标了

切到Status --> Targets,可以看到通过k8s服务发现的节点

为了验证服务发现,我们新加一个节点
  1. ▶ minikube node add
复制代码
检查新加节点
  1. ▶ kubectl get node
  2. NAME           STATUS   ROLES           AGE    VERSION
  3. minikube       Ready    control-plane   5d3h   v1.26.3
  4. minikube-m02   Ready    <none>          70s    v1.26.3
复制代码
再去页面检查,已经主动发现了第二个节点

至此,一个可以监控k8s各种资源的监控系统已经初步达成
注意事项

由于本文是演示一步一步安装prometheus以及相关组件,以是设置文件也是一步一步累加出来的,终极出如今仓库的设置文件是终极版,可以直接将编排文件fully apply,从而跳过这些调试步调
接洽我


  • 接洽我,做深入的交流

至此,本文结束
在下才疏学浅,有撒汤漏水的,请各位不吝赐教...

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

徐锦洪

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表