Get Ready status using kubectl -o=jsonpath



我试图通过使用 -o=jsonpath 来获取 pods 的就绪状态。 为了更清楚地了解我想要什么,我想使用 -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

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

some_namespace1 pod_name1 1/1

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

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

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

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

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

可用于名称的类似命令

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

编辑:

您需要比较.status.replicas.status.readyReplicas,以获得有多少个现成的副本。

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

如果你kubectl get pod ... -o yaml(或-o json),你将得到一个与List匹配的对象(不包括在 API 文档中),其中每个项目都是 Kubernetes API 中的一个 Pod,并且-o jsonpath值遵循该对象结构。 特别是 PodStatus 有一个 ContainerStatus 列表,每个 ContainerStatus 都可能是也可能不是ready,但 API 本身不会将计数作为第一类字段返回。

有几种不同的 JSONPath 实现。 我认为 Kubernetes 只支持 Kubernetes 文档中的语法,其中不包含任何类型的"长度"函数。 (原始的JavaScript实现和现成的Googlable Java实现似乎都略有不同,语法略有不同。

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

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

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

最新更新