kubernetes - K8s - 在旧 Pod 终止之前安排新 Pod
问题描述
我已经阅读了 Kubernetes 文档,但我无法就我的问题得到明确的答案。我正在使用官方的集群自动缩放器。
- 我有一个指定应该运行一个副本的部署。当一个 pod 终止时(例如,在一个正在缩减的节点上运行),新的 pod 是在终止开始之前还是在终止完成之后安排的?文档说计划在终止时发生,但没有提到在哪个阶段。
- 为了在不中断任何服务的情况下实现无缝节点缩减,我希望 k8 将 pod 扩展到 N+1 个副本(此时 pod 仅被调度到未缩减的节点),然后耗尽节点。根据我的测试,它首先排空,然后根据配置安排任何丢失的 pod。是否可以配置此行为,或者目前无法做到这一点?
据我了解,使用 RollingUpdate 策略可以轻松实现无缝更新。我还没有发现相同的“滚动”策略可以用于按比例缩小。
编辑
TL;DR 我正在寻找关于 a) 两个以上副本部署和 b) 一个副本部署的 HA
a) 可以通过使用 PDB 来实现。查看弗里茨的答案。如果您需要在不同节点上安排 pod,请利用反关联(Marc 的回答)
b) 如果您可以接受短暂的中断,那么 PDB 是官方的选择。如果您需要解决方法,我的回答可能会有所启发。
解决方案
可以使用所谓的中断预算来配置缩减行为
在您的部署清单中,您可以在自愿中断(如耗尽节点)期间定义maxUnavailable
和数量的 Pod。minAvailable
有关如何执行此操作,请查看K8s 文档。
推荐阅读
- angular - 当输入中的文本更改时,在 angualr 中设置自定义验证
- tensorflow - 在 tensorflow 2.0 中编写我们自己的自定义训练循环时如何执行提前停止?
- reactjs - 从父级提交后重新启动 Formik 表单
- r - 正则表达式在 R 中捕获包含标点符号的子字符串
- windows - 在 Set-PSBreakpoint 的操作块中记录当前正在执行的命令
- c++ - 二叉树数据结构的扁平数组表示
- python - oracle in out pl sql package in python过程调用错误
- f# - FSharp.Data XML 类型提供程序是否生成?
- python - 创建一个回溯程序,返回所有 P 位数字,使得每 3 个连续数字总和为 S
- outlook-web-addins - 我可以跟踪用户未安装 Outlook 加载项的原因吗?