在kubernetes中运行的命令挂起

时间:2020-06-25 08:46:22

标签: 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"

第二个命令挂起。 吊舱位于CrashLoopBackOff中,其中“后退”重新启动失败的容器/ 并且容器的日志包含查询结果。

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

此命令对我有用:

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

Clickhouse客户有什么区别?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

您的pod即将运行时被杀死,建议您使用yaml文件创建pod,并在yaml文件中添加命令,然后在DNS解析器中验证clickhouse-server

---
......
      containers:
      - name: clickhouse-client
        image: yandex/clickhouse-client
        command:
          - "-h"
          - "clickhouse-server"
          - "--database=test"
          - "--query='SYSTEM RELOAD DICTIONARIES'"
        resources: {}
........
---