“kubectl get pods”命令在 Windows 上失败,适用于 WSL2

时间:2021-02-22 16:06:45

标签: kubernetes kubectl

kubernetes 文档 includes 一个用于按 pod 列出容器镜像的示例命令:

<块引用>

按 Pod 列出容器映像

可以通过使用范围操作单独迭代元素来进一步控制格式。

kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\
sort

当我在我的 Debian WSL2 实例中运行这个命令时,它正确地列出了我在所有命名空间中运行的每个 pod 的容器。

当我在 Windows 命令行中运行相同的命令时,出现错误:error: a resource cannot be retrieved by name across all namespaces:

C:\workspace>kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' | sort
error: a resource cannot be retrieved by name across all namespaces

这是 kubectl 的一个错误,还是这个命令只是 *nix?是否有一个独立于操作系统的命令,用于跨所有命名空间通过 pod 获取容器映像?

(我在 WSL2 上运行 Debian,Windows 10 Enterprise。使用 WSL2 集成的 Docker 桌面,带有 minikube 的 K8S。)

1 个答案:

答案 0 :(得分:2)

来自 k8s 官方 doc

<块引用>

在 Windows 上,您必须用双引号将任何包含空格的 JSONPath 模板(不是如上所示的 bash 单引号)。这反过来意味着您必须在模板中的任何文字周围使用单引号或转义双引号。例如:kubectl get pods -o=jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.status.startTime}{'\n'}{end}"

我认为这将解决您的问题。