Open In App

Kubernetes – Namespaces

Last Updated : 19 Jul, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Pre-requisite:- Kubernetes

Kubernetes Namespace is a mechanism that enables you to organize resources. It is like a virtual cluster inside the cluster. A namespace isolates the resources from the resources of other namespaces. For example, You need to have different names for deployments/services in a namespace but you can have the same name for deployment in two different namespaces.

Initial Namespaces

  • kube-system: System processes like Master and kubectl processes are deployed in this namespace; thus, it is advised not to create or modify the namespace.
  • kube-public: This namespace contains publicly accessible data like a configMap containing cluster information.
  • kube-node-lease: This namespace is the heartbeat of nodes. Each node has its associated lease object. It determines the availability of a node.
  • default: This is the namespace that you use to create your resources by default.

Although whatever resources you create will be created in the default namespace but you can also create your own new namespace and create resources there.

Note: Avoid creating namespaces with the prefix Kube-, since it is reserved for Kubernetes system namespaces and you should not try to modify them.

kubectl get namespaces

Working with Namespaces

Namespaces in kubernetes are a way to create and organize virtual clusters within physical clusters where we can isolate a group of resources within a single cluster. Namespace helps to organize resources such as pods, services, and volumes within the cluster. Workloads of applications and authorization can be managed by using kubernetes namespaces.

Viewing Namespaces

There few commands which are used while viewing the namespaces as mentioned as follows.

List all the Namespaces defined:

In real-time situations, you will find no.of namespaces that will be used for different applications to list all the namespaces which are present in the cluster you can use the following command.

kubectl get namespaces

Describe a Namespace:

Use the following command to see more specific information about a particular namespace.

kubectl describe namespace my-namespace

In the above command, “kubectl is the command line interface in place of “my-namespace” you can use the required namespace you want. You will get detailed information about the namespace such as the namespace name, creation timestamp, and labels associated with the namespace.

To view no.of resources present in the Namespace:

You can view all the resources present in the particular namespace by using the following command.

kubectl get pods --namespace=my-namespace

Label the Namespace:

You can add the label to an existing namespace which is further used to help while creating resources.

kubectl label namespaces <namespace> <labelKey>=<value>

In the place of <namespace> give the name of the namespace which you want to label and key-value pair format.

Setting The Namespace For A Request 

Setting up a namespace in kubernetes can be done in two ways one is the imperative way and another is and declarative way means by using the command line of kubectl and by writing a yaml file. as explained in the following commands and code

Imperative way or command line of kubectl:

kubectl get pods --namespace=my-namespace

This command will fetch the pods from the specified namespace.

Declarative way or yaml file:

apiVersion: v1
kind: Namespace
metadata:
name: <NameSpaceName>
lables: # Labels are key value pairs(Metadata)
<key>: <value>
<key> <value>

Setting The Namespace Preference

Setting the namespace preference will make the default namespace for API to interact with the cluster. After setting up namespace preferences you can deploy the resource in that particular namespace where you manage all the resources without any confusion. The namespace preference is typically configured on the Kubernetes API server and can be set to one of the following options:

  1. Cluster-wide default namespace.
  2. User’s default namespace.

To set up namespace preference using the command-line tool kubectl can be done by using the following command. This will be my-namespace as a default namespace.

kubectl config set-context --current --namespace=my-namespace

Namespaces and DNS 

The namespace will isolate the services which need to have limited authorization and DNS will expose the application which you have deployed in the form of containers in some cases bother DNS and namespaces will work together. Kubernetes will assign the DNS to the namespace where our resources need to be exposed with the following naming convention.

<service-name>.<namespace-name>.svc.cluster.local

<service-name>: indicates The name of the service associated with the resource.;<namespace-name>: The name of the namespace in which the resource resides.

Kubernetes Namespace Yaml

Kubernetes namespace yaml file is used to create the namespaces in Kubernetes where you can isolate the resources which are going to be deployed in the Kubernetes cluster.

apiVersion: v1

kind: Namespace

metadata:

name: <NameSpaceName>

lables: # Labels are key value pairs(Metadata)

<key>: <value>

<key> <value>

Example:

By the following yaml, the name of the namespace will be “test-ns” and the key-value pair will be “team: testing team”

apiVersion: v1
kind: Namespace
metadata:
name: test-ns
labels:
team: testingteam

Create New Namespaces

You can create your namespace by using the command.

$ kubectl create namespace your-namespace

create namespace

As you can see we have successfully created namespace gfg.

Creating Component in a Namespace:

To create a component in a namespace you can either give the –namespace flag or specify the namespace in the configuration file.

Method 1: Using –namespace flag

$ kubectl apply -f your_config.yaml --namespace=your-namespace

then you can check resources in your namespace using kubectl get and specify namespace using -n

using namespace

Create Pods In Each Namespace

Instead of specifying a namespace using the –namespace flag you can specify your namespace initially in your config file only.

nginx file

and then use the command.

$ kubectl apply -f your_config_file.yaml

kubectl apply

Benefits of Using Kubernetes Namespaces

  1. Isolation of resources for different teams: Namespace will isolate the resources which are going to be used in the Kubernetes cluster. Namespace in Kubernetes is useful for security, performance, or organizational reasons. A namespace can be created for different teams who are going to work on the Kubernetes cluster such as developers teams, testing teams, and other teams.
  2. RBAC: Namespaces can increase the security of resources that are deployed by using role-based access control. For example, if the resources are deployed in the dev namespace by using RABAC we control the permissions to the developer team members in that dev namespace in the Kubernetes.
  3. Organization of resources: In a Kubernetes cluster it is very important to maintain the resources which are deployed in the cluster in an organized manner it can be done by using Kubernetes namespaces where you can track and manage the resource which is deployed.
  4. Increase Performance: Resources that are deployed in the Kubernetes cluster are isolated from each other which will help to reduce the burden on the resources like CPU and memory.

FAQs On Kubernetes Namespaces

1. What is a Namespace in Kubernetes?

Namespace is a virtual cluster inside the kubernetes cluster.

2. What is the Role of the Namespace?

Namespace will logically isolate the objects of kubernets cluster.



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads