Get All Resources in a Namespace in Kubernetes
Namespaces in Kubernetes act as virtual clusters within a physical cluster. They provide a way to separate different environments (such as development, testing, and production) or separate users or teams that are working on shared clusters.
In large Kubernetes clusters, there are often dozens or hundreds of resources (pods, services, config maps, secrets, etc.) running simultaneously. When troubleshooting, auditing, or managing resources, it’s useful to get an overview of everything running within a particular namespace.
While you could list all resources in a particular namespace using this:
kubectl get all -n <namespace>
There is a little more to it and I'll share that in this tutorial.
Listing all resources in a namespace
The simplest way to get all resources in a specific namespace is by using the kubectl get all
command. This will list pods, services, deployments, replica sets, and other essential resources.
Basic syntax:
kubectl get all -n <namespace>
For example, if you want to list all resources in the development namespace, the command would be:
kubectl get all -n development
Output:
NAME READY STATUS RESTARTS AGE
pod/node-app-56b7db8f87-n5mfw 1/1 Running 0 2d
pod/node-app-56b7db8f87-rkd8v 1/1 Running 0 2d
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/node-app-svc ClusterIP 10.104.183.188 <none> 80/TCP 2d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/node-app 2/2 2 2 2d
NAME DESIRED CURRENT READY AGE
replicaset.apps/node-app-56b7db8f87 2 2 2 2d
This command retrieves all the pods, services, deployments, and replica sets within the specified namespace.
Listing specific resource types in a namespace
If you want to focus on a specific type of resource within the namespace (e.g., only pods or services), you can modify the kubectl get
command.
To list only pods, use the below syntax:
kubectl get pods -n <namespace>
For example, to list only pods in a development namespace, run:
kubectl get pods -n development
Output:
NAME READY STATUS RESTARTS AGE
pod/node-app-56b7db8f87-n5mfw 1/1 Running 0 2d
pod/node-app-56b7db8f87-rkd8v 1/1 Running 0 2d
To list only services, run the following command.
kubectl get svc -n development
Output:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
node-app-svc ClusterIP 10.104.183.188 <none> 80/TCP 2d
This flexibility helps when you only need to troubleshoot or examine a particular type of resource.
Listing resources with more details
To get more information about resources in a namespace, you can use the -o wide
flag, which provides additional details such as the node where the resource is running and its IP addresses.
For example, to get more detail information of development namespace, run:
kubectl get all -n development -o wide
Output:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
pod/node-app-56b7db8f87-n5mfw 1/1 Running 0 2d 192.168.1.10 worker-node1 <none>
pod/node-app-56b7db8f87-rkd8v 1/1 Running 0 2d 192.168.1.11 worker-node2 <none>
This output is useful for debugging networking issues or understanding which node your pods are running on.
Listing custom resources in a namespace
If your cluster uses custom resources (CRDs), you can also list them using kubectl. Custom resources could be specific to your environment or third-party operators installed in your cluster.
For example, if you are using a custom resource called redis, you can list all redis resources in a namespace using:
kubectl get redis -n <namespace>
Make sure to replace <namespace>
with the actual namespace name and redis
with your custom resource name.
Getting resource usage information
To get resource usage (CPU and memory) for resources in a namespace, you can use the kubectl top
command. This is helpful for monitoring the resource consumption of your pods.
For example, to get resource usage information of all pods within development namespace, run:
kubectl top pod -n development
Output:
NAME CPU(cores) MEMORY(bytes)
node-app-56b7db8f87-n5mfw 50m 100Mi
node-app-56b7db8f87-rkd8v 45m 95Mi
This command provides you with a real-time snapshot of CPU and memory usage for each pod in the namespace.
Filtering output with label selectors
If you want to filter resources in a namespace based on labels, you can use the -l
flag with kubectl get
. Labels allow you to organize and select resources based on specific attributes.
For example, if you want to list all pods with the label app=node-app, you would run:
kubectl get pods -n development -l app=node-app
Output:
NAME READY STATUS RESTARTS AGE
node-app-56b7db8f87-n5mfw 1/1 Running 0 2d
node-app-56b7db8f87-rkd8v 1/1 Running 0 2d
This is useful when you're managing multiple resources with different labels and only want to focus on a subset.
Conclusion
Understanding how to list and query resources within a namespace is crucial for managing Kubernetes clusters.
By using the kubectl get
command along with its various flags and options, you can retrieve comprehensive information about all resources within a namespace, filter by specific resource types, monitor resource usage, and troubleshoot effectively.