Можно ли выполнить команду в модуле K8s так же, как мы выполняем его в контейнерах докеров или контейнерах, работающих внутри модуля?
Это возможно exec
в капсулу K8s так же, как мы exec
в контейнеры докеров или контейнеры, работающие внутри модуля?p
Изменить -
этот вопрос не оexec
в контейнер в стручке. Речь идет о самой капсуле. Может быть, это невозможно, но вот в чем вопрос. Так что перестаньте отмечать его как дубликат - Можем ли мы выполнить запуск в контейнере в POD в K8S?
3 ответа
Pod - это группа контейнеров, представляющая собой логическое понятие. Таким образом, вы не можете действительно запускать модуль. Все, что вы можете сделать, это выполнить запуск в один из контейнеров модуля.
kubectl exec
Команда может заставить вас подумать, что вы запускаете модуль, но на самом деле выполняете его в контейнере. Эта команда работает только в том случае, если это один контейнерный модуль. Если в модуле несколько контейнеров, то есть это модуль с несколькими контейнерами, вам нужно выбрать контейнер, явно использующий -c
вариант.
Вот результат kubectl exec -h
который также упоминает о контейнерах.
Execute a command in a container.
Examples:
# Get output from running 'date' command from pod mypod, using the first container by default
kubectl exec mypod -- date
# Get output from running 'date' command in ruby-container from pod mypod
kubectl exec mypod -c ruby-container -- date
# Switch to raw terminal mode, sends stdin to 'bash' in ruby-container from pod mypod
# and sends stdout/stderr from 'bash' back to the client
kubectl exec mypod -c ruby-container -i -t -- bash -il
А pause
контейнер создается до того, как будет создан любой другой фактический контейнер модуля. pause
container - создать пространства имен linux, которые будут использоваться другими контейнерами модуля.
Невозможно выполнить exec в этом контейнере паузы, используя kubectl exec
но вы можете выполнить его, используя docker exec
.
Да, с помощью команды kubectl exec мы можем запустить оболочку в работающий контейнер / под
controlplane $ kubectl run --image=nginx web --restart=Never
pod/web created
controlplane $ kubectl get po
NAME READY STATUS RESTARTS AGE
web 0/1 ContainerCreating 0 4s
controlplane $ kubectl exec -it web -- /bin/bash
root@web:/# ls
bin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var
boot docker-entrypoint.d etc lib media opt root sbin sys usr
Pod - это абстрактная сущность, которая обертывает ваш контейнер. Когда вы выполняете команду модуля с помощью kubectl exec -it, вы фактически выполняете команду оболочки для своего контейнера. Также вам нечего запускать в Pod.