前言
我在2018年6月加入空客防务与航天公司( Airbus Defense&Space )担任 DevOps 工程师时,就开始了 Kubernetes 相关的工作。我在那里的第一个任务是测试在谷歌 Kubernetes 引擎(GKE)上运行的多个 Go 微服务的性能。为了完成这项任务,我在一个定制测试平台上使用 Grafana 来可视化和了解 Kubernetes 工作负载的资源使用情况。从那时起,我就对 Kubernetes 监控充满热情,并从未停止过。这个项目的灵感就来自于我在这个主题上所做的所有工作。
项目启动
我开始从社区中获取一些现有的仪表板,主要来自kubernetes-mixin 或 grafana.comgrafana.com 上提供的一些仪表板,如 Node Exporter Full 。使用这些仪表板并对它们进行调整,让我有机会在 Kubernetes 、Prometheus 和 Grafana 上学到很多东西。
在使用 Kubernetes 两年后,我认为是时候将我学到的所有东西都嵌入到一套 Grafana 仪表板中了,它可以帮助我在 Kubernetes 集群上构建和运行应用程序。这就是为什么我决定在2020年9月在 GitHub 上启动 dotdc/grafana-dashboard-kubernetesdotdc/grafana-dashboard-kubernetes 作为开源项目。
范围和功能
我想做的是一组仪表板,它们可以协同工作,帮助我快速解决日常操作问题。我不希望它们是详尽的,或者展示 kube-state-metrics 和 node_exporter 中可用的完整指标,而是希望它们在我需要它们时是有用的和直接的。到目前为止,它们对的技术团队非常有用。
该研究并没有使用USE, RED 或 the Four Golden Signals 等方法,但这些仪表板可能包括其中的一些零碎内容。如果您正在寻找其中一个更准确的工具,您应该检查 Kubernetes-Mixin 项目。
在过去的3年里,观看 Grafanacon 让我想使用最新的 Grafana 功能和面板。这就是为什么我决定使用那些可以带来一些有用的东西。代价是它们不能向后兼容旧的 Grafana 版本,因为它们使用:
● gradient mode 在Grafana 8.1中引入(Grafana Blog post)
● time series 在Grafana 7.4中引入 (Grafana Blog post)
● $__rate_interval 在Grafana 7.2中引入(Grafana Blog post)
在我可能忘记的其他事情中,他们还有一个 Resolution 变量来配置 min_step ,以及一个 Prometheus Datasource 变量,因此他们将在一个联邦 Grafana 实例上工作。
如何安装
这个项目是开源的,你可以在GitHub上找到它,网址是:https://github.com/dotdc/grafana-dashboards-kubernetes
从那里,你会发现几种安装方法,包括:
● 在 Grafana 中导入 JSON 文件;
● 从 grafana.com 导入它们(使用仪表板ID);
● 使用 Kubernetes ConfigMaps 进行配置;
● 使用 Terraformed Kubernetes ConfigMaps 进行配置。
如果您只想快速浏览一下,可以使用以下方法克隆存储库:
git clone https://github.com/dotdc/grafana-dashboards-kubernetes.git
cd grafana-dashboards-kubernetes
仪表板说明和用法
就像我之前说的,我制作了这些仪表板,这样它们就可以很好地协同工作。您通常从全局视图开始,然后根据用例放大到更详细的视图。这就是为什么我决定称它们为“ Kubernetes 视图”,因为它们从特定的角度和特定的缩放级别显示 Kubernetes 集群上的信息。最后,您将看到还有一个 API 服务器、一个 CoreDNS 和一个 Starboard Operator (现在是 Trivy Operator )仪表板。
下面是对它们的简短描述:
Kubernetes / Views / Global
总体思路是什么?
● 能够快速获得 Kubernetes 集群的全局视图;
● 发现集群、命名空间和节点上的异常资源使用情况;
● 在您的 Kubernetes 集群上发现异常数量的资源类型;
● 发现错误配置的应用程序资源(请求和限制与实际)。
包括哪些面板?
● 群集 CPU、RAM 和网络的总利用率;
● 实际请求并限制群集的资源使用;
● Kubernetes资源总数(按类型);
● 按命名空间和节点划分的 CPU、RAM 和网络利用率。
Kubernetes / Views / Namespaces
总体思路是什么?
● 拥有 Kubernetes 集群的命名空间视图;
● 发现命名空间中不寻常的资源使用情况;
● 找出命名空间中异常数量的资源类型;
● 能够检查 PODS 状态和 PODS 副本;
● 监视命名空间中的持久卷容量和信息节点。
包括哪些面板?
● 命名空间 CPU、RAM 和网络利用率;
● 请求并限制命名空间的资源使用;
● Kubernetes 资源按命名空间中的类型计数;
● POD 状态、每个 POD 的容器数量和副本可用性;
● 您的命名空间中的持久卷容量和信息节点。
Kubernetes / Views / Nodes
总体思路是什么?
● 获取 Kubernetes 节点的详细视图;
● 发现节点中的异常资源使用情况;
● 能够在故障节点上找到受影响的 Pod;
● 从节点获取操作系统指标。
包括哪些面板?
● 节点的一般 CPU 和 RAM 使用情况;
● 每个节点上的 pod 计数和 pod 列表(带有命名空间和优先级类);
● 节点的详细 CPU、RAM 和网络使用情况;
● 系统加载、上下文切换和中断、文件描述符和时间同步;
● 连接到节点的工作负载的持久卷信息;
● 本地节点存储容量、信息节点、IO 和错误。
Kubernetes / Views / Pods
总体思路是什么?
● 详细查看您的 POD 和容器;
● 容器的 CPU 和 RAM 使用和配置;
● 能够调整您的容器资源请求和限制;
● 跟踪 POD 的网络利用率。
包括哪些面板?
● Pod 信息:创建者,运行节点, Pod IP;
● 请求并限制命名空间的资源使用;
● 您的 PODS 容器的 CPU 和 RAM 请求和限制;
● 容器的 CPU 和 RAM 资源使用情况(实际使用情况);
● POD 的网络使用情况。
Kubernetes / System / API Server
总体思路是什么?
● 快速检查 Kubernetes API 服务器运行状况;
● 获取已弃用的 Kubernetes 资源列表;
● 获取有关 API 服务器的信息以跟踪异常问题。
包括哪些面板?
● API 服务器实例运行状况检查;
● 不推荐使用的 Kubernetes 资源列表;
● Kubernetes API 服务器请求(按代码、动词、延迟和错误);
● API 服务器的 CPU 和 RAM 使用情况。
Kubernetes / System / CoreDNS
总体思路是什么?
● 快速检查 CoreDNS 实例运行状况;
● 获取有关 CoreDNS 的信息以跟踪异常问题。
包括哪些面板?
● CoreDNS 实例运行状况检查;
● Kubernetes API 服务器请求(按代码、动词、延迟和错误);
● API 服务器的 CPU 和 RAM 使用情况。
Kubernetes Addons / Trivy / Starboard Operator
此仪表板适用于 Aqua Security 公司的 Starboard / Trivy Operator。它需要 Giant Swarm 的 starboard-exporter 才能工作。该仪表板将很快更新,以便在最新的 Trivy-Operator 指标可用时使用这些指标。
总体思路是什么?
● 按严重性列出漏洞摘要;
● 有一个漏洞列表,其中包含一个可点击的链接,以了解有关每个漏洞的更多信息;
● 按严重性列出配置审核报告摘要。
包括哪些面板?
● 漏洞(按命名空间和严重性);
● 漏洞列表,每个列表上都有一个 CVE/GHSA 链接;
● 配置审核报告命名空间和严重性。