Я'm сейчас пытаюсь запустить простой контейнер с Shell (/бин/баш) на кластере Kubernetes.
Я думал, что есть способ, чтобы держать контейнер работает на контейнер Docker с помощью псевдо-телетайп вариант и отсоединения (-ООО " ТД "вариант" на " команду docker бегать
).
Например,
$ sudo docker run -td ubuntu:latest
Есть вариант, как это в Kubernetes?
Я'вэ попытался запустить контейнер с помощью `kubectl выполнения контейнерных команды как:
kubectl run-container test_container ubuntu:latest --replicas=1
Но контейнер не выходит в течение нескольких секунд (просто как запуск с помощью команды `докер запустить без вариантов я упомянул выше). И ReplicationController снова запускает его повторно.
Есть ли способ, чтобы держать контейнер работает на Kubernetes как -тд вариантов
в команде докер запустить
?
Контейнеры предназначены для запуска до завершения. Вы должны предоставить свой контейнер с задачей, которая никогда не закончится. Что-то вроде этого должно работать:
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;" ]
Можно использовать данный УМК в файла Docker`:
CMD exec /bin/bash -c "trap : TERM INT; sleep infinity & wait"
Это будет держать ваш контейнер жив, пока он не сказал, чтобы остановить. Используя ловушки и ждать, сделает ваш контейнер немедленно реагировать на запрос на остановку. Без ловушки/ожидание остановки займет несколько секунд.
На основе busybox и изображения (используется в альпийских изображений) сна не знал о аргумент бесконечности. Этот способ предоставит вам такой же быстрый ответ на `докер остановить, как в приведенном выше примере:
CMD exec /bin/sh -c "trap : TERM INT; (while true; do sleep 1000; done) & wait"
Контейнер закрывается при основной процесс завершается. Делать что-то вроде:
docker run -itd debian
держать тару открытой, откровенно говоря, работник, который должен использоваться только для быстрых тестов и примеров. Если вам нужен контейнер для тестирования на несколько минут, я должен сделать следующее:
docker run -d debian sleep 300
Которая имеет то преимущество, что контейнер будет автоматически отключается, если вы забыли об этом. В качестве альтернативы, вы могли бы поставить что-то подобное В а
петли, чтобы держать его вечно в бегах, или просто запускать приложения, такие как "волчок". Все это должно быть легко сделать в Kubernetes.
Реальный вопрос в том, зачем вы хотите это сделать? Ваш контейнер должен предоставлять услугу, процесс которого будет держать контейнер работает в фоновом режиме.
УМК [на"Ш" и " Ну-С и", "в хвост -Ф /dev/нуль", у]
kubectl запустить отладку-контейнер -это ... изображения=<ваши изображения>
Для того, чтобы держать под ПОДА должна выполнять определенные задачи, в противном случае Kubernetes найдете ненужным, поэтому он выходит. Есть много способов, чтобы держать под управлением.
Я столкнулась с такой же проблемой, когда мне понадобилась под просто постоянно, ничего не делая. Ниже приведены два способа тех, кто работал для меня:
Хотя первый вариант легче, чем второй и может быть достаточно требование, это не лучший вариант. А есть ограничение по количеству секунд, вы собираетесь назначить в команду Sleep. Но контейнер с бесконечный цикл выполняется внутри него не выходит.
Однако, я опишу оба варианта(учитывая, что вы работаете контейнер с busybox):
1. Команда Sleep
apiVersion: v1
kind: Pod
metadata:
name: busybox
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox
ports:
- containerPort: 80
command: ["/bin/sh", "-ec", "sleep 1000"]
nodeSelector:
beta.kubernetes.io/os: linux
2. Бесконечный Цикл
apiVersion: v1
kind: Pod
metadata:
name: busybox
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox
ports:
- containerPort: 80
command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
nodeSelector:
beta.kubernetes.io/os: linux
Выполните следующую команду, чтобы запустить РМО:
kubectl apply -f <pod-yaml-file-name>.yaml
Надеюсь, что это помогает!
Мне удалось получить эту работу с командой "спать" бесконечность` в Kubernetes, который будет держать тару открытой. Смотрите этот ответ для альтернативы, когда это вовсе't работа.
Простейшие команды, как это может быть для k8s под манифест для запуска контейнера навсегда: `` версия_арі: В1 вид: РМО метаданные: название: Убунту спецификации: контейнеры:
команда: [ "Спи" и ] аргументы: [на "Бесконечность" и ] ``
Используйте эту команду внутри файла Docker, чтобы держать контейнер работает в ВЫ K8s кластера:
В моем случае, РМО с initContainer не удалось инициализировать. Запуск докер P. S.-А", а затем " журналы вышли докер-контейнер-удостоверение личности-вот дал мне сообщение бревно, которое
журналы kubectl podname` не't дисплей. Загадка решена :-)
Мои несколько копеек на эту тему. Ближайшая команда, которая будет эквивалентна команду docker, которые вы упомянули в вашем вопросе, будет что-то подобное.
$ kubectl run ubuntu --image=ubuntu --restart=Never --command sleep infinity
Выше команда создаст один стручок
и выполните команду спать
с бесконечность
аргумент -таким образом, вы будете иметь процесс, выполняемый в соответствии переднем плане контейнер в живых.
Послесловия, вы можете взаимодействовать с стручок
, выполнив команду kubectl метод exec`.
$ kubectl exec ubuntu -it -- sh
Эта техника очень полезна для создания РМО ресурсов и специальной отладки.