我正在玩这个:http://kubernetes.io/docs/user-guide/deployments/在我的基础设施中。我有一些需要复制的部署 - 但是我有一些我只想在部署中使用一个副本的地方 - 但是有一个简单的方法来更改图像版本很棒并且需要。
所以我试着看看如果你在只有1个副本的部署上运行一个损坏的更新会发生什么 - 如果我们执行以下操作(来自上面的文档):
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
如果我们然后运行kubectl create -f nginx-deployment.yaml
我们看到3个正常运行的复制品。
如果我们将上述文件从replicas: 3
更改为replicas: 1
并运行apply命令:kubectl apply -f nginx-deployment.yaml
- 我们会看到1个正常的副本。
现在 - 如果我们将image: nginx:1.7.9
更改为image: nginx:1.7.9broken
- 并运行kubectl apply -f nginx-deployment.yaml
,我们会看到类似这样的内容:
$ kubectl get rs
NAME DESIRED CURRENT AGE
nginx-deployment-2035384211 0 0 11m <- this is the first one we created with 3 replicas
nginx-deployment-3257237551 1 1 8m <- this is the broken one we made with 1 replica and a bad image name
nginx-deployment-3412426736 0 0 10m <- this is the 2nd one we created with 1 replica
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-3257237551-od22j 0/1 ImagePullBackOff 0 19s
所以这里似乎发生的事情是部署已经运行,并创建了一个新的破坏的pod,并且破坏了旧的 - 上面链接的文档告诉我不应该发生的事情?
我的问题是 - 是否有一些设置我可以更改,以便即使有1个副本,部署仍然可以按预期工作,即如果部署创建的新窗格是坏的,它将保持旧的pod正在运行,或者在更新单个pod的图像时我还应该做些什么?
注意 - 这一切似乎在2 +多个副本上运行良好,我试图将maxSurge值设置为5,看看是否有所不同,但事实并非如此。
答案 0 :(得分:5)
我相信您希望将maxUnavailable(默认为1)设置为0.这可以防止Kubernetes在使健康状态升级之前删除任何现有的pod。 maxSurge
仅指定在滚动升级期间您愿意看到多少个超过所需计数的pod。由于您只尝试在第三次部署中推出单个更新的pod,因此maxSurge
增加超过默认值1没有任何区别。
另请参阅文档中的Rolling Update Deployment部分。