• deployment控制pod进行滚动更新以及回滚


    更新pod镜像两种方式:

    方式一:kubectl set image deployment/${deployment name} ${container name}=${image}  例: kubectl set image deployment/nginx-deployment nginx=nginx:1.13 --record
    方式二: kubectl edit 修改deployment配置, 将spec.template.spec,containers[0].image 从nginx:1.12 修改成nginx:1.13
    

    查看deployment更新过程:

    kubectl rollout status deployment/nginx-deployment   
    可以通过deployment状态来判断pod更新是否完成, kubectl rollout status deployment nginx-deployment --watch=false | grep -ic waiting1  如果更新成功, 返回值为0 
    

    deployment更新策略: Recreate(重建)杀掉所有的pod, 然后创建新的pod 和 RollingUpdate(滚动更新) 通过参数maxUnavailable与maxSurge来控制滚动更新过程
    滚动更新策略:

    deployment.spec.strategy.rollingUpdate.maxUnavailable:不可用状态的pod数量,该值可以是绝对值, 也可以是pod期望的副本数的百分比
    deployment.spec.strategy.rollingUpdate.maxSurge: 超过pod期望副本数的最大值
    当maxSurge设置为30% 和 maxUnavailable设置为30%  :  生成一个新的ReplicaSet立即进行副本数扩容, 扩容的数量为不超过期望副本数的130%即可, 旧的ReplicaSet立即缩容到所需副本数的70%
    

    pod回滚: 建议deployment滚动更新的时候加上--record参数, 这样在change-cause看个每个版本使用的命令

    kubectl rollout history deployment/nginx-deployment 检查deployment升级的历史记录
    kubectl rollout history deployment/nginx-deployment --revision=2 查看单个revision 的详细信息
    kubectl rollout undo deployment/nginx-deployment 回退到上一个版本 
    kubectl rollout undo deployment/nginx-deployment --to-revision=2 根据--revision参数指定某个历史版本
    

    spec.revisonHistoryLimit项来指定 deployment 最多保留多少 revision 历史记录

    注意: deployment的pod模板被更改时才会创建新的修订版本,例如更新模板标签或者容器镜像可以触发滚动更新, 其它操作例如扩展副本数将不会触发deployment的更新操作

    暂停和恢复deployment: 对于一次复杂的deployment更新操作,为了避免频繁触发deployment的更新操作,可以先暂停deployment的更新操作, 然后进行配置修改,在恢复deployment,一次性触发完整的更新操作

    kubectl rollout pause deployment/nginx-deployment #暂停deployment , 不影响pod正常运行, 可以修改的deployment资源, 不会触发滚动更新 
    kubectl set image deploy/nginx nginx=nginx:1.9.1 
    kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi 
    kubectl rollout resume deployment/nginx-deployment #恢复deployment, 如果有变动, 马上进行滚动更新
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: default 
      labels:
        app: nginx
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 10
      strategy:
        rollingUpdate:
          maxSurge: 30%
          maxUnavailable: 30%      
      template:
        metadata:
          labels:
            app: nginx
    
        spec:
          initContainers: 
          - name: install
            image: busybox
            imagePullPolicy: IfNotPresent
            command:
            - wget
            - "-O"
            - "/work-dir/index.html"
            - http://kubernetes.io
            volumeMounts:
            - name: workdir
              mountPath: "/work-dir"
          containers:
          - name: nginx
            image: nginx:1.12
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 80
            volumeMounts:
            - name: workdir
              mountPath: "/usr/share/nginx/html"
          volumes:
          - name: workdir
            emptyDir: {} 
    
    ---
    apiVersion: v1 
    kind: Service
    metadata:
      name: nginx-service
      namespace: default 
      labels:
        app: nginx
    spec:
      type: NodePort
      selector: 
        app: nginx
      ports:
      - name: http
        port: 80 
        protocol: TCP 
        targetPort: 80 
    
  • 相关阅读:
    转(一万小时定律的文章): const 与 readonly区别...
    项目中报错邮件方法
    Windows Phone(一) 正式开发之前的准备资料(主要注册开发者账号,手机解锁,激活码,程序部署)
    转(ASP.NET页面缓存)
    部署XAP时,部署工具提示部署无效,求解决!
    jQuery 1
    DOMform
    jQuery 2 一些常用的函数
    jQuery 6 层次选择器
    jQuery 3 对象转换
  • 原文地址:https://www.cnblogs.com/lovelinux199075/p/11246139.html
Copyright © 2020-2023  润新知