这是2018年7月最初发布的帖子的更新。

基于容器的微服务体系结构深刻地改变了开发和运营团队测试和部署的方式现代软件。容器使应用程序更容易扩展和部署,从而帮助公司实现现代化,但容器也带来了新的挑战和更大的复杂性,因为它创建了一个全新的基础设施生态系统。

大型和小型软件公司现在正在每天部署数千个集装箱实例,这是他们必须管理的规模复杂性。那么他们如何做到?

进入Kubernetes时代。

最初由谷歌开发,Kubernetes是一个开源container orchestration.旨在自动化部署、扩展和管理容器化应用程序的平台。事实上,Kubernetes已经做到了作为集装路政管理的Defacto标准建立是旗舰项目的云本机计算基础(CNCF)它得到了诸如谷歌、AWS、微软、IBM、英特尔、思科和红帽等关键参与者的支持。

Kubernetes可以轻松地部署和操作在微服务体系结构中的应用程序。它通过在一组主机的顶部创建抽象层来实现,因此开发团队可以部署他们的应用程序并让Kubernetes管理:

  • 通过应用程序或团队控制资源消耗
  • 在主机基础架构中均匀地分布应用程序负载
  • 在应用程序的不同实例上自动加载平衡请求
  • 监视资源消耗和资源限制以自动停止应用程序从消耗太多资源并再次重新启动应用程序
  • 将应用程序实例从一个主机移动到另一个主机,如果主机中的资源短缺,或者主机死亡
  • 自动利用新主机添加到群集中可用的额外资源
  • 容易执行金丝雀部署和回滚

参见:Docker与Kubernetes:它不是一个或另一个

好吧,但为什么这么吵呢?为什么Kubernetes如此受欢迎?

随着越来越多的组织移动到MicroService和云本机架构,它正在使用容器,他们正在寻找强大的经过验证的平台。从业者搬到了kubernetes的主要原因:

1. Kubernetes可以帮助您移动更快。实际上,Kubernetes允许您提供一个自助服务平台 - AS-Service(PAAS),为开发团队创建硬件层抽象。您的开发团队可以快速有效地要求他们所需的资源。如果他们需要更多资源来处理额外的负载,他们可以尽快获得那些,因为资源都来自所有团队的基础架构。

不再需要填写表单来请求新机器来运行应用程序。只需要准备和执行,并利用围绕Kubernetes开发的自动化打包、部署和测试工具,例如(下图)。

2. Kubernetes具有成本效益。Kubernetes和容器允许比管理程序和虚拟机更好的资源利用率;因为容器是轻量级的,所以它们需要更少的CPU和内存资源来运行。

3. Kubernetes是云无人团。kubernetes跑了亚马逊网络服务(AWS),微软Azure,而且谷歌云平台(GCP),您也可以在内部地运行它。您可以在不必重新设计的应用程序或完全重新思考基础架构的情况下移动工作负载 - 这让您可以在平台上标准化并避免供应商锁定。

事实上,公司喜欢Kublr,云计算,牧场主提供工具来帮助您在本地或任何您想要的云提供商上部署和管理Kubernetes集群。

4.云提供商将为您管理Kubernetes。如前所述,Kubernetes是当前容器编排工具的明确标准。因此,主流云供应商正在提供大量的kubernetes -as-a- service服务,这就不足为奇了。亚马逊eks.,谷歌云Kubernetes引擎,Azure Kubernetes服务(AKS),Red Hat Openshift,IBM云库伯内特服务全部提供完整的Kubernetes平台管理,因此您可以专注于对您的用户最重要的应用程序,这使您的用户融为一体。

那么,Kubernetes是如何工作的呢?

Kubernetes的中央分量是集群。集群由许多虚拟机或物理机组成,每个虚拟机都有一个特定的功能,要么作为主服务器,要么作为节点。每个节点托管由一个或多个容器组成的组(其中包含您的应用程序),主节点与节点通信,了解何时创建或销毁容器。同时,它告诉节点如何根据新的容器对齐重路由流量。

下面的图表描述了库伯涅茨的大体轮廓簇:

Kubernetes主

Kubernetes master是一个访问点(或控制平面),管理员和其他用户通过它与集群交互,以管理容器的调度和部署。一个集群总是至少有一个主服务器,但是根据集群的复制模式,可能会有更多的主服务器。

master存储整个集群的状态和配置数据ectd,持久和分布式的键值数据存储。每个节点都可以访问ECTD和通过它,节点了解如何维护它们运行的​​容器的配置。您可以在Kubernetes Master或独立配置中运行ettd。

