Kubectl attach与kubectl exec?

识趣 发表于: 2022-03-01   最后更新时间: 2022-03-02 09:46:20   1,137 游览

通过使用kubectl exec -ti POD_NAME bash,我可以访问容器内的命令行并执行命令。

我可以很容易的理解exec命令的实用性和便利性。作为K8s管理员,我也经常使用exec

然而,kubectl attach POD_NAME的使用情况是什么?

如何才能利用
它的真正目的是什么?

在什么情况下使用它最好?

发表于 2022-03-01

它可以附加到容器所运行的主进程上,而这个主进程并不总是bash。
与exec相反,它允许你在容器中执行任何进程(通常是:bash)。

# 从运行的 pod 123456-7890 获取输出,默认使用第一个容器
kubectl attach 123456-7890

# 从 pod 123456-7890 获取 ruby-container 的输出
kubectl attach 123456-7890 -c ruby-container

官方文档:

除了交互式执行命令之外,您现在还可以附加到任何正在运行的进程。像kubectl logs一样,你会得到stderr和stdout数据,但是通过附加,您还可以将标准输入从终端发送到程序中。非常适合交互式调试,甚至只是将 ctrl-c 发送到行为不端的应用程序。

  $> kubectl attach redis -i

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

  • exec: 你想创建的任何一个
  • attach: 当前运行的那个(没有选择)
你的答案

查看kubernetes相关的其他问题或提一个您自己的问题