activeDeadlineSeconds становится недействительным - PullRequest
0 голосов
/ 05 мая 2020

Мы столкнулись с проблемой при попытке настроить activeDeadlineSeconds при развертывании. Хотя мы видим в kubectl объяснение, согласно этому; это допустимый параметр при развертывании. Пожалуйста, обратитесь к этому изображению:

enter image description here

Теперь, когда мы пытаемся установить тот же параметр для развертывания; он говорит, что это неверно. Пожалуйста, обратитесь к изображению ниже:

enter image description here

Пожалуйста, дайте нам знать, если мы здесь что-то делаем не так. Вы можете использовать следующий yaml для быстрых экспериментов:

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: test
  name: test
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: test
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
status: {}

мы пробуем это, потому что в нашем случае есть init-контейнер, который иногда зависает, потому что activeDeadlineSeconds также включает init-контейнеры; progressdeadlineseconds не включает контейнеры инициализации

Есть ли альтернатива этому?

Ответы [ 2 ]

0 голосов
/ 22 мая 2020

Есть ли альтернатива этому?

Это довольно простая задача linux, которую можно решить с помощью timeout или timelimit двоичный.

$ timeout -k 1 5 bash -c "while true ; do sleep 1 && echo 1 ; done" || echo
# the above task will be terminated in 5 secs or killed in 6 secs.

# timeout [OPTION] DURATION COMMAND [ARG]...
# -k, --kill-after=DURATION also send a KILL signal if COMMAND is still running
    this long after the initial signal was sent (not available on some containers)
# DURATION is a floating point number with an optional suffix: 's' for
#   seconds (the default), 'm' for minutes, 'h' for hours or 'd' for
#   days.  A duration of 0 disables the associated timeout.
# the above task will be terminated in 5 secs or killed in 6 secs.


$ timelimit -t 5 -T 1 bash -c "while true ; do sleep 1 && echo 1 ; done" || exit 0
# the above task will be terminated in 5 secs or killed in 6 secs.

# -t 5 - five seconds before sending SIGTERM to the process  
# -T 1 - one second after SIGTERM was sent and before sending SIGKILL

Просто укажите это в команде InitContainer, чтобы остановить задачу через некоторое разумное время.

Чтобы InitContainer думал, что команда завершена успешно, даже если она была завершена, добавьте || echo или || exit 0 в конец команды, как показано в примере выше.

timeout присутствует в системе по умолчанию (отмечено на busybox, ubuntu, centos, alpine), но timelimit отсутствует и может быть установлен соответствующим диспетчером пакетов. Например:

$ apt-cache search timelimit
timelimit  - simple utility to limit a process's absolute execution time

$ apt-get -y install timelimit

Вы можете найти другие способы убить процесс, используя только команды bash:

0 голосов
/ 06 мая 2020

Идея использования activeDeadlineSeconds при развертывании означает, что вы хотите запустить что-то, что не прослужит слишком долго. Это противоречит цели развертывания. Развертывание предназначено для тех вещей, которые вам нужны.

Как Амит Кумар Гупта объяснил:

Синтаксически deployment.spec.template.spec то же самое, что pod.spec (поэтому вы видите activeDeadlineSeconds в kubectl explain output), но семантически не все поля в спецификации модуля значимы / разрешены / поддерживаются в контексте развертывания (вот почему вы видите запрещенное сообщение об ошибке - под капотом создание развертывания приводит к созданию ReplicaSets).

Если мы проверим документацию , мы увидим, что activeDeadlineSeconds доступен только для заданий и модулей.

Задания и модули предназначены для запуска задачи и d ie после ее завершения.

activeDeadlineSeconds

Определяет продолжительность в секундах относительно startTime, в течение которой задание может быть активным до того, как система попытается его завершить; Значение должно быть положительным целым числом

Если вы планируете установить activeDeadlineSeconds, это означает, что вы не хотите, чтобы ваши модули развертывания продолжали работать, и это неправильный подход.

Есть ли альтернатива этому?

Это действительно зависит от того, зачем вашему приложению нужен такой подход. Если вы действительно думаете, что этот подход имеет смысл, вы можете открыть проблему и сделать запрос функции для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...