随着 kubernetes 的大规模使用,对 kubernetes 组件及其上运行服务的监控也是非常重要的一个环节,目前开源的监控组件有很多种,例如 cAdvisor、Heapster、metrics-server、kube-state-metrics、Prometheus 等,对监控数据的可视化查看组件有 Dashboard、 Prometheus、Grafana 等,本文会介绍 kube-dashboard 和基于 prometheus 搭建数据可视化监控。
kubernetes 版本:v1.12
一、kubernetes-dashboard 的部署
1、创建 kubernetes-dashboard
1 | $ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml |
所需镜像下载地址:k8s-system-images
2、使用 nodePort 方式访问 kubernetes-dashboard
nodeport 的访问方式虽然有性能损失但是比较简单,kubernetes-dashboard 默认使用 clusterIP 的方式暴露服务,修改 kubernetes-dashboard svc 使用 nodePort 方式:
1 | $ kubectl edit svc -n kube-system |
nodePort 端口默认为 30000-32767,若使用其他端口,需要修改 apiserver 的启动参数 --service-node-port-range
来指定 nodePort 范围,如:--service-node-port-range 8000-9000
。
3、创建 kubernetes-dashboard 管理员角色
kubernetes-dashboard-admin.yaml
:
1 | apiVersion: v1 |
创建角色并获取 token:
1 | $ kubectl apply -f kubernetes-dashboard-admin.yaml |
token 是访问 dashboard 需要用的。
若没有安装 kube-proxy,可以参考官方提供使用 kubectl proxy
的方式访问:
1 | $ kubectl proxy --address=IP --disable-filter=true |
访问 http://IP:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
已部署 kube-proxy 的可直接访问 https://IP:nodePort
选择令牌方式使用上面生成的 token 登录。
Dashboard 可以使用 Ingress、Let’s Encrypt 等多种方式配置 ssl,关于 ssl 的详细配置此处不进行详解。
二、部署 prometheus
prometheus 作为 CNCF 生态圈中的重要一员,其活跃度仅次于 Kubernetes, 现已广泛用于 Kubernetes 集群的监控系统中。prometheus 的部署相对比较简单,社区已经有了 kube-prometheus,kube-prometheus 会部署包含 prometheus-operator、grafana、kube-state-metrics 等多个组件。
1 | $ git clone https://github.com/coreos/kube-prometheus |
为了使用简单,我也会将 prometheus 和 grafana 的端口修改为 nodePort 的方式进行暴露:
1 | $ kubectl edit svc prometheus-k8s -n monitoring |
上面几个组件成功运行后就可以在页面访问 prometheus 和 ganfana :
进入 grafana 的 web 端,默认用户名和密码均为 admin:
grafana 支持导入其他的 Dashboard,在 grafana 官方网站可以搜到大量与 k8s 相关的 dashboard。
三、总结
本文介绍了对 kubernetes 和容器监控比较成熟的两个方案,虽然目前开源的方案比较多,但是要形成采集、存储、展示、报警一个完成的体系还需要在使用过程中不断探索与完善。