Настройка политики перезапуска pod из конфигурации развертывания

#kubernetes #openshift

#kubernetes #openshift

Вопрос:

Мы используем Openshift (управляемую версию Kubernetes), и я изо всех сил пытаюсь изменить политику перезапуска pod с «Всегда» на «Никогда» для всех модулей, созданных нашей конфигурацией развертывания, но я не уверен, где в yaml внести это изменение.

Наша конфигурация развертывания выглядит примерно так:

 kind: DeploymentConfig
metadata:
  generation: 19
  name: my-deployment-config
  namespace: my-deployment-config-namespace
  selfLink: >-
    ...
  uid: af918183-c780-11ea-8945-525400d3e4d9
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    name: my-selector
  strategy:
    activeDeadlineSeconds: 21600
    resources: {}
    rollingParams:
      intervalSeconds: 1
      maxSurge: 25%
      maxUnavailable: 25%
      timeoutSeconds: 600
      updatePeriodSeconds: 1
    type: Rolling
template:
    metadata:
      ...
    spec:
      containers:
        - image: >-
            (image source)
          imagePullPolicy: Always
          name: my-container
          ports:
            - containerPort: 8080
              protocol: TCP
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
  

Когда я пытаюсь изменить restartPolicy там с «Всегда» на «Никогда», я сталкиваюсь с

Не удалось обработать ресурс. Причина: DeploymentConfig.apps.openshift.io «my-deployment-config» недопустим: spec.template.spec.restartPolicy: неподдерживаемое значение: «Никогда»: поддерживаемые значения: «Всегда»

Документация Kubernetes, а также документация Openshift по политике перезапуска показывают, что модули могут быть настроены с использованием Always, Never или OnFailure.

Итак, как мне сделать это из конфигурации развертывания?

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

1. Взгляните на таблицу в документации OpenShift (ссылка, которую вы отправляете). Развертывание создаст ReplicationController. ReplicationController всегда перезапускает Pod.

2. Итак, для веб-служб, размещенных в Openshift, я не могу настроить политику перезапуска, если я не рассматриваю это как задание?

3. Можете ли вы предоставить более подробную информацию о вашем варианте использования? Мне любопытно, почему вы хотели бы, чтобы ваши Deployment дочерние модули не перезапускались при завершении / сбое.

4. В основном, просто для того, чтобы сработало наше существующее предупреждение о сердцебиении. Я полагаю, что есть способы вместо этого оповещать о последовательных перезапусках pod или что-то в этом роде через что-то вроде alert manager, но мы еще не разобрались с этим. Это приложение удаляет сообщения из очереди и обрабатывает их, поэтому, если возникает проблема с обработкой сообщения, оно просто будет удалять одно и то же сообщение из очереди и снова завершать работу, пока разработчик не сможет это исправить. Нам нужно оповещение о том, что требуется вмешательство.

Ответ №1:

Развертывания всегда разрешают только политику перезапуска. Обратитесь к этой документации https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#pod-template

Также обратитесь к отчету о проблеме, относящемуся к тому же самому. https://github.com/kubernetes/kubernetes/issues/24725

Допускается только .spec.template.spec.restartPolicy, равный Always, который используется по умолчанию, если не указан.

Примечание: Это тот же случай для наборов демонов, наборов реплик, ReplicationController.