如果部署中的副本数为1,并且部署不好,则无论如何都会发生部署,我可以更改此行为吗?

时间:2016-05-25 11:19:25

标签: kubernetes google-cloud-platform

我正在玩这个: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,看看是否有所不同,但事实并非如此。

1 个答案:

答案 0 :(得分:5)

我相信您希望将maxUnavailable(默认为1)设置为0.这可以防止Kubernetes在使健康状态升级之前删除任何现有的pod。 maxSurge仅指定在滚动升级期间您愿意看到多少个超过所需计数的pod。由于您只尝试在第三次部署中推出单个更新的pod,因此maxSurge增加超过默认值1没有任何区别。

另请参阅文档中的Rolling Update Deployment部分。