运行 同时执行多个 `kubectl rollout restart` 命令的预期行为是什么?

What is the expected behavior of running multiple `kubectl rollout restart` commands simultaneously?

上下文:我们有多个进程正在监视同一个功能标志以确定是否需要重新启动,并试图确定我们是否需要确保恰好有一个进程调用 kubectl rollout restart.

假设 n 个进程在同一部署上同时调用 kubectl rollout restart,用于 n > 3。 预计会发生以下哪些行为?

  1. 部署完全停止,因为重叠的重新启动导致不同的 pods 被删除。
  2. 所有重新启动最终 运行,但它们 运行 连续。
  3. 重启 m 次,其中 m < n 将 运行 连续。
  4. 其他。

我四处搜索但没有找到关于此行为的文档,因此非常感谢您的指点。

我没有找到解释 Kubernetes 将如何按照您的问题呈现的行为的官方文档。

但是,我编写了一个脚本,它将并行生成 5 rollout 重启命令,并使用下面的 deployment.yaml 进行测试,使用 rollingUpdate 作为策略和 maxSurge = maxUnavailable = 1。

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp1
spec:
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  replicas: 10
  selector:
    matchLabels:
      app: webapp1
  template:
    metadata:
      labels:
        app: webapp1
    spec:
      containers:
      - name: webapp1
        image: katacoda/docker-http-server:latest
        ports:
        - containerPort: 80

script.sh

for var in 1..5; do
        kubectl rollout restart deployment webapp1 > /dev/null 2>&1 &
done

然后执行脚本并观察行为

    . script.sh; watch -n .5 kubectl get po

watch 命令显示 Kubernetes 保持了 deployment.yaml 命令所要求的状态。从来没有少于 9 pods 处于 运行 状态。屏幕截图相隔几秒钟

因此,从这个实验中,我推断无论发生多少个并行 rollout-restarts,Kubernetes 控制器管理器都足够聪明,仍然可以保持所需的状态。

因此,预期的行为将如清单中所述。