# 3.4.1 Deployment概述

`Deployment`是继`ReplicationController`和`ReplicaSet`之后推出的更高级的控制器，它通过`Deployment`对象来声明`Pod`的期望状态，这些状态包括`Pod`的副本数和`Pod`的模版等，运行于`kube-controller-manager`组件中的`Deployment Controller`（Deployment控制器）时刻监控`Deployment`对象的变化，并根据`Deployment`对象中的配置来调整`Pod`，最终保证`Pod`以期望的形态在运行。

## 配置格式

我们先看一个简单的`Deployment`配置：

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.19.0
```

* `metadata.name`：指定Deployment的名称；
* `spec.replicas`：指定期望的副本数；
* `spec.selector`：指定查找Pod的标签；
* `spec.template`：指定Pod的模板，当`Deployment`控制器需要创建Pod时会根据此模版创建Pod。

上面这份`Deployment`配置和之前介绍的`ReplicaSet`非常类似，主要也是声明Pod的副本数以及Pod的模版，将该配置提交给`kube-apiserver`后，运行于`kube-controller-manager`组件中的`Deployment Controller`也会创建3个Pod副本，这个行为跟`ReplicaSet`还是一样，但`Deployment`更强大的功能体现在配置发生变化时的行为，比如修改配置中Pod模板中的镜像版本，`Deployment Controller`会自动地创建新的Pod来运行新镜像并逐步删除旧的Pod，从而达到自动升级的目的。

本节我们先从简单的配置看起，对`Deployment`更高级的功能会在后面的章节中陆续展开。
