名前空間内のすべてのリソースを確認したいと思います。
kubectl get all
は、名前にかかわらず、サービスやイングレスなどをリストしません。
タイプを知っていれば、その特定のタイプを明示的に要求できますが、すべての可能なタイプをリストするコマンドもありません。 (特にkubectl get
は、たとえばカスタムタイプをリストしません)。
たとえば、その名前空間を削除する前にすべてのリソースを表示する方法はありますか?
このコメント に基づいて、すべてのリソースをリストするサポートされている方法は、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>
すべての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>/+"
特定の名前空間に残された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
rcorreの答え のPowershell実装は次のようになります
kubectl api-resources --verbs=list --namespaced -o name | `
%{ kubectl get $_ --show-kind --ignore-not-found -l <label>=<value> -n <namespace> }