Как я могу держать контейнер работает на Kubernetes?



теперь я пытаюсь запустить простой контейнер с оболочкой (/bin / bash) на кластере Kubernetes.



Я думал, что есть способ сохранить контейнер, работающий на контейнере docker, используя псевдо-tty и параметр отсоединения( на ).





$ sudo docker run -td ubuntu:latest



есть ли такой вариант в kubernetes?



Я пробовал запустить контейнер с помощью как



kubectl run-container test_container ubuntu:latest --replicas=1



но контейнер выходит через несколько секунд (так же, как запуск с docker run команда без опций, о которых я упоминал выше.) и ReplicationController запускает его повторно.



есть ли способ сохранить запуск контейнера на Kubernetes, таких как-TD options in

635   6  

6 ответов:

контейнер завершает работу, когда завершается его основной процесс. Делать что-то вроде:

docker run -itd debian

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

docker run -d debian sleep 300

который имеет то преимущество, что контейнер автоматически выйдет, если вы забудете об этом. Кроме того, вы можете поместить что-то вроде этого в while цикл, чтобы он работал вечно, или просто запустите приложение, например top. Все это должно быть легко сделать в Kubernetes.

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

вы можете использовать этот CMD в вашем Dockerfile:

CMD exec /bin/bash -c "trap : TERM INT; sleep infinity & wait"

это сохранит ваш контейнер живым, пока ему не скажут остановиться. Используя ловушку и ждать сделает ваш контейнер немедленно реагировать на запрос на остановку. Без ловушки/ожидания остановка займет несколько секунд.

для изображений на основе busybox (используется в изображениях на основе alpine) сон не знает о аргументе бесконечности. Этот обходной путь дает вам то же самое немедленно ответ на a docker stop как в приведенном выше примере:

CMD exec /bin/sh -c "trap : TERM INT; (while true; do sleep 1000; done) & wait"

контейнеры предназначены для запуска до завершения. Вам нужно предоставить вашему контейнеру задачу, которая никогда не закончится. Что-то вроде этого должно работать:

apiVersion: v1
kind: Pod
metadata:
  name: ubuntu
spec:
  containers:
  - name: ubuntu
    image: ubuntu:latest
    # Just spin & wait forever
    command: [ "/bin/bash", "-c", "--" ]
    args: [ "while true; do sleep 30; done;" ]
  1. в вашем Dockerfile используйте эту команду:

    CMD ["sh", "-c", "tail -f /dev/null"]

  2. создайте свой образ Docker.

  3. Нажмите его на свой кластер или аналогичный, просто чтобы убедиться, что изображение доступно.
  4. kubectl run debug-container -it --image=<your-image>

я смог заставить это работать с командой sleep infinity в kubernetes, который будет держать тару открытой. Смотрите ответ для альтернатив, когда это не работает.

в моем случае модуль с initContainer не удалось инициализировать. Работает docker ps -a а то docker logs exited-container-id-here дал мне сообщение журнала,kubectl logs podname не показывать. Тайна решена : -)

Comments

    Ничего не найдено.