首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在暂停部署期间立即更改副本创建/删除荚,但没有在kubernetes官方文档中指定

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

Stack Overflow用户
提问于 2021-01-26 15:20:43
回答 1查看 125关注 0票数 1

当我从kubernetes官方文档中阅读暂停并恢复部署时,我在这里发现,我可以在暂停和恢复之间应用多个修复,而不会触发不必要的推出。

现在,当我只更改部署的映像时,它就能正常工作,但是当我更改部署清单中的副本数量并应用它时,pod立即根据副本号创建/删除,甚至部署处于暂停状态。

现在,我的问题是,为什么会发生这种情况?它不允许在暂停部署期间更改副本吗?还是只允许改变图像?医生没有指定它。

另一件事是,如果我更改了副本的数量和图像,那么只有副本在暂停部署期间被应用,并且使用前面的映像创建了豆荚,而不是当前的。

使用的部署清单文件是:

代码语言:javascript
复制
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应用更改时,根据立即创建/删除的豆荚的新数量,即使在暂停部署状态下,这些豆荚也与前面的映像一起出现。

首先,我使用命令kubectl apply -f deployment.yaml创建了这个清单的部署

代码语言:javascript
复制
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

之后,我打开了两个终端,通过命令监视豆荚和副本:

代码语言:javascript
复制
kubectl get pods -w
kubectl get rs -w

之后,我使用kubectl rollout pause deployment/nginx-deployment命令暂停了部署。

然后我改变了清单,如下所示:

代码语言:javascript
复制
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 apply -f deployment.yaml应用这个清单之后,我看到的是:用前面的映像image: nginx:1.14.1创建了两个新的豆荚

我期望发生的事情:根据暂停概念,对暂停部署的PodTemplateSpec的任何更改都不会触发新的推出,只要暂停。现在,为什么在暂停部署期间执行更改的副本。

还有别的吗?:同样,如果我使用水平自动分词器,也会发生同样的事情。

环境

  • Kubernetes版本(使用kubectl version):
代码语言:javascript
复制
Client Version: v1.20.1
Server Version: v1.19.1
EN

回答 1

Stack Overflow用户

发布于 2021-01-27 10:05:39

我不认为这是个问题。我相信这是预期的行为,我将试图解释为什么我这样认为。

暂停功能是kubectl rollout命令的一部分。

代码语言:javascript
复制
kubectl rollout pause ...

它用于暂停滚动更新中的特定部署。

但是滚动更新实际上是什么呢?让我们试着定义它。在k8s文档中,我们可以读到:

滚动更新允许部署的更新在零停机时间内进行,方法是用新实例增量地更新Pods实例

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

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

在继续部署之后,将应用暂停后的所有更改。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65904072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档