K8S in Action-2
Deployment 部署升级
Deployment Manifest 示例:

创建Deployment
$ kubect1 create -f kubia-deployment-v1.yaml --record
确保在创建时使用了 --record 选项。 这个选项会记录历史版本号
直接使用 kubectl get deployment 和 kubectl describe deployment 命令来查看 Deployment 的详细信息
查看部署状态
kubectl rollout status deployment kubia
更新 Deployment
只需修改 Deployment 资源中定义的 pod 模板, Kubemetes 会自动将实际的系统状态收敛为资源中定义的状态
不同的 Deployment 升级策略
如何达到新的系统状态的过程是由 Deployment 的升级策略决定的:
1,默认策略是执行滚动更新(策略名为 RollingUpdate)
2,另 一种策略为 Recreate, 它会一次性删除所有旧版本的 pod, 然后创建新的 pod, 整个行为类似于修改Replication Controller 的 pod 模板, 然后删除所有的 pod
RollingUpdate 策略会渐进地删除旧的 pod, 与此同时创建新的 pod, 使应用程序在整个升级过程中都处千可用状态, 并确保其处理请求的能力没有因为升级而有所影响,这就是Deployment默认使用的升级策略
触发滚动升级
$ kubectl set image deployment kubia nodejs=luksa/kubia:v2

Deployment 的优点
回滚 Deployment
创建新的镜像版本,并更新
$ kubetl set image deployment kubia nodejs=luksa/kubia:v3
$ kubectl rollout status deployment kubia 查看升级过程
k8s 取消最后一次部署的Deployment
$ kubectl rollout undo deployment kubia 回滚至上一个版本
undo 命令也可以在滚动升级过程中运行,并直接停 滚动升级 在升级过程中已创建的 pod 会被删除并被老版本的 pod 替代
显示 Deployment 的滚动升级历史
$ kubectl rollout history deployment kubia
注意:需要在创建Deployment 是指定 --record 参数 不指定参数 版本历史中的CHANG-CAUSE 一栏为空
回滚到一个特定的 Deployment 版本
$ kubectl rollout undo deployment kubia - -to-revision=l
控制滚动升级速率
滚动升级策略的 maxSurge 和 maxUnavailable 属性 决定一次替换多少个 pod


暂停滚动升级

恢复滚动升级

取消出错版本的滚动升级
$ kubectl rollout undo deployment kubia
第7章 StatefulSet 部署有状态的多副本应用
创建一 个Statefulset资源替代ReplicaSet 来运行这类pod。 它是专门定制的一类应用, 这类应用中每一 个实例都是不可替代的个体, 都拥有稳定的 名字和状态
提供稳定的网络标识:
一个Statefulset创建的每个pod都有一个从零开始的顺序索引, 这个会体现在pod的名称和主机名上, 同样还会体现在pod对应的固定存储上。 这些pod的名称则是可预知的, 因为它是由Statefulset 的名称加该实例的顺序索引值组成的
当 一个Statefulset管理的一个pod实例消失后(pod所在节点发生故障, 或有人手动删除pod), Statefulset会保证重启 一个新的pod实例替换它,新的pod会拥有与之前pod完全一致的名称和主机名
扩缩容

浙公网安备 33010602011771号