如果在Kubernetes中将MaxUnavailable设置为0,则不会替换Pod-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

如果在Kubernetes中将MaxUnavailable设置为0,则不会替换Pod

2019-01-09 14:48:14 7664 2

我想要我的pod的回滚部署。我正在set ImageCI环境中更新我的pod 。当我将Deployment / web文件中的maxUnavailable设置为1时,我会停机。但是当我将maxUnavailable设置为0时,pod不会被替换,容器/ app也不会重新启动。

此外,我在Kubernetes集群中有一个节点,这是它的信息

Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  CPU Requests  CPU Limits  Memory Requests  Memory Limits
  ------------  ----------  ---------------  -------------
  881m (93%)    396m (42%)  909712Ki (33%)   1524112Ki (56%)
Events:         <none>

这是完整的YAML文件。我确实准备好了探针套装。

        apiVersion: extensions/v1beta1
        kind: Deployment
        metadata:
          annotations:
            deployment.kubernetes.io/revision: "10"
            kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe
              convert
            kompose.version: 1.14.0 (fa706f2)
            kubectl.kubernetes.io/last-applied-configuration: |
              {"apiVersion":"extensions/v1beta1","kind":"Deployment","metadata":{"annotations":{"kompose.cmd":"C:\\ProgramData\\chocolatey\\lib\\kubernetes-kompose\\tools\\kompose.exe convert","kompose.version":"1.14.0 (fa706f2)"},"creationTimestamp":null,"labels":{"io.kompose.service":"dev-web"},"name":"dev-web","namespace":"default"},"spec":{"replicas":1,"strategy":{},"template":{"metadata":{"labels":{"io.kompose.service":"dev-web"}},"spec":{"containers":[{"env":[{"name":"JWT_KEY","value":"ABCD"},{"name":"PORT","value":"2000"},{"name":"GOOGLE_APPLICATION_CREDENTIALS","value":"serviceaccount/quick-pay.json"},{"name":"mongoCon","value":"mongodb://quickpayadmin:quickpay1234@ds121343.mlab.com:21343/quick-pay-db"},{"name":"PGHost","value":"173.255.206.177"},{"name":"PGUser","value":"postgres"},{"name":"PGDatabase","value":"quickpay"},{"name":"PGPassword","value":"z33shan"},{"name":"PGPort","value":"5432"}],"image":"gcr.io/quick-pay-208307/quickpay-dev-node:latest","imagePullPolicy":"Always","name":"dev-web-container","ports":[{"containerPort":2000}],"readinessProbe":{"failureThreshold":3,"httpGet":{"path":"/","port":2000,"scheme":"HTTP"},"initialDelaySeconds":5,"periodSeconds":5,"successThreshold":1,"timeoutSeconds":1},"resources":{"requests":{"cpu":"20m"}}}]}}}}
          creationTimestamp: 2018-12-24T12:13:48Z
          generation: 12
          labels:
            io.kompose.service: dev-web
          name: dev-web
          namespace: default
          resourceVersion: "9631122"
          selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/web
          uid: 5e66f7b3-0775-11e9-9653-42010a80019d
        spec:
          progressDeadlineSeconds: 600
          replicas: 2
          revisionHistoryLimit: 10
          selector:
            matchLabels:
              io.kompose.service: web
          strategy:
            rollingUpdate:
              maxSurge: 1
              maxUnavailable: 0
            type: RollingUpdate
          template:
            metadata:
              creationTimestamp: null
              labels:
                io.kompose.service: web
            spec:
              containers:
              - env:
                - name: PORT
                  value: "2000"

                image: gcr.io/myimagepath/web-node
                imagePullPolicy: Always
                name: web-container
                ports:
                - containerPort: 2000
                  protocol: TCP
                readinessProbe:
                  failureThreshold: 10
                  httpGet:
                    path: /
                    port: 2000
                    scheme: HTTP
                  initialDelaySeconds: 10
                  periodSeconds: 10
                  successThreshold: 1
                  timeoutSeconds: 10
                resources:
                  requests:
                    cpu: 10m
                terminationMessagePath: /dev/termination-log
                terminationMessagePolicy: File
              dnsPolicy: ClusterFirst
              restartPolicy: Always
              schedulerName: default-scheduler
              securityContext: {}
              terminationGracePeriodSeconds: 30
        status:
          availableReplicas: 2
          conditions:
          - lastTransitionTime: 2019-01-03T05:49:46Z
            lastUpdateTime: 2019-01-03T05:49:46Z
            message: Deployment has minimum availability.
            reason: MinimumReplicasAvailable
            status: "True"
            type: Available
          - lastTransitionTime: 2018-12-24T12:13:48Z
            lastUpdateTime: 2019-01-03T06:04:24Z
            message: ReplicaSet "dev-web-7bd498fc74" has successfully progressed.
            reason: NewReplicaSetAvailable
            status: "True"
            type: Progressing
          observedGeneration: 12
          readyReplicas: 2
          replicas: 2
          updatedReplicas: 2

我试过1副本,它仍然无法正常工作。

取消 提交回答
全部回答(2)
  • bjdzliu
    2019-07-17 23:25:02

    第一种情况下,已经设置了maxUnavailable: 1,在滚动升级期间,应该会至少保留一个ready的pod。
    当新pod满足探针需求,得到了200到400的状态码,pod的状态变更为:
    Conditions:
    Type Status
    Initialized True
    Ready True
    ContainersReady True
    PodScheduled True
    就会继续滚动更新,删除第二个旧POD,启动第二个新POD。
    如果readinessProbe在重试失败后,就会把pod标记成noready,前端service流量也不会进来。
    如果发现新POD已经开始接收流量,但是无法提供有效服务。应该是探针和服务提供方式没有匹配,探针返回200,后端服务还没准备好。

    0 0
  • k8s小能手
    2019-07-17 23:25:02

    在第一种情况下,kubernetes删除一个pod(maxUnavailable: 1)并使用新映像启动pod并等待~110秒(基于准备探测)以检查新pod是否能够提供请求。新pod无法为请求提供服务但pod处于运行状态,因此它删除了第二个旧pod并使用新映像启动它,并且第二个pod再次等待准备探测完成。这就是两个容器都没有准备好服务请求并因此停机的时间间隔的原因。

    在你所拥有的第二个场景中,maxUnavailable:0kubernetes首先使用新图像调出pod,并且它无法在~110秒内(基于你的准备情况探测器)提供请求,因此超时并删除新的pod新图片。与第二个pod相同。因此,您的两个pod都没有更新

    所以原因是你没有给你的应用程序足够的时间来启动并开始提供请求。因此这个问题。请增加failureThreshold准备情况探测中的值maxUnavailable: 0,它会起作用。

    0 0
添加回答
相关问答

1

回答

数字海洋kubernetes集群连接错误

2019-01-11 14:14:05 1827浏览量 回答数 1

1

回答

Kubernetes Pod状态有哪些

2021-01-11 16:02:29 827浏览量 回答数 1

1

回答

Kubernetes中集群联邦是什么呀?

2021-10-27 22:02:02 188浏览量 回答数 1

1

回答

Kubernetes集群中的minions是什么呀?

2021-10-27 22:02:42 382浏览量 回答数 1

1

回答

Kubernetes集群数据存储在以下哪个位置?

2021-10-27 22:04:57 352浏览量 回答数 1

1

回答

Kubernetes集群相关组件中的Kubernetes API Server是什么呢?

2021-10-30 22:24:28 149浏览量 回答数 1

1

回答

Kubernetes 集群是如何通过编排模板创建应用的呢?

2021-11-07 16:49:40 151浏览量 回答数 1

1

回答

Kubernetes在基础设施方面如何保证集群的安全性呢?

2021-11-12 17:10:22 163浏览量 回答数 1

1

回答

Kubernetes在权限方面如何保证集群的安全性呢?

2021-11-12 17:10:14 142浏览量 回答数 1

1

回答

kubernetes(K8S)中的pod的生命周期有哪些状态啊?

2021-12-07 13:40:44 127浏览量 回答数 1
+关注
k8s小能手
整合最优质的专家资源和技术资料,问答解疑
文章
问答
问答排行榜
最热
最新
相关电子书
更多
多租户Kubernetes实践:从容器运行时到SDN
立即下载
Play with Serverless Kubernetes
立即下载
使用Kubernetes运行MXNet和AutoTVM
立即下载