菜单图标

Kubernetes

Kubernetes是一个开源容器编排平台,可自动执行应用程序的部署,管理和扩展。了解Kubernetes如何实现经济高效的云原生开发。

什么是Kubernetes?

Kubernetes(也称为“ k8s”或“ kube”)是一个容器编排平台,用于调度和自动化容器化应用程序的部署,管理和扩展。

Kubernetes最初由Google的工程师开发,然后于2014年开源。它是Borg的后代,Borg是Google内部使用的容器编排平台。 Kubernetes是希腊文 舵手 或者 飞行员,因此掌舵人 Kubernetes徽标 (链接位于IBM外部)。

如今,Kubernetes和更广泛的容器生态系统正在逐渐成熟成为一个通用计算平台和生态系统,可以与(甚至超过)虚拟机(VM)媲美,而虚拟机是现代云基础架构和应用程序的基本构建块。这个生态系统使组织能够提供高生产力 平台即服务(PaaS) 解决了与基础架构和运营相关的多个任务和问题 云原生 开发,以便开发团队可以完全专注于编码和创新。     

在下面的视频中,Sai Vennam对Kubernetes的基础知识进行了解释(10:59):

什么是容器?

让我们从一个定义开始:容器是一种软件的可执行单元,其中,应用程序代码与库和依赖项一起以通用方式打包在其中,以便可以在台式机,传统IT或云上的任何位置运行。

容器利用操作系统(OS)的形式 虚拟化 通过隔离进程并控制这些进程可以访问的CPU,内存和磁盘的数量,使多个应用程序共享操作系统。

容器与虚拟机与传统基础架构

将容器理解为IT基础结构自动化和抽象连续体的最新点可能更容易或更有用。

在传统的基础架构中,应用程序在物理服务器上运行,并获取它们可以获得的所有资源。这样一来,您可以选择在单个服务器上运行多个应用程序,并且希望一个服务器不浪费其他资源,也不希望每个应用程序专用一个服务器,这浪费了资源且无法扩展。

虚拟机(VM)是从实际计算机硬件中抽象出来的服务器,使您可以在一台物理服务器上或跨一台以上物理服务器的单个VM上运行多个VM。每个VM运行其自己的OS实例,您可以将每个应用程序隔离在其自己的VM中,从而减少了在同一基础物理硬件上运行的应用程序相互影响的机会。虚拟机可以更好地利用资源,并且比传统基础架构更容易扩展且更具成本效益。而且,它们是一次性的-当您不再需要运行应用程序时,您就可以关闭虚拟机。

有关VM的更多信息,请参阅“虚拟机:基本指南。”

容器将这种抽象提升到更高的层次-特别是,除了共享底层的虚拟化硬件之外,它们还共享底层的虚拟化OS内核。容器具有与VM相同的隔离性,可伸缩性和可处理性,但是由于它们不携带自己的OS实例的有效负载,因此它们的重量(即占用的空间较小)比VM轻。它们具有更高的资源效率-它们使您可以在更少的计算机(虚拟和物理)和更少的OS实例上运行更多应用程序。容器更易于在台式机,数据中心和云环境中移植。它们非常适合敏捷和 开发运维 开发实践。

"容器:基本指南“提供了有关容器和容器化的完整说明。博客文章”容器与虚拟机:有什么区别?”提供了差异的完整摘要。

什么是Docker?

码头工人 是用于创建和运行Linux®容器的最受欢迎的工具。尽管数十年前就已经推出了早期形式的容器(使用FreeBSD Jails和AIX Workload Partitions等技术),但在Docker于2013年实现了民主化之后,Docker通过对开发者友好和对云友好的新实现将它们推向了大众。

码头工人最初是一个开放源代码项目,但今天它也指的是生产Docker的公司Docker Inc.,该公司是一个基于开放源代码项目构建的商业容器工具包(并将这些改进归还给开放源代码社区)。

码头工人建立在传统的Linux容器(LXC)技术的基础上,但可实现Linux内核进程的更精细的虚拟化,并添加了一些功能,使开发人员更易于构建,部署,管理和保护容器。

尽管当今存在替代的容器平台(例如开放容器倡议(OCI),CoreOS和Canonical(Ubuntu)LXD),但Docker受到如此广泛的青睐,以至于它实际上是容器的代名词,有时被误认为是互补技术(例如)的竞争对手Kubernetes(请参见下面的视频“ Kubernetes与Docker:这不是一个问题”)。

使用Kubernetes进行容器编排

随着容器的激增-今天,一个组织可能有成百上千的容器-调度和自动化容器部署所需的运营团队, 联网,可扩展性和可用性。这样,容器编排市场就诞生了。

虽然其他容器编排选项-最著名的是Docker Swarm和Apache Mesos-在早期就获得了一定的吸引力,但Kubernetes迅速成为应用最广泛的工具(实际上,在某一时刻,它是开源软件历史上增长最快的项目) 。

