web-dev-qa-db-ja.com

名前空間内のすべてのリソースのリスト

名前空間内のすべてのリソースを確認したいと思います。

kubectl get allは、名前にかかわらず、サービスやイングレスなどをリストしません。

タイプを知っていれば、その特定のタイプを明示的に要求できますが、すべての可能なタイプをリストするコマンドもありません。 (特にkubectl getは、たとえばカスタムタイプをリストしません)。

たとえば、その名前空間を削除する前にすべてのリソースを表示する方法はありますか?

23
michas

このコメント に基づいて、すべてのリソースをリストするサポートされている方法は、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>
17
rcorre

すべての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>/+"
2
Nickolay

特定の名前空間に残された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

1
Jeremy Glover

rcorreの答え のPowershell実装は次のようになります

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