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