主节点通过kube-apiserver,控制平面的主要访问点。例如,kube-apiserver确保etcd中的配置与集群中部署的容器的配置相匹配。

kube-controller -经理处理通过Kubernetes API Server管理管理群集状态的控制循环。部署,副本和节点具有此服务处理的控件。例如,节点控制器负责在整个生命周期中注册节点并监视其运行状况。

组件跟踪和管理集群中的节点工作负载kube-scheduler.。该服务跟踪节点的容量和资源,并根据其可用性向节点分配工作。

云控制器 - 经理是在kubernetes中运行的服务,有助于保持它“云无话”。Cloud-Controller-Manager用作云提供商的API和工具(例如,存储卷或负载均衡器)之间的抽象层及其在Kubernetes中的代表对应物。

节点

kubernetes群集中的所有节点都必须配置容器运行时,通常是码头工人。当容器被Kubernetes部署到集群中的节点时,容器运行时启动并管理容器。你的应用程序(web服务器、数据库、API服务器等)运行在容器内。

每个Kubernetes节点运行一个名为a的代理进程kubelet负责管理节点的状态:根据控制平面的指令启动、停止和维护应用程序容器。kubelet从它运行的节点、pod和容器收集性能和运行状况信息,并与控制平面共享这些信息,以帮助它做出调度决策。

kube-proxy是运行在集群中的节点上的网络代理。它还可以作为运行在节点上的服务的负载均衡器。

基本调度单元是一个圆荚体,它由一个或多个容器组成,这些容器保证位于主机上,并且可以共享资源。每个pod在集群中被分配一个唯一的IP地址,允许应用程序不冲突地使用端口。

您通过yaml或JSON对象描述了POD中的容器中所需状态豆荚规范。这些对象通过API服务器传递给kubelet。

POD可以定义一个或多个(例如本地磁盘或网络磁盘),并将其公开到POD中的容器,这允许不同的容器共享存储空间。例如,当一个容器下载内容和另一个容器上传到其他地方时,可以使用卷。

由于豆荚内的容器通常是短暂的Kubernetes提供了一种负载平衡器,称为a服务,以简化向一组pod发送请求的操作。服务以一组基于此选择的逻辑pod为目标标签(下面解释)。默认情况下,可以仅从群集中访问服务,但如果您希望它们从群集中接收请求,您也可以访问它们的公共访问。

部署和副本

一个部署是否调用了定义pods和容器实例数量的YAML对象复制品,每个豆荚。您可以通过a定义您希望在集群中运行的副本的数量ReplicaSet,这是部署对象的一部分。因此,例如,如果运行POD DIES的节点,则副本集将确保在另一个可用节点上调度另一个POD。

一个DaemonSet部署并在您指定的节点上运行特定守护程序(在POD中)。它们通常用于为POD提供服务或维护。例如,守护进程是如何New Relic的基础设施获取在群集中的所有节点上部署的基础架构代理。

名称空间

命名空间允许您在物理群集中创建虚拟群集。命名空间适用于许多用户分布在多个团队或项目的环境中。它们分配资源配额和逻辑隔离群集资源。

标签

lab是可以分配给Kubernetes中的pods和其他对象的键/值对。标签允许Kubernetes操作符组织和选择对象的子集。例如,在监视Kubernetes对象时,标签可以让您快速下钻到您最感兴趣的信息。

有状态集和持久存储卷

StatefulSets在需要将pods移动到其他节点、维护pods之间的网络或在pods之间持久化数据时,可以为pods分配唯一的id。同样的,持久存储卷为集群提供存储资源,pods可以在部署时请求对集群的访问。

其他有用的组件

这些Kubernetes组件是有用的,但不是常规Kubernetes功能所必需的:

Kubernetes DNS

Kubernetes提供了这种机制以域名系统服务发现豆荚之间。此DNS服务器除了您可以在基础架构中使用的任何其他DNS服务器,还配有。

集群级别的日志

如果您有一个记录工具,您可以将其与Kubernetes集成以提取和在集群中存储应用程序和系统日志,写入标准输出和标准错误。如果想使用集群级别的日志,请注意Kubernetes不提供本机日志存储;您必须提供自己的日志存储解决方案。

Helm:管理Kubernetes应用程序

是一个Kubernetes的应用程序包管理注册表,由CNCF维护。Helm“图表”是预先配置的软件应用程序资源,您可以下载并部署在Kubernetes环境中。根据一项2018年CNCF调查, 68%的受访者表示Helm是Kubernetes应用程序首选的软件包管理工具。Helm charts可以帮助DevOps团队更快地在Kubernetes中管理应用程序;它允许他们利用现有的图表,他们可以共享,版本,并部署到他们的开发和生产环境。

