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

IaM*_*CuP 3 google-cloud-platform kubernetes

我正在玩这个: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
Run Code Online (Sandbox Code Playgroud)

如果我们再运行 kubectl create -f nginx-deployment.yaml

我们看到3个健康运行的复制品.

如果我们然后将上面的文件更改replicas: 3replicas: 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
Run Code Online (Sandbox Code Playgroud)

所以这里似乎发生的事情是部署已经运行,并创建了一个新的破坏的pod,并且破坏了旧的 - 上面链接的文档告诉我不应该发生的事情?

我的问题是 - 是否有一些设置我可以改变,以便即使有1个副本,部署仍然可以按预期工作,即如果部署创建的新pod是坏的,它将保持旧pod运行,或者是否存在在更新单个pod的图像时我应该做些什么?

注意 - 这一切似乎在2 +多个副本上正常工作,我试图将maxSurge值设置为5,看看是否有所作为,但事实并非如此.

Tim*_*ann 5

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

另请参阅文档中的滚动更新部署部分.