滚动更新如何在kubernetes

时间:2018-03-15 10:00:33

标签: kubernetes

滚动更新如何在kubernetes内部工作。它是一个接一个的豆荚。如果其中一个pod在更新期间进入错误状态,则更新会被卡住或需要时间

2 个答案:

答案 0 :(得分:0)

来自design document

  

出于本示例的目的,假设我们从foo滚动到foo-next,其中唯一的更改是从v1v2的图像更新

     

如果用户未指定foo-nex t名称,则可以从foo上的update-partner注释中找到它。如果该注释不存在,则使用模式<controller-name>-<hash-of-next-controller-JSON>

合成foo-next      

<强>初始化

     
      
  • 如果foofoo-next不存在:

         
        
    • 退出并向用户指示指定的控制器不存在。
    •   
  •   
  • 如果foo存在,但foo-next不存在:

         
        
    • 使用foo-next图片创建v2,将desired-replicas设置为foo.Spec.Replicas
    •   
  •   
  • 如果foo-next存在,但foo不存在:

         
        
    • 假设我们处于重命名阶段。

    •   
    • 转到重命名

    •   
  •   
  • 如果foofoo-next都存在:

         
        
    • 假设我们处于部分推出

    •   
    • 如果foo-next缺少desired-replicas注释

           
          
      • 使用当前大小desired-replicas
      • foo-next注释填充到foo   
    •   
  •   
  • 转到推出

  •   
     

<强>转出

     
      
  • foo-next&lt; desired-replicas的大小foo-next

    上的foo-next注释      
        
    • 增加foo
    • 的大小   
    • 如果foo的尺寸> 0减小foo
    • 的大小   
  •   
  • 转到重命名
  •   
     

<强>重命名

     
      
  • 删除foo

  •   
  • 创建与foo-next

  • 相同的foo-next   
  • 删除foo-next

  •   
     

<强>中止

     
      
  • 如果foo不存在

         
        
    • 退出并向用户表明他们可能只想使用旧版本
    • 进行新的部署   
  •   
  • 如果foo-next不存在

         
        
    • 退出并指示未找到用户
    •   
  •   
  • 否则,foodesired-replica都存在

         
        
    • foo上设置foo-next个注释,以匹配foo上的注释

    •   
    • 使用foo-nextpublic/images个交易位置进行转出。

    •   
  •   

答案 1 :(得分:0)

部署规范中有两个字段(maxSurgemaxUnavailable),可用于控制滚动更新的执行方式。 kubectl explain deployment.spec.strategy.rollingUpdate会为您提供有关这些字段的完整详细信息,但简而言之,它们会确定您在滚动更新期间可以分配多少个可以覆盖副本计数的pod以及可以分别使用多少pod。

要使maxUnavailable字段正常工作,在pod模板上正确配置就绪探针非常重要。

可以找到更多信息here