Kubernetes

menu icon

Kubernetes

Kubernetes 是一个开源容器编排平台,可自动部署、管理和扩展应用。 了解 Kubernetes 如何支持具有成本效益的云原生开发。

什么是 Kubernetes?

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

Kubernetes 最初由 Google 工程师开发,后来于 2014 年开源。 它的前身是 Borg, 这是 Google 内部使用的一种容器编排平台。 Kubernetes 是希腊语,意为舵手领航员,因此 Kubernetes 的徽标(链接位于 IBM  外部)为舵手。

如今,Kubernetes 和更广泛的容器生态系统正在逐渐成熟,形成一个通用的计算平台和生态系统 - 虚拟机 (VM) 是现代云基础架构和应用的基础构建块,它即使没有超越虚拟机,也可以与之抗衡。 此生态系统使组织能够提供高生产力的平台即服务 (PaaS),解决围绕云原生开发、与基础架构和运营相关的多个任务及问题,从而使开发团队可以仅专注于编码和创新。     

在以下视频中,Sai Vennam 给出了对 Kubernetes 基础知识的解释 (10:59):

什么是容器?

让我们先从定义开始: 容器是软件的可执行单元,其中应用代码与库和依赖关系以通用方式打包在一起,因此它可以在桌面、传统 IT 或云端等任何位置运行。

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

容器、虚拟机与传统基础架构的对比

将容器视为 IT 基础架构自动化和抽象连续体中最新的点,或许更便于理解或更有用。

在传统基础架构中,应用在物理服务器上运行,并抓取它们可以获取的所有资源。 这使得您可以选择在单个服务器上运行多个应用,并且希望其中一个应用不会占用其他应用的资源,或者选择为每个应用专用一个服务器,这样就会浪费资源,而且不能扩展。

虚拟机 (VM) 是从实际计算机硬件中抽象出来的服务器,支持您在一个物理服务器上运行多个虚拟机,或者跨多个物理服务器运行单个虚拟机。 每个虚拟机都运行自己的操作系统实例,并且您可以在自己的虚拟机中隔离每个应用,从而减少在同一底层物理硬件上运行的应用相互影响的机会。 虚拟机可以更好地利用资源,与传统基础架构相比,更加便捷,也更加经济高效。 而且,虚拟机是一次性工具 - 当您不再需要运行应用时,就可以关闭虚拟机。

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

容器将此抽象提升到了更高级别 - 具体而言,除了共享底层的虚拟化硬件,还可以共享底层的虚拟化操作系统内核。 容器提供与虚拟机相同的隔离、可扩展性和可处置性,但由于它们不携带各自操作系统实例的有效内容,因此比虚拟机更加轻巧(即,占用的空间更少)。 它们的资源利用效率更高 - 支持您在更少的机器(虚拟和物理)上运行更多的应用,同时使用更少的操作系统实例。 容器可以在桌面、数据中心和云环境之间更轻松地移植。 它们非常适合敏捷和 DevOps 开发实践。

容器:基本指南”给出了容器和容器化的完整说明。此外,“容器与虚拟机:有何区别?”博客文章完整概述了具体差异。

什么是 Docker?

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

Docker 最初是一个开源项目,但现在它还可以指生产 Docker(一个基于开源项目而构建的商业容器工具包,并会将这些改进贡献给开源社区)的公司 Docker Inc.。

Docker 基于传统的 Linux 容器 (LXC) 技术而构建,但支持更加细粒度的 Linux 内核进程虚拟化,同时也添加了一些功能,更便于开发人员构建、部署、管理和保护容器。

尽管现在已经有了替代性的容器平台(例如 Open Container Initiative (OCI)、CoreOS 和 Canonical (Ubuntu) LXD),但 Docker 仍受到广泛青睐,甚至几乎成为了容器的代名词,有时还被误认为是 Kubernetes 之类补充技术的竞争对手(请参阅视频“Kubernetes 与 Docker: 这不是一个非此即彼的问题”)。

使用 Kubernetes 的容器编排

随着容器数量的激增(如今,一个组织可能拥有数百或数千个容器),运营团队需要调度并自动部署、联网、扩展和供应容器。 容器编排市场应运而生。

尽管其他容器编排选项( 最著名的就是 Docker Swarm 和 Apache Mesos)早期拥有一些吸引力,但 Kubernetes 很快就得到了最广泛的采用(事实上,它一度是开源软件史上发展最快的项目)。

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

有关容器编排的更多信息,请参阅视频“容器编排说明”(08:59):

Kubernetes 有哪些用途?

Kubernetes 可调度并自动执行以下及其他容器相关任务:

  • 部署:将指定数量的容器部署到指定的主机,并使它们以期望的状态运行。
  • 推出:推出是对部署的更改。Kubernetes 让您能够启动、暂停、恢复或回滚推出操作。
  • 服务发现:Kubernetes 可以使用 DNS 名称或 IP 地址自动向互联网或其他容器公开某个容器。
  • 存储配置:设置 Kubernetes,根据需要为容器安装持久本地或云存储。
  • 负载均衡和扩展:当容器流量到达峰值时,Kubernetes 可以使用负载均衡和扩展功能在网络中分发流量,从而保持稳定性。
  • 通过自我修复实现高可用性:当容器发生故障时,Kubernetes 可以自动重新启动或替换该容器;它还可以关闭不符合您的运行状况检查需求的容器。

