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 !!!