如何配置kubernetes以允许长时间运行的交互式会话?

如何配置kubernetes以允许长时间运行的交互式会话?,kubernetes,kubectl,Kubernetes,Kubectl,使用kubectl run/exec-i--tty功能运行v1.5.1时出现问题 发送数据时,连接不会中断。所以,当我启动一个交互式容器会话时,使用一个脚本不时输出一些东西,它似乎可以工作 基于此,我创建了一个讨厌的变通方法,以保持容器会话在没有交互的情况下继续进行。这些会话过早终止,真是令人恼火。它们会留下垃圾,需要清理,以防您连接到正在运行的生产容器 解决方法(作为后台处理,每隔59秒向STDERR打印一个空格字符): 当我不启动这样的脚本时,请参见以下输出。 它表明交互会话在约2分钟内提前

使用
kubectl run/exec-i--tty
功能运行
v1.5.1
时出现问题

发送数据时,连接不会中断。所以,当我启动一个交互式容器会话时,使用一个脚本不时输出一些东西,它似乎可以工作

基于此,我创建了一个讨厌的变通方法,以保持容器会话在没有交互的情况下继续进行。这些会话过早终止,真是令人恼火。它们会留下垃圾,需要清理,以防您连接到正在运行的生产容器

解决方法(作为后台处理,每隔59秒向STDERR打印一个空格字符
):

当我不启动这样的脚本时,请参见以下输出。 它表明交互会话在约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

重新发帖。

我现在已经解决了这个问题。 该问题是由通过AWS负载平衡器(ELB或ALB)提供Kubernetes API引起的。这些在超时后终止连接,导致
kubectl
和kubernetesapi服务器之间的断开

这本身不是Kubernetes问题,它与如何为最终用户提供Kubernetes API服务器有关。在这种情况下,通过负载平衡器


快速解决方法:增加超时时间或偶尔通过导线发送数据,以保持连接打开。

我认为您的问题在于容器级别。Kubernetes本身在这方面没有任何限制(我在开箱即用的情况下运行了几天的会话,没有任何问题),我使用标准的busybox、ubuntu或debian容器。我也见过他们无缘无故地扔下一个贝壳或tty。你看到Github的问题了吗?过去Kubernetes方面存在一些错误行为(连接超时)。在1.3.X中没有这个问题。从1.4.X开始,到现在仍在1.5.1中。我使用的是coreos-kube aws,k8s api在ELB后面。这里也是一样,使用coreos和ELB后面的api在kube aws上运行。也许ELB是叛徒?想知道如何调试这个问题吗?
$ 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