解释 Kubernetes 的基本概念

学习目标

  • 定义 Kubernetes

  • 描述 Kubernetes 所应对和解决的挑战

  • 列出 Kubernetes 的六项主要特性

使用场景:Kubernetes 的基本概念

视频:本节含 SAP 官方视频(视频 ID 1_0mtwkyf9),需在 learning.sap.com 在线观看。

一家公司在其自行管理的系统上运行着各种应用程序。他们面临的问题是:他们运行着大量应用工作负载,却未能高效利用其资源。他们正在寻找一种解决方案,以便在一个可扩展且可靠的平台上更高效地管理其应用程序和资源。

该公司正在考虑将 SAP 托管的 Kubernetes 产品 SAP BTP, Kyma runtime 作为其问题的解决方案。他们可以跟随此学习之旅来进一步了解该解决方案及其能力。如果团队选择采用 Kyma,他们还可以推荐将其用于新加入团队开发者的入职培训。

什么是 Kubernetes?

在探索 Kyma 之前,让我们先了解 Kubernetes——Kyma 所构建于其上的底层技术。本质上,Kyma 是 Kubernetes 的一组扩展。

“Kubernetes,也称为 K8s,是一个用于自动化部署、扩展和管理容器化应用程序的开源系统”(Kubernetes.io)。Kubernetes 具有高度可移植性,几乎可以在任何地方运行,无论是公有云、私有云还是本地环境。所有主要云提供商都将 Kubernetes 作为托管服务提供(Kubernetes as a Service,即 KaaS)。SAP BTP, Kyma runtime 就是这些托管 Kubernetes 服务之一。

Kubernetes 最初由 Google 于 2014 年开发,用于处理其生产环境中运行容器的大量工作负载,它建立在多年内部运行生产工作负载的经验之上。两年后,它被捐赠给云原生计算基金会(CNCF)。云原生计算基金会是一个成立于 2015 年的厂商中立组织,旨在推动云原生技术的发展。该联盟及其成员(例如 SAP、Google、IBM、Red Hat、Docker、Microsoft 等)共同致力于定义 Kubernetes 等云原生技术的未来。

Kubernetes 所应对的挑战

Kubernetes 应对的关键挑战之一,是应用程序工作负载的高效管理。

许多组织通常在生产服务器(无论是裸机还是虚拟机)上运行着各种各样的应用程序。这些应用程序往往与底层基础设施紧密耦合,无法在不同环境之间移植(例如,在特定配置的 Linux 服务器上的软件安装)。这使得应用程序难以从一个环境迁移到另一个环境,例如从测试环境迁移到生产环境,或从发生故障的服务器迁移到健康的服务器。

通过使用容器来交付和运行应用程序,你可以以更可移植、更高效的方式管理应用程序。容器将应用程序及其所有依赖项打包为一个可移植且可执行的单元(容器镜像)。该应用程序几乎可以在任何安装了容器运行时或引擎的环境中交付和运行。

此外,从经济角度看,大多数服务器往往被超额配置。因此,公司为永久分配但未被充分利用的容量(例如计算能力、存储容量)支付固定价格。这也通常被称为闲置成本或未使用容量成本,对于并非始终满负荷运行工作负载的服务器而言尤其如此(例如在夜间或周末)。

特别是,如果你想同时在生产环境中运行数百甚至数千个容器,你必然需要一种高效管理它们的方式。

然而,在 IT 环境中跨多台主机高效管理工作负载可能既困难又复杂。

这正是 Kubernetes 的用武之地。Kubernetes 可以通过自动将工作负载调度到合适的主机、按需扩展它们以及推出应用程序的新版本,来高效地管理和编排工作负载。

例如,基于当前的高需求,Kubernetes 可以自动水平扩展应用程序(即通过添加更多实例),并在这些实例之间对传入流量进行负载均衡。如果当前主机变得不可用或主机被超额配置,Kubernetes 还可以自动将应用程序从一台主机迁移到另一台主机。Kubernetes 用容器玩俄罗斯方块®,以确保应用程序始终在运行,并且以尽可能高效的方式运行。

由于这些原因,Kubernetes 也被称为容器编排器

Kubernetes 特性

Kubernetes 具有若干特性,使你能够以可扩展且可靠的方式管理容器化应用程序。其中最重要的特性如下:

服务发现和负载均衡

容器可以使用其 DNS 名称或其 IP 地址来暴露。采用负载均衡方式,Kubernetes 可以分发网络流量,以在容器流量过高时稳定部署。

存储编排

可以使用你选择的存储系统将存储自动集成到 Kubernetes,例如本地存储、公有云提供商或网络存储系统。

自动推出和回滚

Kubernetes 允许你使用滚动更新来更新容器。Kubernetes 会启动新容器,然后终止旧容器。此特性还确保部署期间零停机。如果在推出过程中出现任何问题,Kubernetes 会为你回滚更改。

不可变性与自愈

Kubernetes 中的一切都是声明式定义的。你指定应用程序或基础设施的期望状态,Kubernetes 始终确保当前状态与期望状态匹配。当容器崩溃时,Kubernetes 会为你重启它。当整个节点宕机时,Kubernetes 会将容器迁移到健康的节点,并关闭未响应你的自定义健康检查的容器。

密钥和配置管理

你可以使用 Kubernetes 存储和管理机密信息,例如密码、令牌和 SSH 密钥。你可以随应用程序配置一起部署和更新 Secret,而无需重新构建容器镜像或在应用程序中泄露敏感信息。

注意

请注意,你不应将密钥存储在版本控制系统或源代码中。除了 Kubernetes Secret,你也可以使用 SAP BTP 目标(Destination)或凭据存储。

可扩展性与生态系统

Kubernetes API 自带一组标准的实现和对象。Kubernetes 通常定义 API,但不定义具体实现。这使你能够使用并在同一 API 的不同实现之间切换。例如,你可以为持久卷使用不同的存储系统。你还可以使用不同的容器运行时,例如 Docker、rkt 和 Rocket。随着时间的推移,Kubernetes 生态系统已发展到这样的规模:你几乎可以为任何问题找到解决方案。例如,有用于日志记录、监控、服务网格、入口等的解决方案。我们将在本课程后面介绍其中一些。

要获取所有 Kubernetes 特性的完整列表,请查看 Kubernetes 文档

小结

在本课中,你了解了什么是 Kubernetes、它解决了哪些挑战以及如何解决这些挑战。此外,你现在还可以描述 Kubernetes 的一些主要特性。

有关 Kubernetes 基本概念的延伸阅读

如需进一步阅读,请参阅以下网站:

  • Kubernetes

  • Cloud Native Computing Foundation (CNCF)

  • CNCF Members