Возможно ли выполнить c в модуле K8s так же, как мы выполняем c в контейнерах docker или контейнерах, работающих внутри модуля? - PullRequest
0 голосов
/ 13 июля 2020

Возможно ли exec в модуль K8s так же, как мы exec в docker контейнеры или контейнеры, работающие внутри модуля? P

Edit - Этот вопрос не о помещении exec в контейнер в контейнере. Речь идет о самой капсуле. Может быть, это невозможно, но вот в чем вопрос. Так что прекратите помечать его как дубликат - Можем ли мы выполнить c в контейнер в POD в K8S?

Ответы [ 3 ]

3 голосов
/ 13 июля 2020

Pod - это группа контейнеров, представляющая собой логическое понятие. Так что вы не можете действительно exe c в pod. Все, что вы можете сделать, это запустить exe c в один из контейнеров модуля. Команда

kubectl exec может заставить вас подумать, что вы выполняете запуск в модуле, но на самом деле вы запускаете c в контейнер. Эта команда работает только в том случае, если это один контейнерный модуль. Если в модуле несколько контейнеров, то есть это мульти-контейнерный модуль, вам нужно явно выбрать контейнер, используя параметр -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 должен создать linux пространства имен, которые будут совместно использоваться другими контейнерами модуля.

Невозможно выполнить exe c в этот контейнер паузы, используя kubectl exec, но вы можете выполнить c в нем, используя docker exec.

1 голос
/ 13 июля 2020

Pod - это абстрактная сущность, которая обертывает ваш контейнер. Когда вы исполняете c в pod через kubectl exe c -it, вы фактически выполняете команду оболочки для своего контейнера. Также вам нечего запускать c в Pod.

1 голос
/ 13 июля 2020

Да, с помощью команды kubectl exe c мы можем запустить оболочку в работающий контейнер / под

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
...