开发人员选择(并且继续选择)Kubernetes是因为其功能广泛,其庞大且不断增长的开源支持工具生态系统以及在领先的云提供商(其中一些现在提供完全托管的Kubernetes服务)中的支持和可移植性。

有关容器编排的更多信息,请参见视频“ Container Orchestration Explained”(08:59):

Kubernetes是做什么的?

Kubernetes计划并自动执行以下任务以及其他与容器相关的任务:

  • 部署: 将指定数量的容器部署到指定的主机,并使它们以所需的状态运行。
  • 推出: 推出是对部署的更改。 Kubernetes允许您启动,暂停,恢复或回滚部署。
  • 服务发现: Kubernetes可以使用 DNS名称 或者 IP address.
  • 存储资源调配: 根据需要设置Kubernetes来为您的容器安装持久性本地存储或云存储。
  • 负载平衡和扩展: 当到集装箱的流量激增时,Kubernetes可以雇用 负载均衡 并进行扩展以将其分布在整个网络上以保持稳定性。
  • 自我修复 高可用性: 当容器发生故障时,Kubernetes可以自动重新启动或替换它。它也可以取下不符合您的健康检查要求的容器。

Kubernetes与Docker

如果您已经阅读了本文,那么您已经了解了 Kubernetes是Docker Swarm的替代品, 它是 不是 (与持续的流行误解相反)是Docker本身的替代者或竞争对手。

实际上,如果您热情地采用了Docker并正在创建基于Docker的大规模容器部署,那么Kubernetes编排是管理这些工作负载的逻辑下一步。要了解更多信息,请观看“ Kubernetes与Docker:无关紧要的问题”(08:03):

Kubernetes架构

Kubernetes体系结构的主要组件包括以下内容:

集群和节点(计算)

集群 是Kubernetes体系结构的基石。集群由以下组成 结点,每个代表一个计算主机(虚拟机或物理机)。

每个群集包含多个 工作节点 部署,运行和管理 集装箱化 应用和一 主节点 控制和监视工作程序节点。

主节点运行调度程序服务,该服务根据开发人员设置的部署要求和可用的计算能力自动部署容器的时间和位置。每个工作程序节点都包含用于管理容器的工具(例如Docker)和一个称为a的软件代理。 Kubelet 从主节点接收并执行订单。

要深入了解Kubernetes集群,请查看此博客文章:“Kubernetes集群:快速,受控的云应用交付架构。”

吊舱和部署(软件)

豆荚 是共享相同计算资源和相同网络的容器组。它们也是Kubernetes中可伸缩性的单位:如果Pod中的容器获得的流量超出其处理能力,则Kubernetes会将Pod复制到集群中的其他节点。因此,最好将Pod保持紧凑,使其仅包含必须共享资源的容器。

部署 控制容器化应用程序的创建和状态并保持其运行。它指定应在集群上运行Pod的副本数量。如果pod失败,则部署将创建一个新的pod。

有关Kubernetes部署的更多信息,请观看“ Kubernetes部署:快速入门”(03:54):

要更详细地了解Kubernetes架构的元素,请尝试以下自定进度的在线课程:Kubernetes 101”。

您也可以通过博客文章“Kubernetes体系结构:容器解决方案的四种方法。”

Istio服务网格

Kubernetes可以部署和扩展Pod,但是它无法管理或自动化Pod之间的路由,并且不提供任何工具来监视,保护或调试这些连接。随着集群中容器数量的增加,它们之间可能的连接路径数量呈指数级增长(例如,两个容器有两个潜在的连接,而10个容器有90个),这造成了潜在的配置和管理噩梦。

输入开源的Istio 服务网格 Kubernetes集群的第二层Istio向每个Kubernetes集群添加一个 边车 容器-对程序员和管理员来说基本上是不可见的-配置,监视和管理其他容器之间的交互的容器。

使用Istio,您可以设置一个策略来配置容器之间的连接,从而不必分别配置每个连接。这使容器之间的连接更易于调试。

Istio还提供了一个仪表板,DevOps团队和管理员可以使用它来监视延迟,服务时间错误以及容器之间连接的其他特征。而且,它内置了安全性-特别是身份管理(可防止未经授权的用户欺骗容器之间的服务调用)-以及身份验证,授权和审核(AAA)功能,安全专业人员可以使用这些功能来监视群集。

请参阅文章“什么是Istio?”以获取更多详细信息,包括视频和正在使用的Istio的示例。

原生和无服务器计算

Knative(发音为“ kay-native”)是一个位于Kubernetes之上的开源平台,为云原生开发提供了两个重要的好处:

Knative为无服务器计算提供了轻松的入口

无服务器计算 是一种相对较新的代码部署方式,它使云本机应用程序更高效,更具成本效益。无需部署等待请求时处于空闲状态的正在进行的代码实例,无服务器可根据需要启动代码-根据需求的变化将其放大或缩小-然后在不使用时删除代码。无服务器可防止浪费的计算能力和功能并降低成本,因为您只需在代码实际运行时才运行即可。

