更改副本会在暂停部署期间立即创建/删除POD,但kubernetes官方文档中没有指定

更改副本会在暂停部署期间立即创建/删除POD,但kubernetes官方文档中没有指定,kubernetes,Kubernetes,当我阅读kubernetes官方文档时,我发现我可以在暂停和恢复之间应用多个修复程序,而不会触发不必要的展开。 现在,当我只更改部署的映像时,它可以正常工作,但当我更改部署清单中的副本数量并应用该数量时,pod会根据副本数量立即创建/删除,即使部署处于暂停状态 现在,我的问题是,为什么会这样?它不允许在暂停部署期间更改副本吗?还是只允许更改图像?文档没有指定它 另一件事是,如果我更改了副本的数量和映像,则在暂停部署期间仅应用副本,并使用上一个映像(而不是当前映像)创建POD 所使用的部署清单文件

当我阅读kubernetes官方文档时,我发现我可以在暂停和恢复之间应用多个修复程序,而不会触发不必要的展开。
现在,当我只更改部署的映像时,它可以正常工作,但当我更改部署清单中的副本数量并应用该数量时,pod会根据副本数量立即创建/删除,即使部署处于暂停状态

现在,我的问题是,为什么会这样?它不允许在暂停部署期间更改副本吗?还是只允许更改图像?文档没有指定它

另一件事是,如果我更改了副本的数量和映像,则在暂停部署期间仅应用副本,并使用上一个映像(而不是当前映像)创建POD

所使用的部署清单文件为:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.16.1
        ports:
        - containerPort: 80
更新的问题(提供了全部细节) 发生了什么事 当我读库伯内特官方文件的时候。我暂停了部署,并在部署期间更改了部署清单文件中副本的数量。之后,当我使用
kubectl apply-f deployment.yaml应用这些更改时,根据立即创建/删除的POD(即使在暂停部署状态下)的新副本数量,这些POD也与以前的映像一起出现

首先,我使用命令
kubectl apply-f deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.1
        ports:
        - containerPort: 80
之后,我打开了两个终端,使用以下命令监视POD和replicaset:

kubectl get pods -w
kubectl get rs -w
之后,我使用
kubectl卷展栏pause deployment/nginx deployment
命令暂停了部署

kubectl rollout pause ...
然后我更改清单,如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 5 # <------ here changed the number of replicas
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.16.1 # <---- here changed the image
        ports:
        - containerPort: 80

我不认为这是个问题。我相信这是预期的行为 我会尽力解释我为什么这么认为

暂停功能是
kubectl卷展栏
命令的一部分

kubectl rollout pause ...
它用于暂停滚动更新中的特定部署

但滚动更新实际上是什么?让我们试着定义它。 在这方面,我们可以阅读:

滚动更新允许部署的更新以零进行 通过使用新实例增量更新Pods实例实现停机

因此,我们可以看到,滚动更新被用于应用更改,而停机时间为零。 这包括对图像版本、容器限制等的更改,基本上是与应用程序运行和行为有关的任何更改

现在,副本数量的变化是否会影响正在运行的应用程序?它会改变它的行为方式吗?不它仅添加/删除同一应用程序的副本。用户仍然可以使用暂停部署之前可用的相同版本。未应用任何更改

恢复部署后,将应用暂停后提交的所有更改

总之,我相信这是预期的行为,因为副本数量的更改不会改变实际应用程序,同时实际更新确实会暂停


如果您仍然不相信,我建议您在上打开一个问题,并直接询问开发人员。

@SahadatHossain这样做吗?@WytrzymałyWiktor感谢您的支持comment@Matt谢谢你的回答,我明白你的意思了。我打开了一个问题,让我们看看他们怎么说!在此处粘贴该问题的链接,供其他可能对@SahadatHossain主题感兴趣的人将来参考