Deplpyment
https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/
#通过 Deployment 对象,你可以轻松的做到以下事情:
1、创建 ReplicaSet 和 Pod
2、滚动升级(不停止旧服务的状态下升级)和回滚应用(将应用回滚到之前的版本)
3、平滑地扩容和缩容
4、暂停和继续 Deployment
#deployment 是一个三级结构,deployment 管理 replicaset,replicaset 管理 pod
apiVersion: apps/v1 kind: Deployment metadata: name: myapp-v1 spec: replicas: 2 selector: matchLabels: app: myapp version: v1 template: metadata: labels: app: myapp version: v1 spec: containers: - name: myapp image: janakiramm/myapp:v1 imagePullPolicy: IfNotPresent ports: - containerPort: 80
滚动更新
pending 表示正在进行调度,ContainerCreating 表示正在创建一个 pod,running 表示运行 一个 pod,running 起来一个 pod 之后再 Terminating(停掉)一个 pod,以此类推,直到所 有 pod 完成滚动升级
[root@xksmaster1 ~]# kubectl get pods -l app=myapp -w NAME READY STATUS RESTARTS AGE demo-pod 2/2 Running 23 21h myapp-v1-67fd9fc9c8-8q86z 1/1 Running 0 42s myapp-v1-67fd9fc9c8-cq547 1/1 Running 0 45s
myapp-v1-75fb478d6c-nlkp5 0/1 Pending 0 0s myapp-v1-75fb478d6c-nlkp5 0/1 Pending 0 0s myapp-v1-75fb478d6c-nlkp5 0/1 ContainerCreating 0 0s myapp-v1-75fb478d6c-nlkp5 0/1 ContainerCreating 0 1s myapp-v1-75fb478d6c-nlkp5 1/1 Running 0 1s myapp-v1-67fd9fc9c8-8q86z 1/1 Terminating 0 104s myapp-v1-75fb478d6c-b2j86 0/1 Pending 0 0s myapp-v1-75fb478d6c-b2j86 0/1 Pending 0 0s myapp-v1-75fb478d6c-b2j86 0/1 ContainerCreating 0 0s myapp-v1-67fd9fc9c8-8q86z 1/1 Terminating 0 104s myapp-v1-67fd9fc9c8-8q86z 0/1 Terminating 0 104s myapp-v1-75fb478d6c-b2j86 0/1 ContainerCreating 0 1s myapp-v1-75fb478d6c-b2j86 1/1 Running 0 2s myapp-v1-67fd9fc9c8-cq547 1/1 Terminating 0 109s myapp-v1-67fd9fc9c8-cq547 1/1 Terminating 0 109s myapp-v1-67fd9fc9c8-cq547 0/1 Terminating 0 110s myapp-v1-67fd9fc9c8-cq547 0/1 Terminating 0 115s myapp-v1-67fd9fc9c8-cq547 0/1 Terminating 0 115s myapp-v1-67fd9fc9c8-8q86z 0/1 Terminating 0 112s myapp-v1-67fd9fc9c8-8q86z 0/1 Terminating 0 112s
#回滚
[root@xksmaster1 ~]# kubectl rollout history deployment myapp-v1 deployment.apps/myapp-v1 REVISION CHANGE-CAUSE 3 <none> 4 <none> [root@xksmaster1 ~]# kubectl rollout undo deployment myapp-v1 --to-revision=3 deployment.apps/myapp-v1 rolled back [root@xksmaster1 ~]# kubectl rollout history deployment myapp-v1 deployment.apps/myapp-v1 REVISION CHANGE-CAUSE 4 <none> 5 <none> [root@xksmaster1 ~]#
maxSurge 和 maxUnavailable 用来控制滚动更新的更新策略
取值范围 数值
1. maxUnavailable: [0, 副本数]
2. maxSurge: [0, 副本数] 注意:两者不能同时为 0。
比例
1. maxUnavailable: [0%, 100%] 向下取整,比如 10 个副本,5%的话==0.5 个,但计算按照 0 个;
2. maxSurge: [0%, 100%] 向上取整,比如 10 个副本,5%的话==0.5 个,但计算按照 1 个;
注意:两者不能同时为 0。
建议配置 1. maxUnavailable == 0
2. maxSurge == 1
生产环境提供给用户的默认配置。即“一上一下,先上后下”最平滑原则:
1 个新版本 pod ready(结合 readiness)后,才销毁旧版本 pod。此配置适用场景是平滑更新、保 证服务平稳,但也有缺点,就是“太慢”了。
总结:
maxUnavailable:和期望的副本数比,不可用副本数最大比例(或最大值),这个值越小,越能保证 服务稳定,更新越平滑;
maxSurge:和期望的副本数比,超过期望副本数最大比例(或最大值),这个值调的越大,副本更新 速度越快。
自定义策略:
修改更新策略:maxUnavailable=1,maxSurge=1
[root@xianchaomaster1 ~]# kubectl patch deployment myapp-v1 -p
'{"spec":{"strategy":{"rollingUpdate": {"maxSurge":1,"maxUnavailable":1}}}}' -n blue-green
查看 myapp-v1 这个控制器的详细信息
[root@xianchaomaster1 ~]# kubectl describe deployment myapp-v1 -n blue-green
显示如下: RollingUpdateStrategy: 1 max unavailable, 1 max surge
上面可以看到 RollingUpdateStrategy: 1 max unavailable, 1 max surge
这个 rollingUpdate 更新策略变成了刚才设定的,因为我们设定的 pod 副本数是 3,1 和 1 表示最少 不能少于 2 个 pod,最多不能超过 4 个 pod
这个就是通过控制 RollingUpdateStrategy 这个字段来设置滚动更新策略的

浙公网安备 33010602011771号