小阿轩yx-案例:Prometheus监控kubernetes环境构建

小阿轩yx-案例:Prometheus监控kubernetes环境构建

前言

  • 传统架构中比较流行的监控工具有 Zabbix、Nagios 等,这些监控工具对于 Kubernetes 这类云平台的监控不是很友好,特别是当 Kubernetes 集群中有了成千上万的容器后更是如此

基于 kubernetes 的 Prometheus 介绍

环境简介

  • node-exporter + prometheus + grafana 是一套非常流行的 Kubernetes 监控方案。

它们的功能

  • node-exporter:节点级指标导出工具,可以监控节点的 CPU、内存、磁盘、网络等指标,并暴露 Metrics 接口。
  • Prometheus:时间序列数据库和监控报警工具,可以抓取 Cadvisor 和 node-exporter 暴露的Metrics 接口,存储时序数据,并提供 PromQL 查询语言进行监控分析和报警。
  • Grafana:图表和 Dashboard 工具,可以査询 Prometheus 中的数据,并通过图表的方式直观展示 Kubernetes 集群的运行指标和状态。

监控流程

  • 在 Kubernetes 集群的每个节点安装 Cadvisor 和 node-exporter,用于采集容器和节点级指标数据。
  • 部署 Prometheus,配置抓取 Cadvisor 和 node-exporter 的 Metrics 接口,存储 containers 和nodes 的时序数据。
  • 使用 Grafana 构建监控仪表盘,选择 Prometheus 作为数据源,编写 PromQL 查询语句,展示K8S 集群的 CPU 使用率、内存使用率、网络流量等监控指标。
  • 根据监控结果,可以设置 Prometheus 的报警规则,当监控指标超过阈值时发送报警信息。这套方案能够全面监控 Kubernetes 集群的容器和节点,通过 Metrics 指标和仪表盘直观反映集群状态,并实现自动报警,非常适合 K8S 环境下微服务应用的稳定运行。

具体实现方案

  • node-exporter:在每个节点也作为 Daemonset 运行,采集节点 Metrics。
  • Prometheus:部署 Prometheus operator 实现,作为 Deployment 运行,用于抓取 Metrics 和报警。
  • Grafana:部署 Grafana Operator 实现,用于仪表盘展示。

Kubernetes 监控指标

K8S 本身的监控指标

  • CPU 利用率:包括节点 CPU 利用率、Pod CPU 利用率、容器 CPU 利用率等,用于监控 CPU 资源使用情况。
  • 内存利用率:包括节点内存利用率、Pod 内存利用率、容器内存利用率等,用于监控内存资源使用情况。
  • 网络流量:节点网络流量、Pod 网络流量、容器网络流量,用于监控网络收发包大小和带宽利用率。
  • 磁盘使用率:节点磁盘使用率,用于监控节点磁盘空间使用情况。
  • Pod 状态:Pod 的 Running、Waiting、succeeded、Failed 等状态数量,用于监控 Pod 运行状态。
  • 节点状态:节点的 Ready、NotReady 和 Unreachable 状态数量,用于监控节点运行状态。
  • 容器重启次数:单个容器或Pod 内所有容器的重启次数,用于监控容器稳定性。
  • API 服务指标:Kubernetes API Server 的请求 LATENCY、请求 QPS、错误码数量等,用于监控API Server 性能。
  • 集群组件指标:etcd、kubelet、kube-proxy 等组件的运行指标,用于监控组件运行状态。
  • 这些都是 Kubernetes集群运行状态的关键指标,通过Prometheus 等工具可以进行收集和存储,然后在 Grafana 中设计相应的 Dashboard 进行可视化展示。

当这些指标超出正常范围时,也可以根据阈值设置报警,保证 Kubernetes 集群和服务的稳定运行。

  • CPU 利用率超过 80%报警
  • 内存利用率超过 90%报警
  • 网络流量/磁盘空间突增报警
  • Pod/节点 NotReady 状态超过 10%报警
  • API Server 请求 LATENCY 超过 200ms 报警
  • etcd 节点 Down 报警等等

这些报警规则的设置需要根据集群大小和服务负载进行评估。

Prometheus 的安装

从 Github 克隆项目分支

https://github.com/prometheus-operator/kube-prometheus.git

  • release-0.10
root@k8s-master ~]# git clone -b release-0.10 https://github.com/prometheus-operator/kube-prometheus

安装 Prometheus Operator

  • Prometheus Operator 是 CoreOS 开源的项目,它提供了一种Kubernetes-native 的方式来运行和管理 Prometheus。
  • Prometheus operator 可以自动创建、配置和管理 Prometheus 实例,并将其与 Kubernetes 中的服务发现机制集成在一起,从而实现对 Kubernetes 集群的自动监控。

Prometheus 和 Prometheus Operator 的区别

  • Prometheus 是一种开源的监控系统,用于记录各种指标,并提供査询接口和告警机制。
  • PrometheusOperator 则是一种用于在 Kubernetes 上运行和管理 Prometheus 的解决方案。

相比于传统方式手动部署 Prometheus,Prometheus operator 可以自动创建、配置和管理 Prometheus 实例,并将其与Kubernetes 中的服务发现机制集成在一起,大幅简化了我们的工作量。

将镜像文件通过 Xftp 上传至 master、node01、node02三个节点(101、102、103)

将 kube-prometheus 文件单独上传至 master主节点(101)

开启会话同步

三台主机导入镜像

主机一(101)

[root@master ~]# cd images/
[root@master images]# bash imp_docker_img.sh

主机二(102)

[root@node01 ~]# cd images/
[root@node01 images]# bash imp_docker_img.sh

主机三(103)

[root@node02 ~]# cd images/
[root@node02 images]# bash imp_docker_img.sh

取消会话同步

进入 kube-prometheus 目录(在 master 节点)

[root@master ~]# cd kube-prometheus/

安装并应用服务

[root@master kube-prometheus]# kubectl apply --server-side -f manifests/setup

--server-side

  • 这个特性主要目标是把逻辑从 kubectl apply 移动到 kube-apiserver 中,这可以修复当前遇到的很多有关所有权冲突的问题。
  • 可以直接通过 API 完成声明式配置的操作,而无需依赖于特定的 kubectl apply 命令

如果要删除Prometheus Operator,可以使用下面的命令

kubectl delete --ignore-not-found=true -f manifests/setup

prometheus-operator 的作用主要是用来创建 prometheus 的相关资源以及监视与管理它创建出来的资源对象。

Operator 容器启动起来后安装 Prometheus Stack

[root@master kube-prometheus]# kubectl apply --server-side -f manifests/

删除 Prometheus stack

你可能感兴趣的:(云计算,linux,prometheus监控k8s,云计算,linux,运维开发,云平台,prometheus,kubernetes)