【问题标题】:Command running in kubernetes hangs在 Kubernetes 中运行的命令挂起
【发布时间】:2020-10-15 16:14:01
【问题描述】:

我需要在 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"

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

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

这个命令对我有用:

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

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

【问题讨论】:

  • 您能否确保clickhouse-server DNS 查找在您的 kubernetes 集群中正常工作?请运行kubectl run busybox --quiet -it --rm --restart=Never --image=busybox -- nslookup clickhouse-server
  • 如果你去掉--quiet选项,你可能会看到clickhouse-client显示的错误信息
  • @ogbofjnr 因为您的问题已解决,并且您在 cmets 中的答案下指出了它,我恳请您在 cmets 之外创建一个带有解释的答案。

标签: docker kubernetes clickhouse


【解决方案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 作业。

【讨论】:

【解决方案2】:

您的 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: {}
........
---

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多