介绍
Deployment 为 Pod 和 Replica Set 提供声明式更新。
Deployment 是建立在 rs 之上的一个控制器,可以管理多个 rs,每次更新镜像版本,都会生成一个新的 rs,把旧的 rs 替换掉,多个 rs 同时存在,但是只有一个 rs 运行。
之前在 rs 的介绍时说过,rs 只有在修改了 pod 数时,才会触发更新,如果更改的是 template 或者 标签,不会主动触发更新。
而使用 deployment ,更改了模版,例如 镜像版本号,deployment 会根据新的模版产生一个新的 rs,每当新的 rs 中生成一个 pod,旧的 rs 中的 pod 就会删除一个。
deployment 还提供了版本回滚等操作。
示例
apiVersion: apps/v1 <-- 版本号
kind: Deployment <-- pod 类型
metadata:
name: nginx-deployment <-- pod 名称
spec:
selector: <-- rs 的标签选择器,选择要管理 pod 的标签
matchLabels:
app: nginx
replicas: 3 <-- 副本数量
template: <-- pod 模版
metadata:
labels: <-- rs 所管理的普通 pod 的标签
app: nginx
spec:
containers: <-- 容器信息
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
上方示例中,Deployment 定义的编排动作非常简单,即:确保携带了 app=nginx 标签的 Pod 的个数,永远等于 spec.replicas 指定的个数,即 3 个。
如果在这个集群中,携带 app=nginx 标签的 Pod 的个数大于 3 的时候,就会有旧的 Pod 被删除;反之,就会有新的 Pod 被创建。
Replica Set 弄懂之后,deployment 就很容易懂,它只是在 rs 上做了一层封装。在实际场景中,我们通常都是用 deployment,而不是 rs。