# Deployment资源部署流程案例

本节将以 Deployment 资源的部署为例，简要阐述 Deployment 对象的部署流程。

在实验过程中，可以使用 `kubectl get events --watch` 查看部署过程中的事件流，从而可以清楚部署的整体流程。

![Deployment部署流程](https://2906552408-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M6Ub8CloS5kJszh6xSR%2Fsync%2F25c824af64c23803fd41ebe93d0dd7bcb7d51f0c.png?generation=1588594612767198\&alt=media)

上图展示了 Deployment 资源的详细部署流程，下面将对其中的几个关键步骤进行解释。

## Deployment 控制器生成 ReplicaSet

当 API 服务器在其本地生成了一个 Deployment 资源后，所有监听的 Deployment 控制器会收到通知，然后会按照其定义的 ReplicaSet 的定义清单调用 API 服务器接口创建一个新的 ReplicaSet 资源。

## ReplicaSet 控制器创建 Pod

当 API 服务器创建完 ReplicaSet 资源后，所有监听的 ReplicaSet 控制器会收到通知，然后检查其定义，主要考虑 replica 数量 (`replicaset.spec.replicas`) 、Pod 标签选择器 (`replicaset.spec.selector`)，检查其所能匹配到的 Pod 数量，创建或删除 Pod 以使 Pod 的数量与定义中的 replica 数量一致。

## Scheduler 为 Pod 分配调度的 Node

Scheduler 会监控 `pod.spec.nodeName` 未定义的 Pod，为它们分配最佳 Node。

## kubelet 运行容器

kubelet 通过监听 Pod 的变更通知，发现有新的 Pod 分配至该 Node 后，会根据 Pod 的定义调用 Docker 创建容器并运行。
