-5

是否可以像进入 docker 容器或在 pod 内运行的容器exec一样进入 K8s execpod?

编辑 -
这个问题不是关于execing 到 pod 中的容器。这是关于 pod 本身的。可能是不可能的,但这就是问题所在。所以停止将其标记为重复 -我们可以在 K8S 的 POD 中执行到容器中吗?

4

3 回答 3

4

Pod 是一组容器,是一个逻辑概念。所以你不能真正执行到一个 pod 中。您所能做的就是执行到 pod 中的一个容器中。

kubectl exec命令可能会让您认为您正在执行 pod,但实际上您执行到容器中。此命令仅在其单个容器 pod 时有效。如果 pod 中有多个容器,即它是一个多容器 pod,那么您需要选择明确使用-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创建 pod 的任何其他实际容器之前创建容器。容器的职责pause是创建将在 pod 的其他容器之间共享的 linux 命名空间。

无法使用 exec 进入该暂停容器,kubectl exec但您可以使用docker exec.

于 2020-07-13T11:51:49.710 回答
1

是的,使用 kubectl exec 命令我们可以进入一个正在运行的容器/pod

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
于 2020-07-13T11:26:18.487 回答
1

pod 是包装容器的抽象实体。当您通过 kubectl exec -it 执行到 pod 时,您实际上是在为您的容器执行包装器命令。此外,您无需在 Pod 中执行任何操作。

于 2020-07-13T13:04:27.183 回答