【发布时间】:2018-10-06 09:38:13
【问题描述】:
通过使用kubectl exec -ti POD_NAME bash,我可以访问容器内的终端并执行命令。
我可以理解上述命令的可用性和方便性。作为 K8s Operator,我经常使用 exec。
但是,kubectl attach POD_NAME 的用例是什么?
如何利用? 它的真正目的是什么? 在什么情况下可以使用?
【问题讨论】:
标签: kubernetes
通过使用kubectl exec -ti POD_NAME bash,我可以访问容器内的终端并执行命令。
我可以理解上述命令的可用性和方便性。作为 K8s Operator,我经常使用 exec。
但是,kubectl attach POD_NAME 的用例是什么?
如何利用? 它的真正目的是什么? 在什么情况下可以使用?
【问题讨论】:
标签: kubernetes
kubernetes/issue 23335 讨论了 kubectl attach 的用例。
它可以附加到容器运行的主进程上,这并不总是 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
This article提议:
除了交互式执行命令之外,您现在还可以附加到任何正在运行的进程。与
kubectl logs一样,您将获得 stderr 和 stdout 数据,但通过附加,您还可以将标准输入从终端发送到程序。
非常适合交互式调试,甚至只是将 ctrl-c 发送到行为不端的应用程序。
$> kubectl attach redis -i
同样,主要区别在于您在容器中与之交互的过程:
【讨论】:
kubectl attach 命令类似于kubectl exec,但它附加到运行在container 中的主进程,而不是运行一个额外的。
【讨论】: