#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.