使用Prometheus进行Kubernetes监控

监控是运维中至关重要的工作,对于像Kubernetes这样的当下风行的技术来说,强大的监控设置可以充分了解整个集群的机器状态,包括主机的基础性能,Pod资源利用率等。

今天,我们将在不到5分钟的时间内部署基于生产级Prometheus的监控系统。

前期准备条件:

1、运行具有至少6个内核和8 GB可用内存的Kubernetes集群。在本教程中,我将使用6个Node节点
2、Kubernetes部署和服务的工作知识。
步骤:

1、具有持久卷的Prometheus服务器。这将是我们的指标存储(TSDB)。
2、Alertmanager服务器,它将触发对Slack / Hipchat和/或Pagerduty / Victorops等的警报。
3、Kube-state-metrics服务器公开容器和pod度量,而不是由cadvisor公开的节点。
4、Grafana服务器可基于Prometheus数据创建仪表板。

部署Alertmanager
部署之前,请更新“ <your_slack_hook>”,“ <your_victorops_hook>”,“ <YOUR_API_KEY>”。 如果使用其他以外的通知渠道,例如微信webhook或钉钉,请遵循文档调整:

kubectl apply -f k8s / monitoring / alertmanager /

这将创建以下内容:

1、监视名称空间。
2、警报管理器将使用的配置映射来管理警报通道。
3、运行1个副本的Alertmanager部署。
4、可通过VPC(使用VPN)访问负责均衡服务IP

在浏览器中,导航到http:// <Alertmanager-Svc-Ext-Ip>:9093,应该看到alertmanager控制台。

部署普罗米修斯
部署之前,请创建一个EBS卷(AWS),并将其命名为prometheus-volume(这很重要,因为PVC会以此名称查找卷)。

kubectl apply -f k8s / monitoring / prometheus /

这将创建以下内容:

1、Prometheus需要的服务帐户,群集角色和群集角色绑定。
2、Prometheus配置图,其中详细说明了scrape配置和alertmanager端点。 应该注意的是,我们可以直接使用alertmanager服务名称代替IP。 如果要从特定的pod或服务中收集指标,则必须对其应用Prometheus  annotations。 例如:

警报规则的Prometheus配置图。 其中已经配置了一些基本警报(例如,容器和节点的CPU和内存使用率过高等)。 可以根据实际情况随意添加更多规则。
Prometheus服务器数据目录的存储类,持久卷和持久卷声明。 这样可以确保在Pod重新启动时保持数据持久性。
运行1个副本的Prometheus部署。
可通过VPC(使用VPN)访问的内部负载平衡器IP服务。

在浏览器中,导航到http:// <Prometheus-Svc-Ext-Ip>:8080,应该看到Prometheus控制台。 应当注意,在“状态”->“目标”部分下,所有已抓取的endpoint都是可见的,在“警报”部分下,可以看到所有已配置的警报。

部署Kube-State-Metrics
kubectl apply -f k8s / monitoring / kube-state-metrics /

这将创建以下内容:

kube-state-metrics需要的服务帐户,集群角色和集群角色绑定。
运行1个副本的Kube状态度量部署。
集群内服务,这将由Prometheus抓取以获取度量标准:

部署Grafana
到现在为止,我们已经部署了监控系统的核心(度量标准获取和存储),现在该将所有这些放在一起并创建仪表板了

kubectl apply -f k8s / monitoring / grafana

这将创建以下内容:

1、正在运行1个副本的Grafana部署。
2、可以从VPC(使用VPN)进行访问,内部负载平衡器IP的服务

现在需要做的就是将Prometheus服务器添加为Grafana中的数据源,并开始创建仪表板。 使用以下配置:

名称:DS_Prometheus

类型:普罗米修斯

网址:http:// prometheus-service:8080

注意:由于Grafana和Prometheus服务器都部署在同一群集中,因此我们在URL部分中使用Prometheus服务名称。 如果Grafana服务器在群集之外,则应在URL中使用Prometheus服务的外部IP。

所有仪表板都可以在这里找到。 可以直接导入json文件,一切搞定。

注意:

1、部署新服务时无需添加单独的仪表板。 所有的仪表板都是通用的和模板化的。
2、Prometheus热加载。 因此,如果需要更新配置或规则文件,只需更新配置映射并向Prometheus端点发出HTTP POST请求。 例如:

可以通过类似的api调用重新加载Alertmanager配置。
curl -XPOST http:// <Alertmanager-Svc-Ext-Ip>:9093> /-/重新加载

我希望这可以帮助大家深入了解Kubernetes集群并有效监控工作负载。 此设置应足以使开始监控工作负载。 在下一篇文章中,我们将学习水平扩展Prometheus并确保高可用性。 敬请关注 :)

原文:https://appfleet.com/blog/kubernetes-monitoring-using-prometheus/

git:https://github.com/Thakurvaibhav/k8s/tree/master/monitoring