【问题标题】:kubernetes list all running pods namekubernetes 列出所有正在运行的 pod 名称
【发布时间】:2022-04-13 03:34:47
【问题描述】:

我正在寻找列出所有 pod 名称的选项

没有awk(或cut)怎么办。现在我正在使用这个命令

kubectl get --no-headers=true pods -o name | awk -F "/" '{print $2}'

【问题讨论】:

  • 其实你的命令非常好(与下面建议的解决方案相比)。您可以用 grep -Po '\/\K.+'awk 替换为keep selection after \K,也可以删除--no-headers=true
  • 我发现cut -d/ -f2awkgrep 更容易输入。

标签: kubernetes


【解决方案1】:

我个人更喜欢这种方法,因为它只依赖于 kubectl,不是很冗长,而且我们在输出中没有得到 pod/ 前缀:

kubectl get pods --no-headers -o custom-columns=":metadata.name"

【讨论】:

  • 欢迎来到 SO。如果您解释为什么您喜欢这种方法,您的回答将对更多用户更有用。
  • 确实,我已经添加了一些解释为什么我更喜欢这种方法
  • 这比通常的模板解决方案要好得多。
  • 我更喜欢这个
  • 分号是必需的,因为 custom-columns 需要一个标题,然后是一个 jsonpath 表达式。确实,json 表达式可以有一个前导点,但它似乎没有必要工作。
【解决方案2】:

您可以使用 kubectl 内置的 go 模板选项来格式化输出以仅显示每个 pod 的名称:

kubectl get pods --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'

【讨论】:

【解决方案3】:

使用-o=name 获取 pod 的名称,请参阅此cheatsheet 了解更多信息。

kubectl get pods -o=name

示例输出:

pod/kube-xyz-53kg5
pod/kube-xyz-jh7d2
pod/kube-xyz-subt9

要删除尾随 pod/,您可以使用标准 bash sed 命令

kubectl get pods -o=name | sed "s/^.\{4\}//"

示例输出:

kube-xyz-53kg5
kube-pqr-jh7d2
kube-abc-s2bt9

要获取带有特定字符串的 podname,标准 linux grep 命令

kubectl get pods -o=name | grep kube-pqr | sed "s/^.\{4\}//"

示例输出:

kube-pqr-jh7d2

使用这个名字,你可以做一些事情,比如添加别名来获取 shell 到正在运行的容器:

alias bashkubepqr='kubectl exec -it $(kubectl get pods -o=name | grep kube-pqr | sed "s/^.\{4\}//") bash'

【讨论】:

  • 其实你可以这样做:kubectl get pods -o name 然后像这样使用输出pod/mypod-xxxxxkubectl describe pod/mypod-xxxxx
  • 使用 awk 而不是 sed 可以使它与任何东西一起工作(您忽略了前 4 个字符,但是除了 pod 之外的另一个资源呢,名称更长或更短?)。使用 awk :kubectl get pods -o=name | awk -F "/" '{print $2}'
  • 正如@Brou 所指出的,resource/name 是 kubectl 到特定对象的有效格式,因此您不需要修剪 pod/ 前缀。
【解决方案4】:

您可以在输出选项中使用自定义列来获取名称和 --no-headers 选项

kubectl get --no-headers=true pods -l app=external-dns -o custom-columns=:metadata.name

【讨论】:

  • custom-columns 是一种更精简的方式。
  • 你为什么使用-l
【解决方案5】:

您可以使用-o=name 仅显示 pod 名称。例如,列出您可以使用的代理 pod:

kubectl get pods -o=name --all-namespaces | grep kube-proxy

结果是:

pod/kube-proxy-95rlj
pod/kube-proxy-bm77b
pod/kube-proxy-clc25

【讨论】:

  • OP 说他只是想摆脱领先的“pod/”部分...
【解决方案6】:

还有这个解决方案:

kubectl get pods -o jsonpath={..metadata.name}

【讨论】:

  • 这肯定是最简洁的方式,并且满足 OP 不通过其他工具进行管道的要求,但如果返回多个 pod 名称可能会出现问题。添加换行符,并将名称 + 换行符包装在范围子句中确保可读性:kubectl get pods -o jsonpath='{range.items[*]}{..metadata.name}{"\n"}{end}'
【解决方案7】:

获取命名空间中所有正在运行的 pod

kubectl get pods --field-selector=status.phase=Running --no-headers -o custom-columns=":metadata.name" 

来自viewing, finding resources

您也可以使用 -n 指定命名空间。

【讨论】:

    【解决方案8】:

    这是另一种方法:

    kubectl get pods -o=name --field-selector=status.phase=Running
    

    --field-selector=status.phase=Running 是必需的,因为问题提到了所有 running pod 名称。如果问题中的 all 适用于所有命名空间,只需添加 --all-namespaces 选项即可。

    请注意,当您可以快速访问正在运行的 pod 上的某些内容(例如日志)时,此命令非常方便:

    kubectl logs -f $(kubectl get pods -o=name --field-selector=status.phase=Running)
    

    【讨论】:

      【解决方案9】:

      jsonpath 替代

      kubectl get po -o jsonpath="{range .items[*]}{@.metadata.name}{end}" -l app=nginx-ingress,component=controller
      

      另见: more examples of kubectl output options

      【讨论】:

        【解决方案10】:

        如果要提取特定containerpod 名称,那么 一个简单的命令就可以完成所有艰苦的工作

        kubectl get pods --template '{{range .items}}{{.metadata.name}}{{end}}' --selector=app=<CONTAINER-NAME>
        

        只需将&lt;CONTAINER-NAME&gt; 替换为您的服务容器名称

        【讨论】:

          【解决方案11】:

          好吧,在我们的例子中,我们将 pod 保存在不同的命名空间中,这里是为了识别我们按照命令运行的特定 pod 或 pod 列表-

          方法一:

          1. 获取命名空间列表 kubectl get ns -A

          2. 获取一个命名空间内的所有 pod kubectl get pods -n &lt;namespace&gt;

          方法2:

          使用这个命令-

          kubectl get pods --all-namespaces
          

          【讨论】:

            【解决方案12】:

            kubectl get po --all-namespaces | awk '{if ($4 != "Running") system ("kubectl -n " $1 " delete pods " $2 " --grace-period=0 " " --force ")}'

            【讨论】:

            • 这比问题中提出的要求更多(甚至是破坏性的)。
            猜你喜欢
            • 2022-08-23
            • 1970-01-01
            • 2018-09-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-27
            • 1970-01-01
            相关资源
            最近更新 更多