使用Prometheus完成Kubernetes集群监控
当你完成了Kubernetes集群的最初搭建后,集群监控的需求随之而来。 集群内的N台服务器在Kubernetes的管理下自动的创建和销毁着Pod, 但所有Pod和服务器的运行状态以及消耗的资源却不能方便的获得和展示, 给人一种驾驶着一辆没有仪表板的跑车在高速公路飞驰的感觉。
对于单机的Linux服务器监控,已经有了Nagios,Zabbix这些成熟的方案。 在Kubernetes集群中,我们使用新一代的监控系统Prometheus来完成集群的监控。
Prometheus简介 Prometheus是SoundCloud开源的一款监控软件。它的实现参考了Google内部的监控实现, 与同样源自Google的Kubernetes项目搭配起来非常合拍。同时它也是继Kubernetes之后 第二款捐赠给CNCF的开源软件。相信有CNCF的推广,它将逐步成为集群时代的重要底层组件。
Prometheus集成了数据采集,存储,异常告警多项功能,是一款一体化的完整方案。 它针对大规模的集群环境设计了拉取式的数据采集方式、多维度数据存储格式以及服务发现等创新功能。
今后我们会进一步探讨Prometheus的特性以及使用技巧,在这里我们直接演示在Kubernetes集群中 使用Prometheus的方式。
使用服务发现简化监控系统配置 与传统的先启动监控系统,然后配置所有服务器将运行数据发往监控系统不同。Prometheus 可以通过服务发现掌握集群内部已经暴露的监控点,然后主动拉取所有监控数据。 通过这样的架构设计,我们仅仅只需要向Kubernetes集群中部署一份Prometheus实例, 它就可以通过向apiserver查询集群状态,然后向所有已经支持Prometheus metrics的kubelet 获取所有Pod的运行数据。如果我们想采集底层服务器运行状态,通过DaemonSet在所有服务器上运行 配套的node-exporter之后,Prometheus就可以自动采集到新的这部分数据。
这种动态发现的架构,非常适合服务器和程序都不固定的Kubernetes集群环境,同时 也大大降低了运维的负担。
启动Prometheus服务 首先将Prometheus的配置文件,存为ConfigMap。
apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config data: prometheus.yml: | global: scrape_interval: 30s scrape_timeout: 30s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'kubernetes-cluster' scheme: https 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: - api_servers: - 'https://kubernetes.default.svc' in_cluster: true role: apiserver - job_name: 'kubernetes-nodes' scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.