Кубернетский эквивалент `docker run --init` - PullRequest
0 голосов
/ 11 июня 2018

Рекомендуется не запускать докернизированные приложения Node.JS в качестве PID 1 (см. https://github.com/nodejs/docker-node/blob/master/docs/BestPractices.md#handling-kernel-signals), чтобы правильно захватывать сигналы.

Команда docker run обеспечивает --init флаг, чтобы обернуть точку входа приложения в небольшую систему инициализации, которая правильно передает сигналы.

Есть ли встроенный эквивалент флага --init в Кубернетесе?

Я исследовалспецификации объектов Pod и Container для Kubernetes 1.10, но не видели ничего, связанного с указанием того, как начинается изображение.

Альтернативой может быть явное включение и использование Tini в каждом контейнере, ноМне бы очень хотелось, чтобы какой-нибудь способ, позволяющий сделать так, как флаг --init ведет себя прозрачно.

Существуют ли другие альтернативы?

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Если вы разрешите совместное использование пространства имен процесса (PID) для ваших модулей, процесс init (pause) будет исходить от Kubernetes.Если у вас есть отдельное пространство имен процессов для ваших контейнеров, они должны сами включать tini или другой процесс инициализации.

Согласно https://www.ianlewis.org/en/almighty-pause-container, Kubernetes 1.7 по умолчанию имеет общее пространство имен процессов и кублетфлаг, чтобы отключить его, 1.8 был отключен по умолчанию и флаг kubelet, чтобы включить его.Kubernetes 1.11 имеет альфа-функцию для включения общего пространства имен процесса: https://kubernetes.io/docs/tasks/configure-pod-container/share-process-namespace/

0 голосов
/ 12 июня 2018

Если вы предполагаете, что Kubernetes создает контейнер с помощью команд Docker, то вы должны знать, что он ничего не знает о ключе --init.Другими словами, у Kubernetes нет такой оболочки для запуска контейнера с другим начальным процессом.

Итак, если вы хотите использовать эту функцию в Kubernetes, вам нужно подготовить образ Docker с Tini в нем.

На самом деле, Tini включен в Docker 1.13 или выше, и вы просто включаете его, передавая флаг --init в docker run.Итак, чтобы добавить Tini к вашему изображению, используйте следующий код в Dockerfile:

# Add Tini
ENV TINI_VERSION <check-version-on-github>
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
RUN chmod +x /tini
ENTRYPOINT ["/tini", "--"]

# Run your program under Tini
CMD ["/your/program", "-and", "-its", "arguments"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...