无状态应用(Deployment)
确保任何时间都有指定数量的 Pod 副本在运行,并为 Pod 提供声明式的更新升级能力。
工作原理
每一个 Deployment 都会和它的依赖组成以下的拓扑结构,在这个拓扑结构中的子节点都是『稳定』的,任意节点的删除都会被 Kubernetes 的控制器重启
所有的 Deployment 对象都是由 Kubernetes 集群中的 DeploymentController 进行管理,DeploymentController 会在启动时通过 Informer 监听三种不同资源的通知,Pod、ReplicaSet 和 Deployment,这三种资源的变动都会触发 DeploymentController 中的回调。
不同的事件最终都会在被过滤后进入控制器持有的队列,等待工作进程的消费,下面的这些事件都会触发
- Deployment 的同步;
- Deployment 的变动;
- Deployment 相关的 ReplicaSet 变动;
- Deployment 相关的 Pod 数量为 0 时,Pod 的删除事件;
- DeploymentController 会在调用 Run 方法时启动多个工作进程,这些工作进程会运行 worker 方法从队列中读取最新的 Deployment 对象进行同步。
实现流程
- Deployment 控制器从 Etcd 中获取到所有携带了“app: nginx”标签的 Pod,然后统计它们的数量,这就是实际状态;
- Deployment 对象的 Replicas 字段的值就是期望状态;
- Deployment 控制器将两个状态做比较,然后根据比较结果,确定是创建 Pod,还是删除已有的 Pod。
作者:admin 创建时间:2023-12-12 14:32
最后编辑:admin 更新时间:2025-05-28 18:59
最后编辑:admin 更新时间:2025-05-28 18:59