滚动更新如何在kubernetes内部工作。它是一个接一个的豆荚。如果其中一个pod在更新期间进入错误状态,则更新会被卡住或需要时间
答案 0 :(得分:0)
出于本示例的目的,假设我们从
foo
滚动到foo-next
,其中唯一的更改是从v1
到v2
的图像更新如果用户未指定
合成foo-nextfoo-nex
t名称,则可以从foo上的update-partner注释中找到它。如果该注释不存在,则使用模式<controller-name>-<hash-of-next-controller-JSON>
<强>初始化强>
如果
foo
和foo-next
不存在:
- 退出并向用户指示指定的控制器不存在。
如果
foo
存在,但foo-next
不存在:
- 使用
foo-next
图片创建v2
,将desired-replicas
设置为foo.Spec.Replicas
如果
foo-next
存在,但foo
不存在:
假设我们处于重命名阶段。
转到重命名
如果
foo
和foo-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
不存在
- 退出并指示未找到用户
否则,
foo
和desired-replica
都存在
在
foo
上设置foo-next
个注释,以匹配foo
上的注释使用
foo-next
和public/images
个交易位置进行转出。
答案 1 :(得分:0)
部署规范中有两个字段(maxSurge
和maxUnavailable
),可用于控制滚动更新的执行方式。 kubectl explain deployment.spec.strategy.rollingUpdate
会为您提供有关这些字段的完整详细信息,但简而言之,它们会确定您在滚动更新期间可以分配多少个可以覆盖副本计数的pod以及可以分别使用多少pod。
要使maxUnavailable
字段正常工作,在pod模板上正确配置就绪探针非常重要。
可以找到更多信息here。