DEV Community

Shivlal Sharma
Shivlal Sharma

Posted on

Demystifying Namespace Resources in Kubernetes: A Short Guide

Kubernetes has a vast number of resources, like deployments, replicasets, services, etc. Namespaces are also one of them and are most useful when you want to isolate your workloads based on environments, teams, projects, etc.

Image description

In simple language, namespaces are a kind of isolated environment in which you group resources like pods, replica sets, deployments, services, configmaps, etc.

When you create a Kubernetes resource without specifying a namespace, it will be created in the default namespace.

You can change it by applying the --namespace=development flag to every resource creation.

Also, if you don't want to use the above flag on every resource creation, you can switch from the default namespace to any random namespace by setting your current context to that random namespace using the kubectl config set-context --current --namespace=random command and creating your resources there.

Let's see some action on namespaces:

Your Alt Text

  • Check how many namespaces are on the cluster:
$ kubectl get namespaces
>>
NAME              STATUS   AGE
kube-system       Active   48m
kube-public       Active   48m
kube-node-lease   Active   48m
default           Active   48m
finance           Active   34m
marketing         Active   34m
dev               Active   34m
prod              Active   34m
manufacturing     Active   34m
research          Active   34m
Enter fullscreen mode Exit fullscreen mode

You can also use shorthand ns instead of the full resource name.

  • Check the pods running in a specific namespace.
$ kubectl get pods --namespace=research
>>
NAME    READY   STATUS             RESTARTS         AGE
dna-2   0/1     CrashLoopBackOff   12 (4m28s ago)   41m
dna-1   0/1     CrashLoopBackOff   12 (4m9s ago)    41m
Enter fullscreen mode Exit fullscreen mode
  • Run a specific pod in a specific namespace.
$ kubectl run redis --image=redis --namespace=finance
>>
pod/redis created
Enter fullscreen mode Exit fullscreen mode

If you want to create a pod using the YAML definition file, you can define the namespace name in the metadata section.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  namespace: my-namespace
spec:
  containers:
  - name: nginx
    image: nginx
Enter fullscreen mode Exit fullscreen mode
  • does one pod running in namespace A access the other pod running in namespace B?

pods can communicate with other pods residing in different namespaces using their Fully Qualified Domain Names (FQDNs), like pod-a can talk with pod-b using it's FQDN, pod-b.namespace.svc.cluster.local. The same works for pod-b as well.

Summary

Kubernetes namespaces provide a powerful tool for organising and isolating workloads within a cluster.We will see more about namespaces in advance in upcoming blogs.

Top comments (0)