【问题标题】:'kubectl get pods' command fails on Windows, works on WSL2“kubectl get pods”命令在 Windows 上失败,适用于 WSL2
【发布时间】:2021-02-22 16:06:45
【问题描述】:

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。Docker Desktop 使用 WSL2 集成,K8S 和 minikube。)

【问题讨论】:

  • kubectl get pods --all-namespaces 有效吗?
  • 是的。我认为这是jsonpath 所特有的;如果我使用-n <namespace> 指定命名空间,则会出现错误:error parsing jsonpath '{range, unclosed action

标签: kubernetes kubectl


【解决方案1】:

来自k8s官方doc

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

我想这会解决你的问题。

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 2020-09-15
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 2021-01-29
    • 2020-09-01
    相关资源
    最近更新 更多