Как я могу держать контейнер работает на 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
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;" ]
в вашем Dockerfile используйте эту команду:
CMD ["sh", "-c", "tail -f /dev/null"]создайте свой образ Docker.
- Нажмите его на свой кластер или аналогичный, просто чтобы убедиться, что изображение доступно.
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