问题描述
cat test.py
#/usr/bin/env python
import time
for i in range(5):
print(i)
time.sleep(60)
time kubectl exec dind -n test -- python test.py
当执行上述命令时,屏幕没有任何输出,并且1分钟后kubectl exec 命令执行完成退出。进入pod里面查看进程
kubectl exec -it dind -n test -- sh
ps -ef
test.py的进程还没有结束
问题分析
1. 关于屏幕没有输出的问题
python print输出有缓冲,只有在脚本全部执行完毕才会打印到console。但是命令在脚本还没有执行完毕就退出了,就不会有输出了。
当然也可以设置不使用缓冲
kubectl exec dind -n test -- python -u test.py
or
vim test.py
import time
import sys
for i in range(5):
print(i)
sys.stdout.flush()
time.sleep(60)
2. 关于kubectl exec 执行1分钟退出的问题
kubelet 设置了空闲超时时间,如果1分钟没有任何的output 和 input stream,命令会退出。
可以参考一下链接 [kubectl exec issue](https://github.com/kubernetes/kubernetes/issues/66661)