在这篇文章中,让我们讨论一下Kubernetes中的元数据(Metadata),以及如何利用它来监控系统的性能。



元数据(Metadata) 是一个较为高大上的词。它的含义是“用来描述其他数据的数据”。尽管这个解释好像并没有解释到位,但实际上,元数据对容器环境来说特别的有用。当你面对一个复杂系统的时候,假如你能获取到它的元数据的话,并对加以归类并整理,能有助于直达问题核心、更快地解决问题。



在Kubernetes环境中,元数据 不仅是一个在众多服务、机器、可用区和(在未来)云平台之间组织容器编排方式的重要工具,它同时也是一个让我们理解这些编排的关键工具。元数据 可以被运行在Kubernetes系统之上的其他的服务使用,从而帮助你管理应用。



下面我们将举一些例子,但在这之前,先让我们简单介绍一下Kubernetes的元数据

元数据简介

Kubernetes中有很多元数据,它们以 “标签”(Label) 或者 “注解”(Annotation) 的形式存在。按照设计,“标签” 是具有标识性的(identifying元数据,而“注解”是那些没有标识性的(non-identifying)元数据。他们都是很简单的键值对,看起来就像这样:

“labels”: {
“key1” : “value1”,
“key2” : “value2”
}

“标签”不具有唯一性:你可能会看到你环境中的很多对象都有同样的“标签”,同时你也可能看到一个对象有很多的“标签”。



我们在什么时候可能会用到“标签”呢?这里是一些例子。注意:一旦你开始使用“标签”,你会发现有很多用到这个功能的地方!

  • 环境(Environment):Dev,Prod,Test,UAT
  • 客户(Customer):Cust A,Cust B, Cust C
  • 层(Tier):Frontend, Backend
  • 应用(App):Cache, Web, Database, Auth

除了自定义的“标签”,Kubernetes自己也会为系统添加包含有用原数据的“标签”。默认的标签提供了Kubernetes层级关系中关键的辨识信息:Pod,“服务(Service)”, “复制控制器(Replication Controller)”,和“命名空间(Namespace)”。

让元数据一展身手

一旦你花了一点时间在Kubernetes之后,你会发现“标签”有一个特别强大的应用,正是这一点让它们必不可少:



Kubernetes的“标签”能让你在一个关于你主机和容器的“物理”视图,和一个关于你应用和微服务的“逻辑”视图之间轻松地切换。



从本质上,像Kubernetes这种平台的设计宗旨是编排,以让底层的物理资源得到最优的利用。这是一种强大的有效利用私有或者公有云资源的方式,并且有时候你需要将这些物理资源进行可视化。然而在现实中,绝大多数时候你首先关心,也最关心的是服务的性能。



但是在Kubernetes的世界中,要获得这种高利用率意味着一个服务的容器可能会分散遍布各处。那么你该如何来衡量一个“服务”的性能呢?这里就是元数据可以一展身手的地方了。使用Kubernetes元数据,你能深入认识你服务的性能,不管底层的容器的物理位置处于何处。

有图有真相

让我们看一个能让你对这点有具体认识的例子:应用程序的监控。我这里在GKE部署了一个小型的环境,包含3个节点。我们这里将使用Sysdig Cloud来对这个环境进行可视化。下面是节点的列表 - 你可以看到每一个主机名前以“gke”开头。我们能看到一些基本的性能参数:如CPU,内存和网络等。

每一个主机都运行着一些容器。点击主机,我们会看到相关的容器:

仅仅的看这个单个主机上的容器列表,我看不出这些对象的职责结构。我们只能大概地猜测,一些容器运行着Kubernetes的服务(比如:kube-ui),其他的容器与应用相关(如:javaapp.x)。



现在,让我们使用Kubernetes提供的元数据来从“以应用为中心”的视角观察这个系统。让我们基于“标签”对组件创建出一个层级结构,顺序如下:



“命名空间(Namespace)” -> “复制控制器(Replication Controller)” -> Pod -> “容器(Container)”



这将容器基于以上的“标签”在不同的层次进行了聚合。在下面的app UI中,这种聚合和层级关系以灰色的分组导航条表示。你可以看到,我们有一个名为prod的“命名空间”,其下有一组“服务”(“复制控制器”)。每一个“复制控制器”包含多个“Pod”,而一个“Pod”又由多个“容器”组成。

除了通过“标签”来组织容器之外,这个视图同时对相关容器的指标进行了聚合,可以让我们方便查看单个“命名空间”或者“复制控制器”的性能详情。



换句话说:有了这种基于元数据的聚合视图,你可以(在较高的层次)对服务进行监控或者排错,只有在必要的时候才深入到主机或者容器层。



让我们用这个环境来干另外一件事情 - 使用元数据来可视化呈现这些“服务”和它们之间的交互拓扑。这里你可以看到我们的容器是以“服务”来组织的,但同时其像映射一样的视图能让你看清这些“服务”彼此是如何关联的。

这些方框代表了由“容器”聚合而成的“服务”(右上方的数字显示了包含的容器的数量),这些箭头代表了“服务”之间的交互和它们的延迟。



这种视图提供另外一种逻辑的非物理的视图,可以让我们展示这些组件是如何一起工作的。有了它我可以清楚的知道“服务”的性能,交互关系,和底层资源消耗(如这个例子中的CPU)。

元数据:爱之,不释手

虽然这是一篇元数据很简短的介绍,但是我希望这能启发你花一点时间思考它与你自己系统的关系,并且思考可以如何利用它。这里我们用它做了一个非常简单的例子 - 主要是应用和服务 - 但是你可以想象一下收集跨应用、跨环境、跨软件组件和跨云提供商的元数据,在Kubernetes有效地进行调度资源的时候,你可以快速地评估你的基础设施中任何部分(slice)的性能差异。



今天就讲这些资源的可视化,在下面的一篇文章中,我们将会谈到基于元数据的的自适应报警(adaptive alerting



(原文链接:Troubleshooting Kubernetes: How container metadata changes your point of view,翻译:钟最龙)

Kubernetes排错:用容器的元数据提供新思路的更多相关文章

  1. .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)

    阅读目录: 1.需求背景介绍(Model元数据设置项应该与View绑定而非ViewModel) 1.1.确定问题域范围(可以使用DSL管理问题域前提是锁定领域模型) 2.迁移ViewModel设置到外 ...

  2. ASP.NET MVC5学习笔记之Action参数模型绑定之模型元数据和元数据提供

    一. 元数据描述类型ModelMetadata 模型元数据是对Model的描述信息,在ASP.NET MVC框架中有非常重要的作用,在模型绑定,模型验证,模型呈现等许多地方都有它的身影.描述Model ...

  3. 基于Kubernetes构建企业容器云

    前言 团队成员有DBA.运维.Python开发,由于需要跨部门向公司私有云团队申请虚拟机, 此时我在思考能否在现有已申请的虚拟机之上,再进行更加细粒度的资源隔离和划分,让本团队的成员使用, 也就是在私 ...

  4. 腾讯基于Kubernetes的企业级容器云平台GaiaStack (转)

    GaiaStack介绍 GaiaStack是腾讯基于Kubernetes打造的容器私有云平台.这里有几个关键词: 腾讯:GaiaStack可服务腾讯内部所有BG的业务: Kubernetes:Gaia ...

  5. Kubernetes+Docker+Istio 容器云实践

    随着社会的进步与技术的发展,人们对资源的高效利用有了更为迫切的需求.近年来,互联网.移动互联网的高速发展与成熟,大应用的微服务化也引起了企业的热情关注,而基于Kubernetes+Docker的容器云 ...

  6. 026.[转] 基于Docker及Kubernetes技术构建容器云平台 (PaaS)

    [编者的话] 目前很多的容器云平台通过Docker及Kubernetes等技术提供应用运行平台,从而实现运维自动化,快速部署应用.弹性伸缩和动态调整应用环境资源,提高研发运营效率. 本文简要介绍了与容 ...

  7. Kubernetes基石-pod容器

    引用三个问题来叙述Kubernetes的pod容器 1.为什么不直接在一个Docker容器中运行所有的应用进程. 2.为什么pod这种容器中要同时运行多个Docker容器(可以只有一个) 3.为什么k ...

  8. 容器云平台No.1~基于Docker及Kubernetes构建的容器云平台

    开篇 最近整理笔记,不知不觉发现关于kubernetes相关的笔记已经达99篇了,索性一起总结了.算是对这两年做容器云平台的一个总结,本文是开篇,先介绍下所有用到的组件.首先来看下架构图(实在画的太丑 ...

  9. MVC3.0学习笔记之元模型元数据ModelMetaData以及模型元数据提供系统

    模型元数据ModelMetaData是MVC中很重要的概念,它包括但不仅限于 模型的类型,模型包含了哪些属性,属性都是什么类型的,属性上都有什么特性. ASP.NET MVC3.0 提供了默认的模型元 ...

随机推荐

  1. Leetcode151. Reverse Words in a String翻转字符串里的单词

    给定一个字符串,逐个翻转字符串中的每个单词. 示例: 输入: "the sky is blue", 输出: "blue is sky the". 说明: 无空格 ...

  2. 如约而至(walk)

    LCA大佬的做法: 考虑暴力的高斯消元,我们优化它. $\sum\limits_{j} gcd(i,j)^{c-d} i^d j^d x_j=b_i$ $\sum\limits_{j} gcd(i,j ...

  3. TZ_14_Zuul网关_过滤器

    1.Zuul作为网关的其中一个重要功能,就是实现请求的鉴权.而这个动作我们往往是通过Zuul提供的过滤器来实现的. 2.自定义过滤器实现用户登陆时需要携带一个Key才可以登陆,否则返回403 1> ...

  4. web服务器--nginx简介

    nginx 介绍Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx是一款轻量级的Web 服务器/反向代理服务器及电 ...

  5. HTML 语法简要总结

    HTML基本语法 认识网页 网页主要由文字.图像和超链接等元素构成.当然,除了这些元素,网页中还可以包含音频.视频以及Flash等. 常见浏览器内核介绍 浏览器是网页运行的平台,常用的浏览器有IE.火 ...

  6. Java review-basic6

    1. Weak references: In computer programming, a weak reference is a reference that does not protect t ...

  7. Spring事务_注解_特性

    Spring 是一个 IOC 和 AOP 容器框架. ## 控制反转(IOC) ## 传统的 java 开发模式中,当需要一个对象时,我们会自己使用 new 或者 getInstance 等直接或者间 ...

  8. sqlserver 2008 R2 安装教程(心得记录)

    在这里简单的记录下自己安装sqlserver的过程吧(本人以前安装失败过,然后卸载了,就一直没用,现在由于工具原因,重新安装,过程相对第一次安装会复杂点) 1.首先,把以前安装的注册表的对应c盘的文件 ...

  9. django中模板

    一.创建模板目录和模板html文件 # /templates/应用名称/html文件集合 #模板目录:创建项目根目录下面,和manage.py工具在同一层#在模板目录下面分别创建各个应用的模板目录#最 ...

  10. spring和mybatis整合遇到org.springframework.beans.factory.BeanDefinitionStoreException

    今天对spring和mybatis整合进行练习,通过MapperScannerConfigurer进行mapper扫描 但是在进行单元测试的时候,死活就是报错,具体报错如下: org.springfr ...