如何配置 kubernetes 以允许长时间 运行 交互会话?
How to configure kubernetes to allow for long running interactive sessions?
这里有问题 运行 v1.5.1
使用 kubectl run/exec -i --tty
功能。
发送数据时连接不会中断。因此,当我启动一个交互式容器会话时,使用一个不时输出一些内容的脚本,它似乎有效。
基于此,我创建了一个 令人讨厌的解决方法 来让我的容器会话继续进行,而无需我的交互。这些会话过早终止真的很烦人。他们留下垃圾,如果您附加到 运行 生产容器,则需要清理这些垃圾。
解决方法(作为后台进程每 59 秒向 STDERR 打印一个 space 字符 </code>):</p>
<pre><code># within your container session
$ while :; do sleep 59; echo -n ' ' >&2; done &
看到下面的输出,当我不启动这样的脚本时。
它表明交互式会话会在大约 2 分钟内提前终止。
如果您利用此功能调试 运行 应用程序和容器安装,这真的很烦人。
$ time kubectl run -i --tty busybox --image=busybox --restart=Never -- sh
Waiting for pod default/busybox to be running, status is Pending, pod ready: false
If you don't see a command prompt, try pressing enter.
/ # Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
error: timed out waiting for the condition
real 2m4.657s
从这个Github Issue重新post。
我现在已经解决了这个问题。
该问题是由通过 AWS LoadBalancer(ELB 或 ALB)提供服务的 Kubernetes API 引起的。这些连接会在超时后终止,导致 kubectl
和 Kubernetes API 服务器之间断开连接。
这本身不是 Kubernetes 问题,它与您如何为最终用户提供 Kubernetes API 服务器有关。在这种情况下,负载均衡器。
快速解决方法:增加超时时间或偶尔通过网络发送数据以保持连接打开。
这里有问题 运行 v1.5.1
使用 kubectl run/exec -i --tty
功能。
发送数据时连接不会中断。因此,当我启动一个交互式容器会话时,使用一个不时输出一些内容的脚本,它似乎有效。
基于此,我创建了一个 令人讨厌的解决方法 来让我的容器会话继续进行,而无需我的交互。这些会话过早终止真的很烦人。他们留下垃圾,如果您附加到 运行 生产容器,则需要清理这些垃圾。
解决方法(作为后台进程每 59 秒向 STDERR 打印一个 space 字符 </code>):</p>
<pre><code># within your container session
$ while :; do sleep 59; echo -n ' ' >&2; done &
看到下面的输出,当我不启动这样的脚本时。 它表明交互式会话会在大约 2 分钟内提前终止。
如果您利用此功能调试 运行 应用程序和容器安装,这真的很烦人。
$ time kubectl run -i --tty busybox --image=busybox --restart=Never -- sh
Waiting for pod default/busybox to be running, status is Pending, pod ready: false
If you don't see a command prompt, try pressing enter.
/ # Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
Waiting for pod default/busybox to terminate, status is Running
error: timed out waiting for the condition
real 2m4.657s
从这个Github Issue重新post。
我现在已经解决了这个问题。
该问题是由通过 AWS LoadBalancer(ELB 或 ALB)提供服务的 Kubernetes API 引起的。这些连接会在超时后终止,导致 kubectl
和 Kubernetes API 服务器之间断开连接。
这本身不是 Kubernetes 问题,它与您如何为最终用户提供 Kubernetes API 服务器有关。在这种情况下,负载均衡器。
快速解决方法:增加超时时间或偶尔通过网络发送数据以保持连接打开。