Kubernetes controller 基础知识

92 阅读4分钟

Kubernetes 控制器基础知识

如果你是Kubernetes 新手,您需要熟悉的第一个概念是控制器。大多数 Kubernetes 用户不会直接创建 Pod;相反,他们创建 Deployment、CronJob、StatefulSet 或其他控制器来管理 Pod。

控制器基础知识

首先,这是一些控制器基础知识。这Kubernetes 文档使用控制器就像恒温器的例子。表盘的位置是其所需状态,当前温度是其实际状态,恒温器不断施加或消除热量,以保持两者同步。这就是 Kubernetes 控制器的工作原理 - 它是一个循环,用于监视集群的状态并根据需要进行更改,始终致力于维持所需的状态。

控制器可以跟踪许多对象,包括:

  • 正在运行哪些工作负载以及在何处运行
  • 这些工作负载可用的资源
  • 有关工作负载行为方式的策略(重新启动、升级、容错)

当控制器注意到实际状态与期望状态之间存在差异时,它将向 Kubernetes API 服务器发送消息以进行任何必要的更改。

控制器类型

在我们的基本 Kubernetes 概念中,我们重点介绍了一些 Pod 控制器,包括以下内容。然后我们将深入研究四个最常用的控制器。

  • ReplicaSet - ReplicaSet 创建一组稳定的 Pod,所有 Pod 都运行相同的工作负载。您几乎永远不会直接创建它。
  • Deployment - Deployment是在 Kubernetes 上获取应用程序的最常见方法。它维护一个具有所需配置的 ReplicaSet,以及一些用于管理更新和回滚的附加配置。
  • StatefulSet - StatefulSet 用于管理具有持久存储的有状态应用程序。Pod 名称是持久的,并在重新调度时保留(app-0、app-1)。存储与替换 Pod 保持关联,并且在删除 Pod 时卷仍然存在。
  • Job - Job创建一个或多个短暂的 Pod,并期望它们成功终止。
  • CronJob - CronJob 按计划创建作业。
  • DaemonSet - DaemonSet 确保所有(或部分)节点运行 Pod 的副本。当节点添加到集群时,Pod 也会添加到其中。当节点从集群中删除时,这些 Pod 就会被垃圾收集。常见于系统进程,如 CNI、监控代理、代理等。

ReplicaSet

ReplicaSet 是一组多个相同的 pod,没有唯一的标识。ReplicaSet 旨在满足两个需求:

  • 容器是短暂的。当他们失败时,我们需要重新启动他们的 Pod。
  • 我们需要运行一定数量的 Pod。如果一个 Pod 终止或失败,我们需要激活新的 Pod。

ReplicaSet 可确保在任何给定时间运行指定数量的 Pod 副本。尽管您可能永远不会直接创建 ReplicaSet,但它是保持 Kubernetes 基础设施正常运行的重要组成部分。

Deployment

与 ReplicaSet 类似,Deployment 是一组多个相同的 pod,没有唯一的标识。然而,Deployment 比 ReplicaSet 更容易升级和修补。用户可以配置部署新版本的策略,从而可以在最短的停机时间内推出更改。

例如,我们可能选择 RollingUpdate 策略。然后,当我们更新 Deployment 时,将在现有 ReplicaSet 旁边创建第二个 ReplicaSet,并且随着新 ReplicaSet 中准备好更多 Pod,一些将从旧 ReplicaSet 中删除,直到旧 ReplicaSet 为空并且可以被删除。已删除。我们甚至可以设置参数,例如maxUnavailable 和 maxSurge控制此切换的机制。

StatefulSet

虽然 Deployment 管理无状态应用程序,但 StatefulSet 对于需要以下一项或多项的应用程序非常有价值:

  • 稳定、唯一的网络标识符
  • 稳定、持久的存储
  • 有序、优雅的部署和扩展
  • 有序、自动滚动更新

StatefulSet 为其管理的每个 Pod 保留唯一的身份。每当需要重新安排这些 Pod 时,它都会使用相同的身份。

在运行 Cassandra、MongoDB、MySQL、PostgreSQL 或任何其他利用持久存储的工作负载时,建议使用 StatefulSet。它们可以帮助在扩展和更新事件期间维护状态,并且对于维护高可用性特别有用。

Job

作业是短暂的工作负载,可用于执行单个任务。一项作业将简单地创建一个或多个 Pod,并等待这些 Pod 成功完成。工作有助于做以下事情:

  • 运行数据库迁移
  • 执行维护任务
  • 旋转原木

作业还可以并行运行多个 Pod,从而为您提供一些额外的吞吐量。

CronJobs

CronJobs 只是按照用户定义的计划运行作业。您可以使用以下方式提供时间表计划任务语法,每当计划需要一个作业时,CronJob 控制器就会自动创建一个作业。

CronJob 控制器还允许您指定可以同时运行的作业数量,以及保留多少成功或失败的作业以进行日志记录和调试。


概括

Kubernetes 控制器允许您在集群内运行和管理应用程序,并且是核心概念,您需要了解 Kubernetes 才能取得成功。

点击“关注” 获取更多Kubernetes精彩文章