当我从kubernetes官方文档中阅读暂停并恢复部署时,我在这里发现,我可以在暂停和恢复之间应用多个修复,而不会触发不必要的推出。
现在,当我只更改部署的映像时,它就能正常工作,但是当我更改部署清单中的副本数量并应用它时,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应用更改时,根据立即创建/删除的豆荚的新数量,即使在暂停部署状态下,这些豆荚也与前面的映像一起出现。
首先,我使用命令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之后,我打开了两个终端,通过命令监视豆荚和副本:
kubectl get pods -w
kubectl get rs -w之后,我使用kubectl rollout pause deployment/nginx-deployment命令暂停了部署。
然后我改变了清单,如下所示:
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的任何更改都不会触发新的推出,只要暂停。现在,为什么在暂停部署期间执行更改的副本。
还有别的吗?:同样,如果我使用水平自动分词器,也会发生同样的事情。
环境
kubectl version):Client Version: v1.20.1
Server Version: v1.19.1发布于 2021-01-27 10:05:39
我不认为这是个问题。我相信这是预期的行为,我将试图解释为什么我这样认为。
暂停功能是kubectl rollout命令的一部分。
kubectl rollout pause ...它用于暂停滚动更新中的特定部署。
但是滚动更新实际上是什么呢?让我们试着定义它。在k8s文档中,我们可以读到:
滚动更新允许部署的更新在零停机时间内进行,方法是用新实例增量地更新Pods实例
因此,我们可以看到滚动更新被用于应用零停机时间的更改。这包括对图像版本、容器限制等的更改。基本上,任何与应用程序如何运行和行为有关的内容。
现在,更改副本数量是否会影响正在运行的应用程序?它会改变它的行为方式吗?不是的!它只添加/删除同一个应用程序的副本。用户仍然可以使用暂停部署之前可用的相同版本。不应用任何更改。
在继续部署之后,将应用暂停后的所有更改。
因此,总之,我相信这是预期的行为,因为副本数量的变化不会改变实际的应用程序,同时实际上所有的更新都是暂停的。
如果您仍然不相信,我建议您在k8s github回购上打开一个问题,并直接询问开发人员。
https://stackoverflow.com/questions/65904072
复制相似问题