Как сказать Kubernetes не отправлять трафик в модуль сразу после создания

#nginx #kubernetes

#nginx #kubernetes

Вопрос:

У меня есть развертывание Kubernetes nginx, которое при повторном развертывании с kubectl apply -f file.yaml небольшим временем простоя, около 3 или 5 секунд.

Я использую readinessProbe, чтобы сообщить Kubernetes, что трафик не должен отправляться в этот модуль, пока не сработает готовность, но как только начнется развертывание (даже если initialDelaySeconds оно еще не завершено, я получаю ошибки 502/503, которые завершаются, как только готовность срабатывает.

Итак, я подумал, что до тех пор, пока проверка готовности не будет успешной, этот модуль не должен приниматься во внимание Kubernetes, но это не то, что я вижу.

Если я настрою initialDelaySeconds значение из 10, я получу около 10 секунд простоя. Если я уменьшу его до 0, у меня все равно будет небольшое время простоя, пока не сработает готовность.

Соответствующие части службы / развертывания, которые я использую, следующие

 ---
apiVersion: v1
kind: Service
metadata:
  name: 'name'
spec:
  ports:
    - port: 80
      protocol: TCP
      name: http
  selector:
    project: 'project'
    role: bastion
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: 'bastion'
spec:
  replicas: 6
  strategy:
    rollingUpdate:
      maxSurge: 6
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
    spec:
      containers:
        - name: 'bastion'
          image: 'my-image'
          imagePullPolicy: Always
          ports:
            - containerPort: 80
          lifecycle:
            preStop:
              exec:
                command: ['sh', '-c', '/usr/sbin/nginx -s quit;']
          livenessProbe:
            httpGet:
              path: /myendpoint
              port: 80
            periodSeconds: 60
            initialDelaySeconds: 15
            failureThreshold: 15
          readinessProbe:
            httpGet:
              path: /myendpoint
              port: 80
          resources:
            requests:
              cpu: 5m
              memory: 5Mi
            limits:
              cpu: 50m
              memory: 50Mi
      imagePullSecrets:
        - name: 'imagesecrets'
 

Есть ли что-то, чего мне здесь не хватает? Какие изменения я мог бы попытаться отладить / исправить эту проблему?

Комментарии:

1. Не могли бы вы предоставить спецификацию pod?

2. Используете ли вы recreate в качестве стратегии развертывания?

3. Я добавил спецификации @anemyte

4. Я использую стратегию RollingUpdate @AvinashKumar

5. Я просмотрел, и, на мой взгляд maxUnavailable: 0 , это проблема, сделайте ее 3 или около того…

Ответ №1:

Вы использовали

 periodSeconds: 60
initialDelaySeconds: 15
failureThreshold: 15
 

для livenessProbe но у вас нет определенного для проверки готовности. Я думаю, именно поэтому вы видите ошибки. Попробуйте initialDelaySeconds также определить значение readinessProbe for

Кроме того, для отладки вы можете описать только что созданный pod. В конце вы увидите все происходящие события, включая событие проверки готовности