【问题标题】:curl and grep Command in liveness probes in kuberenetesKubernetes 中活性探针中的 curl 和 grep 命令
【发布时间】:2020-08-21 05:34:04
【问题描述】:

我是 Kubernetes 新手。我已经为我的 python 控制台应用程序编写了一个部署。此应用已订阅 NATS(消息队列)。

我在 liveness prob 中编写了命令来检查 nats 服务器中的 connection_id(我的应用程序连接 id)是否存在。否则,在这种情况下,由于应用程序运行不正常,请重新启动 pod。

我尝试了不同的命令。例如

        livenessProbe:
          exec:
            command:
            - sh
            - -c
            #- curl -s nats:8222/connz?cid=$(cat /tmp/cid) | python3 -c "import sys, json; print(json.load(sys.stdin)['connections'][0]['cid'])" | echo

            #- curl -s http://nats:8222/connz?cid=$(cat /tmp/cid) | grep "$(cat /tmp/cid)"
            - curl -s http://nats:8222/connz?cid=$(cat /tmp/cid) | grep "cid"
          initialDelaySeconds: 10
          periodSeconds: 10

还有一些 curl 命令。然后当我删除 /tmp/cid 文件时。 它应该会失败,对吧?但事实并非如此。

如果我运行这个命令 curl -s http://nats:8222/connz?cid=$(cat /tmp/cid) | grep -c "\"cid\": $(cat /tmp/cid)"

我收到io.k8s.api.core.v1.ExecAction.command: got "map", expected "string" 这个问题。

有什么建议吗?

【问题讨论】:

  • 我在之前的 curl 命令中遇到的一个问题是当 cid 与 nats 不匹配时会给出完整的响应。所以 grep cid 总是成功。
  • | 在 exec 中不起作用。您可以通过k explain pod.spec.containers.livenessProbe.exec阅读更多内容。您可以发布完整的 yaml 吗?当您从容器外壳中点击 curl -s http://nats:8222/connz?cid= 时,退出状态是什么?
  • 但管道工作。

标签: kubernetes nats.io livenesprobe


【解决方案1】:
curl -s http://localhost:8222/connz?cid=$(cat /tmp/cid) | grep -c "cid.* $(cat /tmp/cid),"

这终于对我有用了。

这个问题困扰了 2 天 :(

【讨论】:

    猜你喜欢
    • 2021-09-27
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2018-05-20
    • 2019-07-22
    • 1970-01-01
    • 2019-05-18
    • 2018-02-11
    相关资源
    最近更新 更多