Kubernetes 部署 - 控制同时终止 Pod 的最大数量

如何解决Kubernetes 部署 - 控制同时终止 Pod 的最大数量

使用 Kubernetes,我们可以控制在新部署推出的同时创建多少个 Pod(应用实例)。可以通过使用属性 max surgemax unavailable 来实现。如果我们有数十个应用程序实例,默认配置将推出多个新实例,同时多个实例将终止。 对我们来说最可取的配置是将其更改为 max surge = 1max unavailable = 0(原因 - 实现平滑的 Kafka 重新平衡)。在这种情况下,在特定时间只会启动一个应用实例,并且最多会终止几个实例。

如我所见,如果我们有 max surge = Nmax unavailable = 0,部署策略如下:

  • 第 1 步:N 个新 Pod(第一批)开始
  • 第 2 步:终止 N 个 Pod,启动 N 个新 Pod(第二批)
  • 第 3 步:再终止 N 个 Pod(与第 2 步一起,我们可以体验 最多 2N 个终止 Pod)和 N 个新 Pod(第三批) 开始
  • 第4步:同样的逻辑,这里我们可以体验超过2N Pod 仍在终止
  • 等等...

对于 Pod 总数为 30、具有 max surge = 1max unavailable = 0 的微服务,我们最多可同时终止 3 个 Pod,并且具有 max surge = 3max unavailable = 0 - 最多 7 个终止 pod。

是否可以在部署推出期间控制同时终止 Pod 的最大数量? 假设我最多希望看到一个处于终止状态的 Pod。因此,在 pod 不会完全关闭之前,不会启动新的 pod。

kubectl version

Client Version: version.Info{Major:"1",Minor:"18",GitVersion:"v1.18.10",GitCommit:"62876fc6d93e891aa7fbe19771e6a6c03773b0f7",GitTreeState:"clean",BuildDate:"2020-10-15T01:52:24Z",GoVersion:"go1.13.15",Compiler:"gc",Platform:"linux/amd64"}
Server Version: version.Info{Major:"1",BuildDate:"2020-10-15T01:43:56Z",Platform:"linux/amd64"}

解决方法

maxUnavailablemaxSurge 绝对是要走的路。您列出的步骤很重要,这就是它应该如何工作。

您遇到的情况很可能是一个错误。 GitHub (#99513) 上有一个关于 Kubernetes 不尊重 maxUnavailablemaxSurge 的类似问题。

如果可以,请在 GitHub 上创建新问题,因为您的问题与上述问题略有不同。


编辑

我在回复中发现了另一个类似的问题 (#95498),说明它按预期工作。 [source]

当部署控制器对部署执行滚动更新时,它会根据它控制的副本集的.spec.replicas 扩展/缩小副本集。当 ReplicaSet 缩小时,ReplicaSet 的 .spec.replicas 将减少并且它的一些 Pod 将终止,并且 Deployment 控制器在计算 maxSurge / maxUnavailable 时会简单地忽略那些终止的 Pod。

类似地,ReplicaSet 控制器在执行操作时会忽略终止 Pod,例如计算其 .status.availableReplicas

但我有我的疑问。在 GitHub 上创建新问题并让开发人员研究它仍然是不错的选择。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res