是否可以像进入 docker 容器或在 pod 内运行的容器exec
一样进入 K8s exec
pod?
编辑 -
这个问题不是关于exec
ing 到 pod 中的容器。这是关于 pod 本身的。可能是不可能的,但这就是问题所在。所以停止将其标记为重复 -我们可以在 K8S 的 POD 中执行到容器中吗?
是否可以像进入 docker 容器或在 pod 内运行的容器exec
一样进入 K8s exec
pod?
编辑 -
这个问题不是关于exec
ing 到 pod 中的容器。这是关于 pod 本身的。可能是不可能的,但这就是问题所在。所以停止将其标记为重复 -我们可以在 K8S 的 POD 中执行到容器中吗?
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
.
是的,使用 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
pod 是包装容器的抽象实体。当您通过 kubectl exec -it 执行到 pod 时,您实际上是在为您的容器执行包装器命令。此外,您无需在 Pod 中执行任何操作。