Listing all resources in a namespace
I ended up needing this same functionality due to failed Helm deployments that left remnants in a specific namespace. Here's a function you can put in your bash profile:
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
if [ -z "$1" ]
then
kubectl get --ignore-not-found ${i}
else
kubectl -n ${1} get --ignore-not-found ${i}
fi
done
}
Usage: kubectlgetall <namespace>
Example: get all resources from the kafka
namespace:
kubectlgetall kafka
This may not get all resources but it may be what someone is looking for
kubectl get all,cm,secret,ing -A
This seems to get most of the resources, prefixed with the type.
At least, it gets:
- pod
- service
- daemonset
- deployment
- replicaset
- statefulset
- job
- configmap
- secret
- ingress
This doesn't get custom resources but does get services.
Else this does something similar:
for i in `kubectl api-resources | awk '{print $1}'`; do kubectl get $i; done
Running v1.13
Answer of rcorre is correct but for N resources it make N requests to cluster (so for a lot of resources this approach is very slow). Moreover, not found resources (that have not instances) are very slow for getting with kubectl get
.
There is a better way to make a request for multiple resources:
kubectl get pods,svc,secrets
instead of
kubectl get pods
kubectl get svc
kubectl get secrets
So the answer is:
#!/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
or
#!/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"
Based on this comment , the supported way to list all resources is to iterate through all the api versions listed by kubectl api-resources
:
kubectl api-resources enumerates the resource types available in your cluster.
this means you can combine it with kubectl get to actually list every instance of every resource type in a namespace:
kubectl api-resources --verbs=list --namespaced -o name \
| xargs -n 1 kubectl get --show-kind --ignore-not-found -l <label>=<value> -n <namespace>