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 这个字段来设置滚动更新策略的

posted @ 2023-03-09 14:36  しみずよしだ  阅读(21)  评论(0)    收藏  举报