Kubectl附加vs kubectl exec?

Sur*_*noi 27 kubernetes

通过使用kubectl exec -ti POD_NAME bash我能够访问容器内的终端并执行命令.

我可以理解上述命令的可用性和方便性.作为K8s运营商,我经常使用exec.

但是,用例是kubectl attach POD_NAME什么?

怎么呢?它的真正目的是什么?在什么情况或情况下它可以使用?

Von*_*onC 28

kubectl附着的用例在kubernetes/issue 23335中讨论.

它可以附加到由容器运行的主进程,而不是总是bash.
与exec相反,它允许您在容器内执行任何进程(通常:bash)

# Get output from running pod 123456-7890, using the first container by default
kubectl attach 123456-7890

# Get output from ruby-container from pod 123456-7890
kubectl attach 123456-7890 -c ruby-container
Run Code Online (Sandbox Code Playgroud)

本文提出:

除了交互式执行命令外,您现在还可以附加到任何正在运行的进程.比如kubectl logs,你将获得stderr和stdout数据,但是使用attach,你也可以将stdin从你的终端发送到程序.
很棒的交互式调试,甚至只是发送ctrl- c行为不端的应用程序.

  $> kubectl attach redis -i
Run Code Online (Sandbox Code Playgroud)

同样,主要区别在于您在容器中与之交互的过程:

  • exec:你要创建的任何人
  • 附:当前正在运行的那个(没有选择)


VKa*_*atz 8

用最简单的话来说

kubectl attach命令类似于kubectl exec,但它附加到在 中运行的主进程,container而不是运行另一个进程。