【问题标题】:Get Ready status using kubectl -o=jsonpath使用 kubectl -o=jsonpath 获取就绪状态
【发布时间】:2019-06-13 10:19:13
【问题描述】:

我试图通过使用 -o=jsonpath 来获取 pod 的就绪状态。 为了更清楚我想要什么,我想使用 -o=jsonpath 获取以下示例的值 1/1。

NAME       READY     STATUS    RESTARTS   AGE
some_pod   1/1       Running   1          34d

我已经设法获取了一些信息,例如 pod 名称或命名空间。

kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.namespace}{"\t"}{.metadata.name}{"\t"}{end}'

我得到类似的东西:

some_namespace1 pod_name1

但是,我不知道如何获得 Ready 状态。我想要的是一个类似于这样的输出:

some_namespace1 pod_name1 1/1

我知道我可以使用像 cut 这样的 bash 命令:

kubectl get pods --all-namespaces| tail -1 | cut -d' ' -f8

但是,我想通过使用 kubectl 来获得它

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    您可以使用以下命令获取所有 pod 的状态:

    kubectl get pods -o jsonpath={.items[*].status.phase}
    

    你可以使用类似的命令来命名

    kubectl get pods -o jsonpath={.items[*].metadata.name}
    

    编辑:

    您需要比较.status.replicas.status.readyReplicas 以了解有多少准备好的副本。

    【讨论】:

    • 是的,我知道,正如我在问题中添加的那样,我可以通过使用 jsonpath 获得很多东西。但是,我想专门获得就绪状态。如果我使用以下命令检查所有 json:kubectl get pod -o json 我在任何地方都看不到 1/1 字符串
    • 否 在这种情况下,您需要比较 .status.replicas.status.readyReplicas 才能得到结果
    • 您可能需要在 jsonpath 周围添加引号:kubectl get pods --all-namespaces -o jsonpath="{.items[*].status.phase}"
    【解决方案2】:

    我认为这在 Kubernetes API 中没有直接报告。

    如果您使用kubectl get pod ... -o yaml(或-o json),您将返回一个匹配List(未包含在API 文档中)的对象,其中每个项目都是Kubernetes API 中的Pod,以及@987654330 @ 值遵循该对象结构。特别是 PodStatus 有一个 ContainerStatus 列表,每个列表可能是也可能不是 ready,但 API 本身不会将计数作为一等字段返回。

    有几个不同的 JSONPath 实现。我认为 Kubernetes 只支持the syntax in the Kubernetes documentation,它不包含任何类型的“长度”功能。 (original JavaScript implementation 和现成的 Google 搜索 Java implementation 似乎都是,语法略有不同。)

    我能想到的最好的办法就是报告所有单个容器的“就绪”状态

    kubectl get pods \
      -o $'jsonpath={range .items[*]}{.metadata.name}\t{.status.containerStatuses[*].ready}\n{end}'
    

    $'...' 是 bash/zsh 语法)但这仍然需要一些后处理才能恢复原始计数。

    【讨论】:

    • kubectl get pods -o jsonpath="{range .items[*]}{@.metadata.name}{'\t\t'}{@.status.conditions[?(@.type=='Ready')].status}{'\n'}"
    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 2012-12-14
    • 1970-01-01
    相关资源
    最近更新 更多