无状态应用(Deployment)

确保任何时间都有指定数量的 Pod 副本在运行,并为 Pod 提供声明式的更新升级能力。

工作原理

每一个 Deployment 都会和它的依赖组成以下的拓扑结构,在这个拓扑结构中的子节点都是『稳定』的,任意节点的删除都会被 Kubernetes 的控制器重启

所有的 Deployment 对象都是由 Kubernetes 集群中的 DeploymentController 进行管理,DeploymentController 会在启动时通过 Informer 监听三种不同资源的通知,Pod、ReplicaSet 和 Deployment,这三种资源的变动都会触发 DeploymentController 中的回调。

不同的事件最终都会在被过滤后进入控制器持有的队列,等待工作进程的消费,下面的这些事件都会触发

  1. Deployment 的同步;
  2. Deployment 的变动;
  3. Deployment 相关的 ReplicaSet 变动;
  4. Deployment 相关的 Pod 数量为 0 时,Pod 的删除事件;
  5. DeploymentController 会在调用 Run 方法时启动多个工作进程,这些工作进程会运行 worker 方法从队列中读取最新的 Deployment 对象进行同步。

实现流程

  1. Deployment 控制器从 Etcd 中获取到所有携带了“app: nginx”标签的 Pod,然后统计它们的数量,这就是实际状态;
  2. Deployment 对象的 Replicas 字段的值就是期望状态;
  3. Deployment 控制器将两个状态做比较,然后根据比较结果,确定是创建 Pod,还是删除已有的 Pod。
作者:admin  创建时间:2023-12-12 14:32
最后编辑:admin  更新时间:2025-05-28 18:59