Deployment
简介
Deployment 是新一代用于 Pod 管理的对象,与 RC 相比,它提供了更加完善的功能,使用起来更加简单方便。
Deployment 与 RC 的定义也基本相同,需要注意的是 apiVersion 和 kind 是有差异的。
Deployment 会声明 Replica Set 和 Pod
Deployment 更新
- rolling-update。只有当 Pod template 发生变更时,Deployment 才会触发 rolling-update。此时 Deployment 会自动完成更新,且会保证更新期间始终有一定数量的 Pod 为运行状态。
- 其他变更,如暂停 / 恢复更新、修改 replica 数量、修改变更记录数量限制等操作。这些操作不会修改 Pod 参数,只影响 Deployment 参数,因此不会触发 rolling-update。
通过 kubectl edit 指令更新 Deployment,可以将例子中的 nginx 镜像版本改成 1.9.1 来触发一次 rolling-update。期间通过 kubectl get 来查看 Deployment 的状态,可以发现 CURRENT、UP-TO-DATE 和 AVAILABLE 会发生变化。
删除 Deployment
kubectl delete 指令可以用来删除 Deployment。需要注意的是通过 API 删除 Deployment 时,对应的 RS 和 Pods 不会自动删除,需要依次调用删除 Deployment 的 API、删除 RS 的 API 和删除 Pods 的 API。
使用 RS 管理 Pod
Replica Set - RS
Replica Set(简称 RS )是 k8s 新一代的 Pod controller。与 RC 相比仅有 selector 存在差异,RS 支持了 set-based selector(可以使用 in、notin、key 存在、key 不存在四种方式来选择满足条件的 label 集合)。Deployment 是基于 RS 实现的,我们可以使用 kubectl get rs 命令来查看 Deployment 创建的 RS:
|
|
由 Deployment 创建的 RS 的命名规则为 “
弹性伸缩
与 RC 相同,只需要修改. spec.replicas 就可以实现 Pod 的弹性伸缩。
重新部署
如果设置 Deployment 的 .spec.strategy.type==Recreate 时,更新时会将所有已存在的 Pod 杀死后再创建新 Pod。与 RC 不同的是,修改 Deployment 的 Pod template 后更新操作将会自动执行,无需手动删除旧 Pod。
更完善的 rolling-update
与 RC 相比,Deployment 提供了更完善的 rolling-update 功能:
- Deployment 不需要使用 kubectl rolling-update 指令来触发 rolling-update,只需修改 pod template 内容即可。这条规则同样适用于使用 API 来修改 Deployment 的场景。这就意味着使用 API 集成的应用,无须自己实现一套基于 RC 的 rolling-udpate 功能,Pod 更新全都交给 Deployment 即可。
- Deployment 会对更新的可用性进行检查。当使用新 template 创建的 Pod 无法运行时,Deployment 会终止更新操作,并保留一定数量的旧版本 Pod 来提供服务。例如我们更新 nginx 镜像版本为 1.91(一个不存在的版本),可以看到以下结果:
- 此外 Deployment 还支持在 rolling-update 过程中暂停和恢复更新过程。通过设置. spec.paused 值即可暂停和恢复更新过程。暂停更新后的 Deployment 可能会处于与以下示例类似的状态:
- 支持多重更新,在更新过程中可以执行新的更新操作。Deployment 会保证更新结果为最后一次更新操作的执行结果。
- 影响更新的一些参数:
- spec.minReadySeconds 参数用来设置确认运行状态的最短等待时间。更新 Pod 之后,Deployment 至少会等待配置的时间再确认 Pod 是否处于运行状态。也就是说在更新一批 Pod 之后,Deployment 会至少等待指定时间再更新下一批 Pod。
- spec.strategy.rollingUpdate.maxUnavailable 用来控制不可用 Pod 数量的最大值,从而在删除旧 Pod 时保证一定数量的可用 Pod。如果配置为 1,且 replicas 为 3。则更新过程中会保证至少有 2 个可用 Pod。默认为 1。
- spec.strategy.rollingUpdate.maxSurge 用来控制超过期望数量的 Pod 数量最大值,从而在创建新 Pod 时限制总量。如配置为 1,且 replicas 为 3。则更新过着中会保证 Pod 总数量最多有 4 个。默认为 1。
- 后两个参数不能同时为 0。
Deployment 模版:
|
|