《Deployment 控制器》系列,共包含以下几篇文章:
- Deployment 控制器
- Deployment 的创建和使用(实战)
- Deployment 的状态
- Deployment 的清理策略及编写规则
- 应用的部署(一):金丝雀部署
- 应用的部署(二):蓝绿部署 & 滚动部署
😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!
Deployment 控制器
Kubernetes 通过创建 控制器 来管理 Pod 的生命周期。为了满足不同需求的场景,Kubernete 提供了不同的控制器,如 Deployment、DaemonSet、Job、CronJob、StatefuleSet 等。
Pod 在 Kubernetes 中是存在生命周期的,因此需要有一种方式去操作和管理其状态和生命期。这就需要用到 Kubernetes 提供的控制器了。
试想一下以下两种场景:
- 在双十一期间,用户访问量暴增,服务器正承受着巨大的压力。
- node 节点突然宕机了,运行在其上的 Pod 不能正常提供服务了。
如何解决这两种问题?
开发人员当然可以手动增加 node
节点,以启动更多的 Pod 来应对暴增的访问量;或者通过动重启 node
节点来达到重新启动 Pod 的目的。但是,对于一个大型且复杂的系统来说,采用人工的方式去解决这样的问题太不现实了。
利用 Kubernetes 的控制器,可以非常方便地解决问题
- 当 Pod 数量不够时,控制器会自动增加 Pod 的副本,以应对客户端的请求。
- 当 Pod 出现故障时,控制器会自动在其他合适的
node
节点启动新的 Pod。
下表列举了 Kubernetes 提供的几种控制器,其中最常用的是 Deployment。
控制器 |
|
---|---|
Deployment | 定义无状态管理的 Pod。该控制器可以定义 Pod 的数量、更新方式、使用的镜像,资源限制等。 |
DaemonSet | 将 Pod 定义为节点的守护进程。该控制器适合运行那些在后台运行的应用。 |
Job | 将 Pod 定义为一次性任务。该控制器可以保证批处理任务的 Pod 能成功运行。 |
CronJob | 将 Pod 定义为周期性任务计划。该控制器可以保证批处理任务的 Pod 能成功运行。 |
StatefuleSet | 定义有状态管理的 Pod。该控制器可以保证 Pod 具有固定的网络标记、持久化存储、顺序部署和扩展、顺序滚动更新等。 |
Deployment 控制器将 Pod 部署成无状态的应用,它只关心 Pod 的 数量、更新方式、使用的镜像 和 资源限制 等。由于是无状态的管理方式,因此在 Deployment 控制器中没有 角色 和 顺序 的概念,即在 Deployment 控制器中 没有状态。
通过使用 Deployment 控制器,开发人员可以 部署 Pod、设置 Pod 的副本、实现 Pod 的升级与回滚。在 YAML 文件中描述清楚了 Deployment 控制器的目标是什么,Deployment 控制器会自动完成对 Pod 和 ReplicaSet 的管理。Kubernetes 可以直接运行一个新的 Deployment 控制器,也可以用一个新的 Deployment 控制器替换旧的 Deployment 控制器。
🚀 ReplicaSet 是下一代 副本控制器,可以独立使用。但在 Kubermetes 中,它主要被 Deployment 用来进行 Pod 的创建、更新和删除。在使用 Deployment 控制器时,它会自动创建 ReplicaSets,并对其进行管理。
Deployment 控制器、ReplicaSet 和 Pod 之间的关系如下图所示。
下面介绍创建和更新 Deployment 的过程。
- 创建 Deployment 的过程。在用户创建 Deployment 时,Kubernetes 会创建一个 ReplicaSet。ReplicaSet 在后台根据指定的副本数创建 Pod,并检查 Pod 的状态,以确定 Pod 是启动成功还是失败。
- 更新 Deployment 的过程。当用户更新 Deployment 时,Kubernetes 会创建一个新的 ReplicaSet。Deployment 会将 Pod 从旧的 ReplicaSet 中迁移到新的 ReplicaSet 中。
- 如果迁移失败或 Pod 不稳定,则 Deployment 会自动回滚到上一个版本。
- 如果迁移成功,则 Deployment 将清除旧的、不必要的 ReplicaSet。