Kubernetes和Istio:一个很流行的组合

在Kubernetes中运行的微服务体系结构中,a服务网格是一个基础架构层,允许您的服务实例彼此通信。服务网格还允许您配置服务实例如何执行关键操作,例如服务发现,负载平衡,数据加密和身份验证和授权。Istio是一种这样的服务网格,当前从科技领袖的当前思考,如谷歌和IBM,这表明他们是越来越多地分开

例如,IBM云团队使用ISTIO到地址在大规模规模部署Kubernetes的同时遇到的控制,可见性和安全问题。更具体地说,ISTIO帮助IBM:

  • 将业务连接在一起并控制流量
  • 具有灵活授权和身份验证策略的微立井之间的安全交互
  • 提供控制点,因此IBM可以管理生产服务
  • 观察他们的服务发生,通过一个适配器这将Istio数据发送到New relic——允许它监视来自Kubernetes的微服务性能数据以及它已经收集到的应用程序数据。

Kubernetes采用的挑战

在生命的前五年里,Kubernetes显然已经走了很长的路。然而,这种快速增长也涉及偶尔的生长痛苦。以下是kubernetes采用的一些挑战:

1.Kubernetes的技术前景可能令人困惑。开发人员喜欢Kubernetes等开源技术的一个原因是它具有快速创新的潜力。但有时过多的创新会造成混乱,特别是当中央Kubernetes代码库的运行速度超过了用户能够跟上的速度时。如果平台和受管理的服务提供商数量过多,新采用者可能很难理解现状。

2.前瞻性思维开发和IT团队与业务优先事项并不总是对齐。当预算仅分配以维持现状时,团队可以努力获得资金来试验Kubernetes采用举措,因为此类实验经常吸收大量的时间和团队资源。此外,企业IT团队往往与风险和变化缓慢不利。

3.球队仍在获取利用库伯内特所需要的技能。直到几年前,开发人员和It运营人员还不得不重新调整他们的实践以采用容器——而现在,他们还必须采用容器编排。希望采用Kubernetes的企业需要雇用能够编码、知道如何管理操作并理解应用程序架构、存储和数据工作流的专业人员。

4. Kubernetes可能很难管理。事实上,您可以阅读任意数量的Kubernetes恐怖故事 - 从DNS中断到“分布式系统的级联失败” -Kubernetes失败故事GitHub repo

New Relic可以支持你的Kubernetes之旅

要完全了解您的环境中发生的内容,您需要看到其所有层,包括在您的容器内。这意味着整体,以适用于应用的和基础设施为中心的监控。监视Kubernetes中的应用程序性能很重要,但你也需要对你的Docker和Kubernetes基础设施

New Relic的Kubernetes集群资源管理器这是新遗迹基础设施的一部分,解决了这一需求。它利用了Kubernetes的主机集成,为后端和前端应用程序以及在集群中运行的主机。

New Relic的Kubernetes集群探索者的推出是一年中众多对New Relic平台进行创新升级的亮点之一

使用Kubernetes cluster explorer,团队可以获得托管应用程序的所有Kubernetes实体(节点、名称空间、neployments、ReplicaSets、pod和容器的元数据)的总体可见性、警报和仪表板。

这种集成也可以与提供者产品一起使用。例如,团队使用Red Hat OpenShift可以使用OpenShift数据链接新的遗物APM数据。此步骤为在集群中运行的应用程序提供深入的应用程序性能监视(使用代码检测和分布式跟踪)。

在链接您的应用程序之后,单击cluster explorer中的任意六边形(每个六边形代表集群中的一个pod)以打开该pod的详细视图。从这里,您可以分析在这个pod中运行的应用程序的性能。

检查有关在OpenShift集群中运行的应用程序的新遗物APM数据。

您甚至可以潜入新的遗物分布式跟踪,以检查捕获的分布式迹线,以便在该窗口中运行的应用程序运行。如果在分布式跟踪中单击单个跨度,则可以快速查看该应用程序的相关Kubernetes属性;例如,您可以了解一个单个跨度所属的POD,群集和部署。

从OpenShift集群中运行的应用程序获取分布跟踪数据。

利用新的遗物利用Kubernetes的力量对于希望充满信心地移动更快的现代软件公司至关重要。了解如何在我们的Kubernetes环境中开始监控容器New Relic的文档

Ali Gerrard是新遗物的产品营销经理。查看帖子

有兴趣为New Relic博客写作吗?亚搏体育登入网送我们一个球场!