Можно ли выполнить команду в модуле 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.

Другие вопросы по тегам