列出命名空间中的所有资源

mic*_*has 28 kubernetes kubectl

我想查看命名空间中的所有资源.

这样做kubectl get all的意愿,尽管这个名字,没有列出的东西般的服务和入节点.

如果我知道我可以明确要求该类型的类型,但似乎也没有列出所有可能类型的命令.(特别kubectl get是例如不列出自定义类型).

知道如何在删除该命名空间之前显示所有资源吗?

Dan*_*Lee 25

这可能无法获得所有资源,但这可能是某人正在寻找的

kubectl get all,cm,secret,ing -A
Run Code Online (Sandbox Code Playgroud)

这似乎获得了大部分资源,以类型为前缀。

至少,它得到:

  • 服务
  • 守护进程
  • 部署
  • 复制集
  • 有状态集
  • 工作
  • 配置图
  • 秘密
  • 入口

这不会获得自定义资源,但会获得服务。

否则这会做类似的事情:

for i in `kubectl api-resources | awk '{print $1}'` do ; kubectl get $i
Run Code Online (Sandbox Code Playgroud)

运行 v1.13


rco*_*rre 17

根据此评论,列出所有资源的支持方式是遍历列出的所有api版本kubectl api-resources:

kubectl api-resources枚举集群中可用的资源类型.

这意味着你可以将它与kubectl结合使用来实际列出命名空间中每种资源类型的每个实例:

kubectl api-resources --verbs=list --namespaced -o name \
  | xargs -n 1 kubectl get --show-kind --ignore-not-found -l <label>=<value> -n <namespace>
Run Code Online (Sandbox Code Playgroud)

  • 刚刚添加 `alias k8s-show-ns=" kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n"` 作为我的 rc 文件的别名。谢谢 (5认同)
  • 使用 xargs 中的“-t”选项来找出命名空间中列出的资源名称非常有用。`xargs -t -n 1 ..` 这是 xargs 调试,将显示它正在执行的命令。它试图列出哪个 api 资源。 (5认同)
  • 我的看法略有不同:`function kgetall { kubectl api-resources --verbs=list --namespaced -o name | xargs -n1 kubectl get --show-kind --ignore-not-found "$@" }`。添加“complete -F __start_kubectl kgetall”也将使您完成此操作。 (3认同)
  • 有一个更新的答案会很好,可以排除禁止的 GVK 。 (2认同)
  • 什么对我有用 ```kubectl api-resources --verbs=list --namespaced -o name \ | xargs -n 1 kubectl get --show-kind --ignore-not-found -nl -n &lt;命名空间&gt;``` (2认同)

Mic*_* A. 11

完整的解决方案

kubectl -n <NAMESPACE> get $(kubectl api-resources --namespaced=true --no-headers -o name | egrep -v 'events|nodes' | paste -s -d, - ) --no-headers
Run Code Online (Sandbox Code Playgroud)


And*_*ong 10

如果您使用kubectl krew插件,我建议使用get-all

它几乎可以获取90%的资源。包括configmap、、、、等等...secretendpointsistio

  • 很棒的提示 - 它有包含/排除的选项,以及 \ (2认同)

小智 6

rcorre 答案的 Powershell 实现如下所示

kubectl api-resources --verbs=list --namespaced -o name | `
%{ kubectl get $_ --show-kind --ignore-not-found -l <label>=<value> -n <namespace> }
Run Code Online (Sandbox Code Playgroud)


小智 6

由于失败的Helm部署导致残留在特定名称空间中,我最终需要相同的功能。您可以在bash个人资料中添加以下功能:

function kubectlgetall {
  for i in $(kubectl api-resources --verbs=list --namespaced -o name | grep -v "events.events.k8s.io" | grep -v "events" | sort | uniq); do
    echo "Resource:" $i
    kubectl -n ${1} get --ignore-not-found ${i}
  done
}
Run Code Online (Sandbox Code Playgroud)

用法: kubectlgetall <namespace>

示例:从kafka名称空间获取所有资源:

kubectlgetall kafka


Iva*_*yev 6

rcorre 的答案是正确的,但是对于 N 个资源,它向集群发出 N 个请求(因此对于很多资源,这种方法非常慢)。此外,未找到的资源(没有实例)获取kubectl get.

有一个更好的方法来请求多个资源:

kubectl get pods,svc,secrets
Run Code Online (Sandbox Code Playgroud)

代替

kubectl get pods
kubectl get svc
kubectl get secrets
Run Code Online (Sandbox Code Playgroud)

所以答案是:

#!/usr/bin/env bash

# get all names and concatenate them with comma
NAMES="$(kubectl api-resources \
                 --namespaced \
                 --verbs list \
                 -o name \
           | tr '\n' ,)"

# ${NAMES:0:-1} -- because of `tr` command added trailing comma
# --show-kind is optional
kubectl get "${NAMES:0:-1}" --show-kind
Run Code Online (Sandbox Code Playgroud)

或者

#!/usr/bin/env bash

# get all names
NAMES=( $(kubectl api-resources \
                  --namespaced \
                  --verbs list \
                  -o name) )

# Now join names into single string delimited with comma
# Note *, not @
IFS=,
NAMES="${NAMES[*]}"
unset IFS

# --show-kind is enabled implicitly
kubectl get "$NAMES"
Run Code Online (Sandbox Code Playgroud)

  • 事实上,这两种情况都会发出相同数量的 API 请求,您可以通过在 kubectl 命令中添加 --v 6 参数来检查:``kubectl get pods,svc,secrets --v 6` `` 当您单独调用 `kubectl` 命令时,每次都会导致配置加载。在组合命令中,将请求一次配置。配置加载大约需要 10-12 毫秒。 (2认同)
  • 你是对的:API 请求的数量相同。区别在于,如果是“pods,svc,secrets”,则一个 HTTP/2 连接中有 3 个请求。但是,当您分别调用每个资源时,您将为每个资源建立新的 HTTP/2 连接。 (2认同)