0

使用默认设置,由n服务副本组成的部署在部署期间将遵循以下顺序:

启动 pod 1-> 等待 pod1准备好
pod1准备好后,启动 pod 2-> 等待 pod2准备好
...
一旦 podn-1准备好,启动 pod n-> 等待 podn准备好

在我的应用程序中,服务需要几分钟才能接受流量(准备就绪)。因此,我想将我的部署配置为:
启动 pod 1-> 启动 pod 2... -> 启动 podn
一旦所有 pod 都启动,等待pod1准备n就绪。

    ---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-webservice
spec:
  replicas: n
  selector:
    matchLabels:
      app.kubernetes.io/name: my-webservice
  template:
    metadata:
      labels:
        app: my-webservice
        app.kubernetes.io/name: my-webservice
    spec:
      securityContext:
        runAsNonRoot: true
      containers:
      - name: my-webservice
        image: "my.docker.repo/my-webservice:latest"
        ports:
        - containerPort: 5000
        readinessProbe:
          httpGet:
            path: /ready
            port: 5000
          initialDelaySeconds: 10
          periodSeconds: 10
          timeoutSeconds: 5
          failureThreshold: 360

我该如何配置?

4

2 回答 2

2

您可以尝试在您的 deployment.yml 中添加.spec.strategy.rollingUpdate.maxSurge字段(在此处查看)

我认为您需要设置maxSurge: n

在您的示例中:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-webservice
spec:
  replicas: n
  strategy:
    rollingUpdate:
      maxSurge: n
  selector:
    matchLabels:
      app.kubernetes.io/name: my-webservice
  template:
    metadata:
      labels:
        app: my-webservice
        app.kubernetes.io/name: my-webservice
    spec:
      securityContext:
        runAsNonRoot: true
      containers:
      - name: my-webservice
        image: "my.docker.repo/my-webservice:latest"
        ports:
        - containerPort: 5000
        readinessProbe:
          httpGet:
            path: /ready
            port: 5000
          initialDelaySeconds: 10
          periodSeconds: 10
          timeoutSeconds: 5
          failureThreshold: 360

因此,当您应用更新时,将同时创建 n 个新 pod。

于 2020-10-13T16:00:52.103 回答
1

一种方法是放弃 readinessProbe 并仅使用 livenessProbe 和更适合您的用例的 initialDelaySeconds。

如果使用 readinessProbe,根据设计,只有当第一个副本被识别为就绪时,部署才会移动到下一个副本。

因此,通过使用 livenessProbe,所有这些都将立即启动,但您可以利用 initialDelaySeconds 来确定何时开始检查 pod 是否处于活动状态。

于 2020-10-13T16:00:27.363 回答