在 kubernetes 中运行的命令挂起

ogb*_*jnr 5 docker kubernetes clickhouse

我需要在 kubernetes 的 clickhouse 数据库中运行命令。

当我用 docker 尝试它时,它工作正常:

docker run -it yandex/clickhouse-client -h 172.19.0.1 --database=test --query="SYSTEM RELOAD DICTIONARIES"

但是当我在 kub 中运行它时:

kubectl run  --quiet -it --rm  clickhouse-client --image=yandex/clickhouse-client -- -h clickhouse-server  --database=test --query="SYSTEM RELOAD DICTIONARIES"
Run Code Online (Sandbox Code Playgroud)

第二个命令挂起。Pod 处于 CrashLoopBackOff 并 Back-off 重新启动失败的容器/ 且容器的日志包含查询结果。

为什么结果没有刷新到tty?

这个命令对我有用:

kubectl run busybox --quiet -it --rm --restart=Never --image=busybox -- nslookup foobar

和click-house客户端有什么区别?

bha*_* nc 1

@ogbofjnr 这可能是因为查询完成后 pod 就会被杀死。Kubernetes 会重启 pod,执行查询后它会再次死亡。这就是您看到重启循环的原因。

对于繁忙的盒子,入口点是一个长时间运行的命令,例如 sleep 3600 https://github.com/kubernetes/kubernetes/blob/master/hack/testdata/recursive/pod/pod/busybox.yaml#L10-L12

如果您的想法是按计划运行查询,您应该尝试类似的操作,或者尝试 Kubernetes cron 作业。