zoukankan      html  css  js  c++  java
  • 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 
    
  • 相关阅读:
    Atitit attilax要工作研究的要素 纪要 方案 趋势 方向 概念 理论
    Atitit 常见每日流程日程日常工作.docx v7 r8f
    Atitit it 互联网 软件牛人的博客列表
    Atitit 信息链(Information Chain)的概念理解 attilax总结
    Atitit 知识点的体系化 框架与方法 如何了解 看待xxx
    Atitit 聚合搜索多个微博 attilax总结
    Atitit 企业知识管理PKM与PIM
    Atitit 项目沟通管理 Atitit 沟通之道 attilax著.docx
    Atitit 项目管理软件 在线服务 attilax总结 1. 项目管理协作的历史 1 1.1. Worktile 406k 1 1.2. Teambition  584k in baidu
    Atitit.每周末总结 于每周一计划日程表 流程表 v8 import 上周遗漏日志补充 检查话费 检查流量情况 Crm问候 Crm表total and 问候
  • 原文地址:https://www.cnblogs.com/lovelinux199075/p/11246139.html
Copyright © 2011-2022 走看看