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 才能取得成功。