Kubernetes集群可视化

Kubermetrics 是一个开源工具,它以简单易懂的用户界面提供 Kubernetes 集群监控和数据可视化。Kubermetrics 集成了 Prometheus 和 Grafana 仪表板在一个页面,允许定制仪表板和警报。

主页

按 namespace 显示所有 nodes, deployments, pods, services 和 ingresses 的仪表板。

k8s集群可视化工具 - 图1

k8s集群可视化工具 - 图2k8s集群可视化工具 - 图3

指标页

指标页面利用了完整的 Grafana 集成定制仪表板。

告警页

警报页利用完整的 Prometheus 集成,以便访问警报,图表,prom-queries等!

部署 Kubermetrics

  1. git clone https://github.com/oslabs-beta/kubermetrics.git
  2. unzip kubermetrics.zip

如果未安装 Prometheus 和 Grafana,可以在 kubermetrics 根目录下执行apply,将安装全部依赖组件:

  1. kubectl apply -f manifests

如果已安装 Prometheus 和 Grafana,则进入manifests目录,apply清单 yaml 文件:

  1. # cd kubermetrics/manifests
  2. # kubectl apply -f kubermetrics-depl.yaml
  3. deployment.apps/kubermetrics-depl created
  4. service/kubermetrics-srv created

创建的 Pod 一直重启,查看日志报错如下:

  1. # kubectl get pod | grep kuberme
  2. kubermetrics-depl-5c54969bc-w4nnt 0/1 CrashLoopBackOff 1 88s
  3. # k logs -f kubermetrics-depl-5c54969bc-w4nnt
  4. standard_init_linux.go:211: exec user process caused "exec format error"

这个问题在 github 上有相同的issue,目前尚未解决。

  1. # docker run -ti kubermetrics/kubermetrics:latest bash
  2. standard_init_linux.go:211: exec user process caused "exec format error"
  3. # cat /etc/redhat-release
  4. CentOS Linux release 7.9.2009 (Core)
  5. # uname -m
  6. x86_64

该错误 CPU 架构不同导致的,默认镜像适用于linux/arm64。

为此编译了 x86 架构的镜像,推送到阿里云镜像仓库和 dockerhub 仓库:

  1. # 阿里云仓库
  2. docker pull registry.cn-hangzhou.aliyuncs.com/smallsoup/kubermetrics
  3. # dockerhub
  4. docker pull smallsoup/kubermetrics

请运行以下命令以确保 grafana 和 prometheus 在这些端口上启动并运行!

  1. kubectl port-forward <grafana-pod-name-goes-here> --namespace=<yournamespace> 3000:3000
  2. kubectl port-forward <prometheus-pod-name-goes-here> --namespace=<yournamespace> 9090:9090

找到您当前正在运行的 Kubermetrics Pod 并运行以下命令

  1. # kubectl port-forward --address 0.0.0.0 pod/{pod名称} 8899:3068
  2. Forwarding from 0.0.0.0:8899 -> 3068
  3. Handling connection for 8899

这将在本机所有地址监听 8899 端口,转发到 Pod 的 3068 端口。

假如本机 IP 为10.0.11.2,则访问10.0.11.2:8899即可访问仪表板。

比较坑的是

应用程序在本地主机 localhost:3000 上查找 grafana,9090 上查找 promethues。不支持自定义。

Prometheus 的地址是写死:

  1. ./client/components/PrometheusMonitoring/PrometheusAlerts.js: src={"http://localhost:9090/alerts"}

Grafana 的地址是写死:

  1. ./client/components/GrafanaMonitoring/ClusterDashboard.js: src={"http://localhost:3000/goto/tJaUhdH7z?orgId=1"}
  2. ./client/components/GrafanaMonitoring/PodDashboard.js: src={"http://localhost:3000/d-solo/AAOMjeHmk/kubernetes-pod-monitoring?orgId=1&refresh=10s&from=1632155279207&to=1632158879207&panelId=3"}
  3. ./client/components/GrafanaMonitoring/PodDashboard.js: src={"http://localhost:3000/d-solo/AAOMjeHmk/kubernetes-pod-monitoring?orgId=1&refresh=10s&from=1632156042391&to=1632159642391&panelId=2"}
  4. ./client/components/GrafanaMonitoring/PodDashboard.js: src={"http://localhost:3000/d-solo/AAOMjeHmk/kubernetes-pod-monitoring?orgId=1&refresh=10s&from=1632156127873&to=1632159727873&panelId=8"}

可以自己修改代码,以支持指定两组件地址作为参数。

参考资料

Kubermetrics Dockerhub: https://hub.docker.com/r/kubermetrics/kubermetrics

Kubermetrics Github: https://github.com/oslabs-beta/kubermetrics

issue: https://github.com/oslabs-beta/kubermetrics/issues/30