Есть ли способ автоматически задерживать все запросы на удаление модуля Kubernetes, чтобы сигнал о снятии с регистрации конечной точки подавался, но SIGTERM модуля задерживался на несколько секунд?
Было бы предпочтительно, но не обязательно, если бы задержка затрагивала только модули с конечной точкой / службой.
Фон:
Это хорошо established, что некоторый трафик может продолжаться к модулю после того, как модуль отправил сигнал завершения SIGTERM из-за асинхронного характера отмены регистрации конечной точки и сигнал удаления. Рекомендуемым смягчением последствий является задержка в несколько секунд в ловушка жизненного цикла preStop
модуля путем вызова sleep
.
Сложность быстро возникает там, где развертывание модуля может быть выполнено через helm или другой исходный код восходящего потока, или же существует большое количество развертываний и контейнеров, которыми необходимо управлять. Такое изменение многих развертываний может быть трудным или даже невозможным (например, в контейнере может не быть двоичного файла сна, оболочки или чего-либо еще, кроме исполняемого файла приложения).
Я вкратце исследовал изменяющийся контроллер допуска, но кажется неработоспособным динамическое добавление preStop
хука, так как все изображения не имеют /bin/sleep
или уже имеют preStop
, для слияния которых могут потребоваться знания, относящиеся к изображению.
(Конечно, всего этого можно было бы избежать, если бы K8S API синхронизировал отмену регистрации конечной точки с тайм-аутом, чтобы избежать взаимоблокировки (подсказка, подсказка), но я не видел никаких обсуждений такого изменения. Да, существует множество причины, по которым это не синхронно, но это не значит, что что-то нельзя сделать.)