Kubernetes排错:用容器的元数据提供新思路

本文讲的是Kubernetes排错:用容器的元数据提供新思路【编者的话】本文介绍了Kubernetes的元数据以及如何用于工作的,用好元数据有助于监控和排查系统故障,并且只有在需要的时候才去深入到主机和容器中,最后建议大家在生成环境中使用元数据。

在这篇文章中,让我们讨论一下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(翻译:钟最龙)

原文发布时间为:2016-08-30

本文作者:钟最龙

本文来自合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:Kubernetes排错:用容器的元数据提供新思路

时间: 2024-10-03 07:21:24

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

CRI-O将如何把Kubernetes推上容器生态系统的中心位置

本文讲的是CRI-O将如何把Kubernetes推上容器生态系统的中心位置[编者的话]CRI-O是什么?它将给容器世界带来哪些改变?开源项目CRI-O,即之前的OCID,旨在不依赖传统容器引擎的前提下,使开源Kubernetes调度框架可以管理和启动容器化的工作负载. 使用Google发起.Kubernetes工程师开发的容器运行时接口(CRI),通过与Kubernetes或Kubernetes的商业实例(如CoreOS Tectonic)进行交互,该软件可以帮助DevOps专家管理整个"容器生

ASP.NET MVC的Model元数据提供机制的实现

在前面的介绍中我们已经提到过表示Model元数据的ModelMetadata对象最终是通过一个名为ModelMetadataProvider的组件提供的,接下来我们着重讨论基于ModelMetadataProvider的Model元数据提供机制及其扩展. 一. ModelMetadataProvider 在ASP.NET MVC的Model元数据相关的应用编程接口中,用于创建Model元数据的ModelMetadataProvider接继承自抽象类ModelMetadataProvider.如下

DockOne微信分享(一二〇):基于Kubernetes的私有容器云建设实践

本文讲的是DockOne微信分享(一二〇):基于Kubernetes的私有容器云建设实践[编者的话]本次分享将为大家介绍易宝支付私有容器云从0到1的建设之路.包括技术选型.理论基础.基于Kubernetes的容器云和CI/CD落地过程中的挑战和踩过的坑. 建设背景及目标 在Docker技术流行开来之前,保证软件交付的质量和速度对于大多数企业来说都是困难的.业务的复杂性带来了应用的复杂性,面对成千上万的不同应用,运维部门需要时刻应对来自不同应用.不同环境的挑战.特别是在自动化运维程度不高的企业,"

网易云基于Kubernetes+Docker的容器服务研发实践

网易从2012年春开始云计算研发,陆续上线私有云IaaS.PaaS服务,并实现网易95%以上的互联网业务迁移上云.在近日的网易云技术布道系列活动中,张晓龙分享了网易云基础服务团队在研发容器服务过程中的实战经验.   一.网易云技术架构   首先看到网易云的研发历程和整体架构,如下:   下图是网易云的简单架构:     技术架构从底到上可分为三层:   基础设施层主要采用虚拟化技术将服务器.交换机/路由器以及硬盘等物理设备虚拟成为可以按需分配的计算/存储/网络资源.基础设施层主要包括:云主机.云

DockOne微信分享(一三七):Kubernetes主机和容器的监控方案

本文讲的是DockOne微信分享(一三七):Kubernetes主机和容器的监控方案[编者的话]随着Docker容器云的广泛应用,大量的业务软件运行在容器中,这使得对Docker容器的监控越来越重要.传统的监控系统大多数是针对物理机或者虚拟机设计的,而容器的特点不同与传统的物理机或者虚拟机,如果还是采用传统的监控系统,则会增加监控复杂程度,那么如何对容器进行监控呢? [3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站]本次培训围绕基于Docker的CI/CD实战展开,具体内容包括:

Kubernetes之“暂停”容器

本文讲的是Kubernetes之"暂停"容器[编者的话]希望这篇文章可以帮助大家更好的了解Kubernetes的相关核心内容. 当检查你的Kubernetes集群的节点时,在节点上执行命令docker ps,你可能会注意到一些被称为"暂停(/pause)"的容器. $ docker ps CONTAINER ID IMAGE COMMAND ... ... 3b45e983c859 gcr.io/google_containers/pause-amd64:3.0  

Kubernetes可以为容器编排做点什么?

本文讲的是Kubernetes可以为容器编排做点什么?[编者的话]毋庸置疑,Kubernetes目前已成为业内最炙手可热的容器编排框架.本文主要从宏观上阐述了Kubernetes是什么,有什么功能和特性,以及能为容器编排带来什么好处.本文只写了一个概览,有很多细节并未提及,只希望可以给正在Kubernetes道路上探索的同学一点启发. [烧脑式Kubernetes实战训练营]本次培训理论结合实践,主要包括:Kubernetes架构和资源调度原理.Kubernetes DNS与服务发现.基于Kub

Kubernetes – Google分布式容器技术初体验

Kubernetes – Google分布式容器技术初体验 Kubernetes是Google开源的容器集群管理系统.前几天写的 分布式服务框架的4项特性 中提到一个良好的分布式服务框架需要实现 服务的配置管理.包括服务发现.负载均衡及服务依赖管理. 服务之间的调度及生命周期管理. 由于Kubernetes包含了上述部分特性,加上最近Google新推出的Container Engine也是基于Kubernetes基础上实现,因此最近对Kubernetes进行了一些尝试与体验. 运行环境 Kube

Kubernetes让Docker容器如虎添翼

本文讲的是Kubernetes让Docker容器如虎添翼[编者的话]本文主要讲述作者看好Kubernetes与Docker结合的未来. 一年前,我开始学习Docker容器.几个月下来,我意识到我正在学习的是一项革命性技术,原因如下: 快速学习:对于任何我想学习的工具.框架或者编程语言,按需使用Docker容器可以加快我探索性学习环境的搭建. 按需自助服务环境:Docker容器可以用来搭建按需自助服务的开发和测试环境.对于开发和测试人员来说,这是巨大生产力的助推器. 自动部署:使用Docker容器