Knative使开发人员可以一次构建一个容器并将其作为软件服务运行 或者 作为无服务器功能。这对开发人员来说都是透明的:Knative在后台处理细节,开发人员可以专注于代码。

Knative简化了容器的开发和编排

对于开发人员而言,容器化代码需要大量重复步骤,而编排容器则需要大量配置和脚本编写(例如生成配置文件,安装依赖项,管理日志记录和跟踪以及编写) 持续集成/持续部署 (CI/CD) scripts.)

Knative通过以下三个组件使它们自动化,从而使这些任务更加容易:

  • 建造: Knative的Build组件会自动将源代码转换为云原生容器或函数。具体来说,它将代码从存储库中提取出来,安装所需的依赖项,构建容器映像,然后将其放入容器注册表中,以供其他开发人员使用。开发人员需要指定这些组件的位置,以便Knative可以找到它们,但是一旦完成,Knative即可自动进行构建。
  • 服务: 服务组件将容器作为可伸缩服务运行;它可以扩展到 容器实例的数量或按比例缩小到无(称为 缩放到零)。另外,Serve具有两个非常有用的功能:
    • 配置,它保存容器的版本(称为 快照),每次将容器推入生产环境时,即可同时运行这些版本。
    • 服务 路由,您可以将不同的流量定向到这些版本。您可以将这些功能一起使用,以逐步进行容器推出或对容器化应用程序进行Canary测试,然后再将其投入全球生产。
  • 事件: 事件使指定的事件能够触发基于容器的服务或功能。这对于Knative的无服务器功能特别重要。需要告诉系统在需要时调出功能。事件允许团队表达对事件类型的兴趣,然后它自动连接到事件生产者并将事件路由到容器中,从而无需对这些连接进行编程。

您可以通过阅读“Knative:基本指南。”

面向企业的开源Paas的ops引擎

用于企业的开源PaaS的ops引擎。 Kubernetes,Istio和Knative是完整的开源多云平台即服务(PaaS)的一部分,用于使用同一套开发和管理工具构建和运行容器,应用程序和无服务器环境。

Kubernetes GitHub承诺提供更多证据,证明越来越受欢迎

Kubernetes是历史上增长最快的开源项目之一,并且还在加速增长。开发人员和雇用他们的公司之间的采用率继续飙升。一些数据点值得注意:

  • 在撰写本文时,已对超过86,200的提交进行了提交。 GitHub上的Kubernetes存储库 (链接位于IBM外部)-在过去四个月中有近6,000次提交-该项目有2,300多名活跃参与者。根据 云原生计算基金会 (链接位于IBM外部),所有与Kubernetes相关的存储库(包括Kubernetes Dashboard和Kubernetes MiniKube)的提交超过148,000次。
  • 超过1,500家公司在其生产软件堆栈中使用Kubernetes。这些公司包括AirBnB,Bose,CapitalOne,Intuit,Nordstrom,Philips,Reddit,Slack,Spotify,Tinder等世界知名企业,当然还有IBM。 阅读这些和其他收养案例研究 (链接位于IBM外部)
  • 2019年7月的一项调查引用于 集装箱杂志 (链接位于IBM外部)发现在过去六个月中Kubernetes的采用率增加了51%。
  • 超过12,000人参加了 KubeCon + CloudNative Con北美2019 (链接位于IBM外部)会议-比上一年创纪录的出席人数增加了3,000多人。
  • 根据 邮递员 (链接位于IBM之外),与Kubernetes相关的工作的平均年薪(在北美)为144,628美元。在撰写本文时,目前列出了超过21,000个与Kubernetes相关的职位 领英 (链接位于IBM外部)。

Kubernetes教程

如果您准备开始使用Kubernetes或希望使用Kubernetes和Kubernetes生态系统工具来增强技能,请尝试以下教程之一:

Kubernetes和IBM Cloud

托管的容器编排解决方案, IBMCloud®Kubernetes服务 在添加IBM特定功能的同时,自动执行计算主机集群中容器化应用程序的部署,操作,扩展和监视。它可以快速交付应用程序,并可以绑定到高级服务,例如 区块链IBMWatson®.

有关托管Kubernetes服务如何在您的云之旅中如何帮助您的概述,请观看我们的视频“托管Kubernetes的优势”(03:14):

IBM Cloud上的RedHat®OpenShift® 是一项综合服务,可在IBM Cloud平台上提供完全托管的OpenShift集群。 (OpenShift是在Red Hat Enterprise Linux上运行的企业Kubernetes平台。)

在新版本中了解有关OpenShift的更多信息 Forrester Wave:“多云容器开发平台”报告(PDF,415 KB)。

首先,注册一个IBMid,然后 创建您的IBM Cloud帐户.