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

问题描述 投票:2回答:1

在这里使用v1.5.1功能运行kubectl run/exec -i --tty时遇到问题。

发送数据时连接不会中断。因此,当我启动一个交互式容器会话时,它的脚本会不时输出某些内容,这似乎可以正常工作。

基于此,我创建了一个nasty workaround,以保持容器会话的进行,而无需进行交互。这些会话过早终止真的很烦人。它们会留下垃圾,以防万一您将其附着到正在运行的生产容器上。

解决方法(作为后台进程,每59秒将空格字符打印到STDERR:]

# 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重新发布。

kubernetes kubectl
1个回答
0
投票

到目前为止,我已经解决了这个问题。该问题是由通过AWS LoadBalancer(ELB或ALB)提供Kubernetes API引起的。这些超时后会终止连接,导致kubectl与Kubernetes API服务器之间断开连接。

这本身不是Kubernetes的问题,它与您如何向最终用户提供Kubernetes API服务器有关。在这种情况下,请使用负载均衡器。

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

© www.soinside.com 2019 - 2024. All rights reserved.