本文演示如何在 K8s 集群中安装 Prometheus, 对 K8s 集群中的 CPU, Memory 进行监控。
Prometheus 简介
Prometheus 是由前 Google 工程师从 2012 年开始在 Soundcloud以开源软件的形式进行研发的系统监控和告警工具包,自此以后,许多公司和组织都采用了 Prometheus 作为监控告警工具。
其核心组件包括:
Prometheus Server
直接从监控目标中或者间接通过推送网关来拉取监控指标,它在本地存储所有抓取到的样本数据,并进一步汇聚数据生成新的新时间序列或生成告警。可以通过 Grafana 或者其他工具来实现监控数据的可视化。
Exporter
用来将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,Prometheus Server通过访问该Exporter提供的Endpoint端点,即可获取到需要采集的监控数据。
AlertManager
AlertManager即Prometheus体系中的告警处理中心。
在Prometheus Server中支持基于PromQL创建告警规则,如果满足PromQL定义的规则,则会产生一条告警,而告警的后续处理流程则由AlertManager进行管理。
PushGateway
由于Prometheus数据采集基于Pull模型进行设计,因此在网络环境的配置上必须要让Prometheus Server能够直接与Exporter进行通信。 当这种网络需求无法直接满足时,就可以利用PushGateway来进行中转。可以通过PushGateway将内部网络的监控数据主动Push到Gateway当中。而Prometheus Server则可以采用同样Pull的方式从PushGateway中获取到监控数据。
建立一个命名空间
在 Master 节点上编辑一个名为 namespace.yaml 的文件,内容如下;
1 | apiVersion: v1 |
保存文件后,执行
1 | kubectl apply -f namespace.yaml |
完成后可以执行以下命令进行验证
1 | kubectl get namespaces |
系统显示
1 | NAME STATUS AGE |
安装 node-exporter
在kubernetest集群中部署node-exporter,Node-exporter用于采集kubernetes集群中各个节点的物理指标,比如:Memory、CPU等。可以直接在每个物理节点是直接安装,这里我们使用DaemonSet部署到每个节点上,使用 hostNetwork: true 和 hostPID: true 使其获得Node的物理指标信息,配置tolerations使其在master节点也启动一个pod。
编辑一个名为 node-exporter.yml 的文件,包含以下内容:
1 | kind: DaemonSet |
保存后执行
1 | kubectl apply -f node-exporter.yaml |
验证,执行
1 | kubectl get pod -n ns-monitor |
应该可以看到类似如下的信息
1 | NAME READY STATUS RESTARTS AGE |
执行
1 | kubectl get svc -n ns-monitor |
可以看到类似如下的信息
1 | NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE |
我们也可以在主节点上执行
1 | curl http://localhost:31672/metrics |
查看相关的指标信息。
为集群搭建 NFS 文件卷
选择在主节点上建立 NFS
1 | sudo apt install nfs-kernel-server |
建立一个共享目录
1 | sudo mkdir /var/nfs/share -p |
改变目录所有者
1 | sudo chown nobody:nogroup /var/nfs/share |
配置 nfs
1 | sudo vi /etc/exports |
添加如下内容
1 | /var/nfs/share 192.168.11.0/24(rw,sync,no_subtree_check) |
注意:用你实际的IP替换上面IP
保存以后执行
1 | sudo exportfs -arvf |
1 | sudo systemctl restart nfs-kernel-server |
1 | sudo systemctl enable nfs-kernel-server |
查看列表
1 | showmount -e |
安装 nfs 客户端
1 | sudo apt install nfs-common |
注意:所有节点都要安装
部署Prometheus pod
编辑名为 prometheus.yaml 的文件,内容如下:
1 |
|
注意替换NFS卷的信息
保存以后执行
1 | kubectl apply -f prometheus.yaml |
验证
1 | kubectl get pod -n ns-monitor |
可以看到
1 | node-exporter-hk4rv 1/1 Running 0 62m |
通过 get svc 命令查看 prometheus-server 映射出来的端口号,执行:
1 | kubectl get svc -n ns-monitor |
可以使用 curl 命令访问该服务
注意:用上面的命令显示的端口替换url中的端口号
1 | curl http://localhost:32426/graph |