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

什么是 Kubernetes?

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

Kubernetes 最初由 Google 工程师开发,后来于 2014 年开源。 它的前身是 Borg, 这是 Google 内部使用的一种容器编排平台。

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

什么是容器?

让我们先从定义开始: 容器是软件的可执行单元,其中应用代码与库和依赖关系以通用方式打包在一起,因此它可以在桌面、传统 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 服务)对它的支持和可移植性。

Kubernetes 有哪些用途?

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

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

Kubernetes 与 Docker

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

事实上,如果您已经积极踊跃地采用 Docker,并且正在创建基于 Docker 的大规模容器部署,那么 Kubernetes 编排就是为了管理这些工作负载而在逻辑上采取的后续操作。 \

Kubernetes 架构

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

集群和节点(计算)

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

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

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

Pod 和部署(软件)

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

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

Kubernetes与华炎云

华炎云服务架构于 Kubernetes 环境,华炎云管理控制台提供可视化界面,租户只需点击鼠标就能为自主申请、创建云服务。并实现对云服务的管理、监控、数据备份等操作。

华炎魔方平台基于云原生技术开发,可以实现与Kubernetes的持续部署与集成。基于华炎魔方低代码平台开发的软件包均可以部署为云原生应用,包括自定义应用、自定义对象、自定义业务流程、自定义统计报表、自定义函数和代码,可以轻松部署到Kubernetes环境中。