Scheduling & Orchestration

Scheduling & Orchestration #

编排和调度是指在集群中运行和管理容器。集群是通过网络连接的一组物理或虚拟机器(参见云原生网络)。

容器编排工具(和调度器)类似于您笔记本电脑上的操作系统(OS)。操作系统管理所有应用程序,例如 Microsoft 365、Slack 和 Zoom;执行这些应用程序,并调度每个应用程序何时使用笔记本电脑的硬件资源,如 CPU、内存和存储。

虽然在单台机器上运行所有内容很方便,但如今大多数应用程序的规模远远超出单台计算机的处理能力。例如 Gmail 或 Netflix。这些庞大的应用程序分布在多台机器上,形成分布式应用程序。这种分布式架构使应用程序可以跨多个节点运行,从而提高容错性和扩展性。因此,这类现代应用程序需要一种能够管理所有运行在不同机器上的组件的软件,也就是所谓的“集群操作系统”。这正是编排工具解决的问题。

容器的能力在这里至关重要。它们可以让应用程序在不同环境中运行,而容器编排工具(通常是 Kubernetes)则提供了管理这些容器的能力。容器和 Kubernetes 都是云原生架构的核心,因此它们成为热门话题也就不足为奇了。

解决的问题 #

正如“云原生网络”部分所提到的,在云原生架构中,应用程序被拆分为小型组件或服务,每个服务都运行在一个独立的容器中。您可能听说过这些被称为微服务。传统的大型应用程序通常被称为“单体应用”。相比之下,现在的架构可能由几十个甚至上百个微服务组成。

这些服务中的每一个都需要资源、监控,并在出现问题时快速解决。对于单个服务,手动完成这些任务或许是可行的,但当面对多个服务时,且每个服务都有自己的容器,这时就需要借助自动化流程进行管理。

提供的帮助 #

容器编排工具可以自动化容器的管理。那么这在实际中意味着什么呢?我们以 Kubernetes 为例来回答这个问题,因为它是事实上的容器编排工具。

Kubernetes 执行一种称为期望状态对齐的操作:它将集群中容器的当前状态与期望状态进行匹配。期望状态由工程师指定,例如,服务 A 的十个实例运行在三台节点(即机器)上,并可访问数据库 B。Kubernetes 会持续监测实际状态并与期望状态对比。如果两者不一致,Kubernetes 会通过创建或销毁对象来使状态对齐。例如,如果某个容器崩溃,Kubernetes 会自动重新部署一个新的容器。

简而言之,通过 Kubernetes,您可以像操作一台计算机一样管理整个集群。您只需定义环境的期望状态,具体的实现细节由 Kubernetes 自动处理。

技术基础 #

Kubernetes 与其他使用较少的编排工具(如 Docker Swarm 和 Mesos)共同归类于编排和调度领域。它使用户能够以声明式的方式将多个独立的计算机资源管理为一个统一的资源池。在 Kubernetes 中,声明式配置管理通过控制循环(control loops)实现。控制循环是一种运行模式,Kubernetes 中的进程会监控 Kubernetes 存储中的特定对象类型,并确保集群中的实际状态与期望状态一致。

例如,用户可以创建一个 Kubernetes 部署,声明需要 3 个副本的 Web 应用程序。部署控制器会确保这 3 个 Web 应用程序容器被成功创建,并持续监控集群以验证容器数量是否正确。如果某个容器因任何原因被移除,部署控制器会自动触发创建一个新的实例。相反,如果用户将部署修改为仅保留 1 个 Web 应用实例,它会指示 Kubernetes 删除另外 2 个正在运行的 Web 应用实例。

这一核心的控制器模式还可以被用户或开发者用来扩展 Kubernetes。通过 Operator 模式,开发者可以为自定义资源编写专属的控制器,将任意逻辑和自动化流程嵌入到Kubernetes中,从而满足更复杂的需求。

虽然 CNCF(云原生计算基金会)托管了其他编排工具(例如,Crossplane 和 Volcano,目前处于孵化阶段),但 Kubernetes 是使用最广泛且维护最活跃的编排工具。

Keywords #

  • Cluster 集群
  • Scheduler 调度器
  • Orchestration 编排

Projects #

© 2024 青蛙小白 | 总访问量 | 总访客数