本文已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。
容器元数据如何改变你的视角
当然,元数据是一个花哨的词。它实际上意味着“描述其他数据的数据”。虽然这个定义并没有太大帮助,但事实证明元数据本身在容器环境中特别有用。当您有任何复杂的系统时,元数据的可用性有助于您对该系统输出的各种数据进行排序和处理,以便您可以更轻松地解决问题的核心。
在 Kubernetes 环境中,元数据可以成为组织和理解容器如何在您的许多服务、机器、可用区或(将来)多个云之间进行编排的关键工具。此元数据也可以由在您的 Kubernetes 系统之上运行的其他服务使用,并可以帮助您管理您的应用程序。
我们将在下面看一些示例,但首先...
Kubernetes 元数据的快速介绍 Kubernetes 元数据以 标签 和 注释 的形式大量存在。标签旨在成为您基础设施的标识元数据,而注释旨在成为非标识元数据。对于两者,它们都只是通用的键:值对,如下所示
"labels": {
"key1" : "value1",
"key2" : "value2"
}
标签并非设计为唯一的;您可以预期您的环境中任意数量的对象都带有相同的标签,并且您可以预期一个对象可以有多个标签。
您可以使用哪些标签示例?这里仅举几个。警告:一旦开始,您可能会发现不止几种使用此功能的方法!
- 环境:开发、生产、测试、UAT
- 客户:客户 A、客户 B、客户 C
- 层:前端、后端
- 应用程序:缓存、Web、数据库、身份验证
除了您可能定义的自定义标签外,Kubernetes 还会自动将带有有用元数据的标签应用于您的系统。默认标签提供有关整个 Kubernetes 层级的关键标识信息:Pod、服务、复制控制器和命名空间。
让您的元数据发挥作用
一旦您花一些时间使用 Kubernetes,您就会发现标签有一个特别强大的应用程序,这使其至关重要
Kubernetes 标签允许您轻松地在主机和容器的“物理”视图与应用程序和微服务的“逻辑”视图之间移动。
从本质上讲,像 Kubernetes 这样的平台旨在编排对底层物理资源的最佳利用。这是一种非常有效地利用私有或公共云资源的强大方式,有时您需要可视化这些物理资源。然而,实际上,大多数时候您最关心的是服务的性能。
但在 Kubernetes 世界中,实现高利用率意味着某个服务的容器可能会散布在各处!那么您如何实际衡量服务的性能呢?这就是元数据发挥作用的地方。借助 Kubernetes 元数据,您可以深入了解服务的性能,无论底层容器的物理位置在哪里。
为我描绘一幅图画
让我们看一个简单的例子,使之更具体:监控您的应用程序。让我们使用在 GKE 上运行的 3 个节点的部署。为了可视化环境,我们将使用 Sysdig Cloud。这是节点列表 - 请注意附加到每个主机名称的“gke”。我们看到一些基本的性能细节,如 CPU、内存和网络。
每个主机都有许多在其上运行的容器。深入研究主机,我们看到与每个主机关联的容器
简单地扫描单个主机上的容器列表,我没有看到这些对象的职责有太多组织。例如,这些容器中的一些运行 Kubernetes 服务(如 kube-ui),我们推测其他容器与运行的应用程序(如 javaapp.x)有关。
现在让我们使用 Kubernetes 提供的一些元数据来查看以应用程序为中心的系统。让我们首先根据标签创建组件层次结构,顺序如下
Kubernetes 命名空间 -> 复制控制器 -> pod -> 容器
这会根据上述标签在相应级别聚合容器。在下面的应用程序 UI 中,此聚合和层次结构显示在我们主机数据的上方灰色“分组”栏中。如您所见,我们有一个“prod”命名空间,其下面有一组服务(复制控制器)。每个复制控制器然后可以由多个 pod 组成,而 pod 又由容器组成。
除了通过标签组织容器外,此视图还汇总了相关容器的指标,从而提供了对命名空间或复制控制器性能的单一视图。
换句话说,借助此基于元数据的聚合视图,您现在可以从监控和排除服务故障开始,并且仅在需要时才深入研究主机和容器。
让我们对这个环境再做一件事 - 让我们使用元数据来创建服务及其通信拓扑的直观表示。在这里,您可以看到我们的容器按服务组织,还有一个地图状视图,显示这些服务如何相互关联。
这些方框代表的是服务的聚合,每个方框右上角的数字表示容器的数量。线条表示服务之间的通信以及它们的延迟。
这种视图提供了另一种逻辑上的,而不是物理上的视角来观察这些应用程序组件是如何协同工作的。从这里我可以了解服务性能、关系以及底层资源消耗(在这个例子中是 CPU)。
元数据:爱上它,使用它!
这只是一个关于元数据的快速导览,但我希望它能启发您花一些时间思考元数据与您自己系统的相关性,以及您如何利用它。这里我们构建了一个非常简单的例子——应用程序和服务——但想象一下收集跨应用程序、环境、软件组件和云提供商的元数据。您可以有效地评估此基础设施任何切片的性能差异,同时 Kubernetes 还可以高效地调度资源使用。
今天就开始使用元数据可视化这些资源吧,在后续的文章中,我们将讨论基于元数据的自适应警报的强大功能。