Working with Namespaces in Kubernetes

Working with Namespaces in Kubernetes

What are Namespaces in Kubernetes?

Namespaces are used to create isolated environments for resources. Each Namespace is like a separate cluster within the same physical cluster.

By default, these namespaces are present in the K8S cluster:

f you create something without mentioning the namespace, it will be created in the default namespace.

Why do we use the namespaces concept in K8S?

Let's take a scenario, In an organization, multiple applications are going on, if multiple applications are on the same cluster without any isolation they affect each other and it's too difficult to manage, and can't create the cluster for each service. It was too much expensive.

To overcome this problem, the Namespaces concept comes into the field. It provided an isolated environment for each service. so they are not affected by each other. and if some issue comes in one microservice it's easy to resolve.

Features Provided by Namespaces:

a) Logical Isolation: Namespaces provide a way to logically isolate resources within a Kubernetes cluster. This allows different teams or projects to use the same cluster without interfering with each other.

b) Resource Quotas: You can set resource quotas on namespaces to limit the amount of CPU, memory, and other resources that can be consumed by the objects within that namespace.

c) Object Scope: Kubernetes objects (such as pods, services, and replication controllers) belong to a namespace. This means that you can organize and manage your resources within a namespace, and the same object names can be reused in different namespaces.

d) RBAC (Role-Based Access Control): RBAC policies can be applied at the namespace level, allowing you to control access to resources based on roles and role bindings within a specific namespace.

e) Limit Range: Limit ranges can be set on namespaces to control resource limits for certain resource types within that namespace.

Kubernetes Namespaces Command:

a) Create a Namespace

kubectl create namespace <namespace-name>

b) Get Namespaces

kubectl get namespace 
or
kubectl get ns

c) Switch Context to a namespaces

kubectl config set-context --current --namespace=<namespace-name>

d) Describe namespaces

kubectl describe ns <namespace-name>

e) Delete a namespace

kubectl delete namespace <namespace-name>

f) Apply resource configuration to a namespace

kubectl apply -f <resource-file.yaml> -n <namespace-name>

❄Tasks:

Create a namespace. Verify it's created then create a deployment in the newly created namespace.

Step 1: Create a new namespace and Verify it.

kubectl create ns app-deploy
kubectl get ns

Step 2: Create deployment.yaml file and Verify if it's created or not Successfully.

vi deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-deployment
  namespace: app-deploy
spec:
 replicas: 2
 selector:
   matchLabels:
    app: django-app
 template:
   metadata:
     name: app-deployment
     labels:
       app: django-app
   spec:
     containers:
       - name: app-deployment
         image: chanchal8765/Django-docker
kubectl get deployment -n app-deploy
kubectl get pods -n app-deploy

In the above image notice, that if you get deployment in the default namespace it's not present because you created it in a particular namespace.

Set Limit Ranges of resources on the namespace and Verify whether it works or not.

Step 1: Create a limit-range file and pod. yaml according to resources.

vi limitrange.yaml
apiVersion: v1
kind: LimitRange
metadata:
 name: namespace-limits
spec:
 limits:
  - type: Container
    max:
     memory: 512Mi
     cpu: 500m
    min:
     memory: 50Mi
     cpu: 50m
vi pod.yaml
apiVersion: v1
kind: Pod
metadata:
 name: limit-range-pod
spec:
 containers:
   - name: limit-range-pod
     image: chanchal8765/django-docker
     resources:
       requests:
         memory: 64Mi
         cpu: 50m
kubectl get pods

Note: if you take resources more than limit pods going to the pending state.

Congratulations!! you successfully created a new namespace and deployed your first application.

In the Next Article, we will go deep down in K8S Service.......

Thank you for giving your precious time to read this blog/article and if any suggestions or improvements are required on my blogs feel free to connect on LinkedIn Unnati Gupta. Happy Learning !!!