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

时间:2017-12-07 09:15:45

标签: kubernetes kubectl

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

尽管有名称,但kubectl get all仍然不会列出服务和入口等内容。

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

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

10 个答案:

答案 0 :(得分:15)

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

kubectl get all,cm,secret,ing -A

这似乎获得了大多数资源,并以类型作为前缀。

至少,它得到:

  • pod
  • 服务
  • daemonset
  • 部署
  • 复制包
  • statefulset
  • 工作
  • configmap
  • 秘密
  • ingress

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

否则,它会执行类似的操作:

for i in `kubectl api-resources | awk '{print $1}'` do ; kubectl get $i

运行v1.13

答案 1 :(得分:10)

基于this comment,列出所有资源的受支持方式是遍历kubectl api-resources列出的所有api版本:

  

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

     

这意味着您可以将其与kubectl get结合使用以实际列出名称空间中每种资源类型的每个实例:

kubectl api-resources --verbs=list --namespaced -o name \
  | xargs -n 1 kubectl get --show-kind --ignore-not-found -l <label>=<value> -n <namespace>

答案 2 :(得分:3)

如果您使用的是kubectl krew插件,我建议您使用get-all。它可以获得近90%的资源。包括configmap,secret,端点,istio等

答案 3 :(得分:1)

所有kubernetes对象都存储在etcd中。

所有对象都以下列方式存储在ETCD v3中:

/registry/<object_type>/<namespace>/<name>

我建议直接从etcd v3获取某些命名空间的所有资源列表:

ETCDCTL_API=3 etcdctl --endpoints=<etcd_ip>:2379 get / --prefix --keys-only | grep -E "^/\w+/\w+/<namespace>/+"

答案 4 :(得分:1)

由于失败的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
}

用法:kubectlgetall <namespace>

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

kubectlgetall kafka

答案 5 :(得分:1)

这不是100%的解决方案,但对我来说,以下工作

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

然后打电话

kgetall='kubectl get namespace,replicaset,secret,nodes,job,daemonset,statefulset,ingress,configmap,pv,pvc,service,deployment,pod --all-namespaces'

但是显然我希望这种行为来自

kgetall

首先。

答案 6 :(得分:0)

rcorre's answer的Powershell实现看起来像

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

答案 7 :(得分:0)

Answer of rcorre是正确的,但是对于N个资源,它会发出N个集群请求(因此,对于很多资源,此方法非常慢)。此外,使用kubectl get获取找不到实例的资源(没有实例)非常慢。

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

kubectl get pods,svc,secrets

代替

kubectl get pods
kubectl get svc
kubectl get secrets

所以答案是:

#!/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

#!/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"

答案 8 :(得分:0)

仅涵盖一些基础知识:

  • 可以使用 kubectl get 命令获取资源。
  • 可以使用 -n [NAMESPACE]--namespace [NAMESPACE] 标志按命名空间过滤资源。
    • 为简洁起见,我将在以下示例中使用 -A(与 --all-namespaces 相同)标志。

其他一些答案显示了如何列出可用资源类型:

kubectl api-resources --verbs=list -o name

考虑到这一点,我们可以获得所有资源,利用 xargssed

kubectl get "all,$(kubectl api-resources --verbs=list -o name | xargs | sed 's/ /,/g')" -A

xargs 的替代方法是使用 tr

kubectl get "$(kubectl api-resources --verbs=list -o name | tr '\n' ',')all" -A

答案 9 :(得分:-3)

对我来说,检索名称空间所有内容的简单方法是 kubectl全部获取-n