Kubernetes 与 Docker

如果读到这里,那么您就已经明白 Kubernetes 是 Docker Swarm 的替代工具,而不是(与持续存在的普遍误解相反)Docker 本身的替代产品或竞争产品。

事实上,如果您已经积极踊跃地采用 Docker,并且正在创建基于 Docker 的大规模容器部署,那么 Kubernetes 编排就是为了管理这些工作负载而在逻辑上采取的后续操作。 要了解更多信息,请观看“Kubernetes 与 Docker: 这不是一个非此即彼的问题”(08:03):

Kubernetes 架构

Kubernetes 架构的主要组成部分包括以下内容:

集群和节点(计算)

集群是 Kubernetes 架构的构建块。集群由节点组成,每个集群表示单个计算主机(虚拟或物理机器)。

每个集群都包含多个工作节点,用于部署、运行和管理容器化应用,同时还包含一个主节点,用于控制和监视工作节点。

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

要深入了解 Kubernetes 集群,请阅读此博文:“Kubernetes 集群:受控的迅捷云应用交付架构”。

Pod 和部署(软件)

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

部署可控制容器化应用的创建和状态,并使其一直运行。它指定了应该在集群上运行的 Pod 副本数量。 如果 Pod 发生故障,那么部署将会创建新的 Pod。

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

要更详细地了解 Kubernetes 架构的要素,请参加此自定进度的在线课程:“Kubernetes 101”。

您还可以阅读博文“Kubernetes 架构:容器解决方案的四种方法”,进一步深入探究。

Istio 服务网格

Kubernetes 可以部署和扩展 Pod,但无法管理或自动执行它们之间的路由,也不提供任何工具来监视、保护或调试这些连接。 随着集群中容器数量的增长,它们之间可能的连接路径数量也会呈指数级增加(例如,两个容器具有两种可能的连接路径,而 10 个 pod 具有 90 种连接路径),从而会造成可能的配置和管理难题。

Istio 是面向 Kubernetes 集群的开源服务网格层。在每个 Kubernetes 集群中,Istio 都会添加一个 sidecar 容器(对程序员和管理员基本上不可见),用于配置、监视和管理与其他容器之间的交互。

借助 Istio,您可以为配置容器之间的连接设置单个策略,这样就不必单独配置每个连接。 这样就更便于调试容器之间的连接。

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

请参阅“Istio是什么?”一文,了解更多详细信息,包括 Istio 使用视频和一些示例。

Knative 和无服务器计算

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

Knative 为无服务器计算提供了一个便捷的通道

无服务器计算是一种相对新型的代码部署方式,可以让云原生应用更高效,更具成本效益。无服务器计算不会部署正在等待请求的空闲代码实例,而是 根据需求调出代码(随着需求波动向上或向下扩展),然后在不使用时删除代码。 无服务器方式可防止浪费计算容量和能力,并降低了成本,因为只有当代码实际运行时才需要为代码的运行付费。

Knative 使开发者能够一次构建容器,然后将其作为软件服务无服务器函数来运行。它对开发者完全透明: Knative 可在后台处理详细信息,开发者则可以着重关注代码。

Knative 简化了容器开发和编排过程

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

Knative 通过以下三个组件自动完成这些任务:

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

您可以阅读“Knative:基本指南”,了解有关 Knative 的更多信息。

Kubernetes GitHub 提交和人气飙升的更多证据

Kubernetes 是历史上增长最快的开源项目之一,并且增长速度仍在不断加快。 在开发者及其所在公司之间,采用数量仍在不断飞涨。 以下一些数据点值得引起注意:

  • 在撰写本文时,已对 GitHub 上的 Kubernetes 存储库(链接位于 IBM 外部)进行了超过 86,200 次提交(包括过去四个月的将近 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 外部)
  •  Container Journal(链接位于 IBM 外部)中引用了 2019 年 7 月的一项调研,该调研发现,在过去六个月中,Kubernetes 采用率增加了 51%。
  • 超过 12,000 人参加了 2019 年北美 KubeCon + CloudNative Con (链接位于 IBM 外部)会议,比去年的创纪录参与人数增加了超过 3,000 人 。
  • 根据 ZipRecruiter(链接位于 IBM 外部)的数据显示,Kubernetes 相关工作的平均年薪(在北美地区)为 USD 144,628。在撰写本文时, LinkedIn(链接位于 IBM 外部)上列出了超过 21,000 个与 Kubernetes 相关的职位。

Kubernetes 教程

如果您准备开始使用 Kubernetes,或者寻求利用 Kubernetes 和 Kubernetes 生态系统工具来培养您的技能,可尝试学习以下某个教程:

Kubernetes 和 IBM Cloud

作为一种托管的容器编排解决方案,IBM Cloud® Kubernetes Service 可自动部署、运行、扩展和监控计算主机集群中的容器化应用,同时增加了 IBM 特定的功能。 它支持快速交付应用,并可以绑定到区块链IBM® Watson 之类的高级服务。

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

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

通过最新的 Forrester Wave:多云容器开发平台报告 (PDF, 415 KB) ,阅读有关 OpenShift 的更多信息。

要开始操作,请注册 一个 IBMid 并创建 IBM Cloud 帐户