Kubernetes - Tenant

Kubernetes supports multiple virtual clusters backed by the same physical cluster. These virtual clusters are called namespaces.

Namespaces are intended for use in environments with many users spread across multiple teams, or projects.

Namespaces are a way to divide cluster resources between multiple users.

root@kubemaster:/# kubectl get namespace

NAME              STATUS   AGE

default           Active   5d22h

kube-node-lease   Active   5d22h

kube-public       Active   5d22h

kube-system       Active   5d22h

root@kubemaster:/# kubectl create namespace production

namespace/production created

root@kubemaster:/# kubectl create namespace development

namespace/development created

root@kubemaster:/# kubectl get namespace

NAME              STATUS   AGE

default           Active   5d22h


development       Active   4s

kube-node-lease   Active   5d22h

kube-public       Active   5d22h

kube-system       Active   5d22h

production        Active   13s

root@kubemaster:/#

Now we creating a deployment under namespace.

root@kubemaster:/kubernetes# kubectl apply --namespace=production -f nginx_1.14.2.yml

deployment.apps/nginx-deployment created

root@kubemaster:/kubernetes# kubectl apply --namespace=development -f nginx_1.14.2.yml

deployment.apps/nginx-deployment created

root@kubemaster:/kubernetes#


root@kubemaster:/kubernetes# kubectl get pods

No resources found in default namespace.

root@kubemaster:/kubernetes#


By default pods are created in "DEFAULT" namespace.


root@kubemaster:/kubernetes# kubectl get pods --namespace=production

NAME                                READY   STATUS    RESTARTS   AGE

nginx-deployment-6b474476c4-dbxnn   1/1     Running   0          80s

nginx-deployment-6b474476c4-tqfxm   1/1     Running   0          80s

nginx-deployment-6b474476c4-zvmgk   1/1     Running   0          80s

root@kubemaster:/kubernetes# kubectl get pods --namespace=development

NAME                                READY   STATUS    RESTARTS   AGE

nginx-deployment-6b474476c4-8qt82   1/1     Running   0          78s

nginx-deployment-6b474476c4-bscch   1/1     Running   0          78s

nginx-deployment-6b474476c4-n8tjv   1/1     Running   0          78s

root@kubemaster:/kubernetes#


How to switch between the namespace:

root@kubemaster:/kubernetes# kubectl config set-context --current --namespace=production

Context "kubernetes-admin@kubernetes" modified.

root@kubemaster:/kubernetes# kubectl get pods

NAME                                READY   STATUS    RESTARTS   AGE

nginx-deployment-6b474476c4-dbxnn   1/1     Running   0          4m

nginx-deployment-6b474476c4-tqfxm   1/1     Running   0          4m

nginx-deployment-6b474476c4-zvmgk   1/1     Running   0          4m

root@kubemaster:/kubernetes# 


root@kubemaster:/kubernetes# kubectl config set-context --current --namespace=development

Context "kubernetes-admin@kubernetes" modified.

root@kubemaster:/kubernetes# kubectl get pods

NAME                                READY   STATUS    RESTARTS   AGE

nginx-deployment-6b474476c4-8qt82   1/1     Running   0          4m36s

nginx-deployment-6b474476c4-bscch   1/1     Running   0          4m36s

nginx-deployment-6b474476c4-n8tjv   1/1     Running   0          4m36s

root@kubemaster:/kubernetes#

Above command will dynamically update the namespace.

contexts:

- context:

cluster: kubernetes

namespace: development

user: kubernetes-admin

name: kubernetes-admin@kubernetes

current-context: kubernetes-admin@kubernetes

Available Commands:

  current-context Displays the current-context

  delete-cluster  Delete the specified cluster from the kubeconfig

  delete-context  Delete the specified context from the kubeconfig

  delete-user     Delete the specified user from the kubeconfig

  get-clusters    Display clusters defined in the kubeconfig

  get-contexts    Describe one or many contexts

  get-users       Display users defined in the kubeconfig

  rename-context  Renames a context from the kubeconfig file.

  set             Sets an individual value in a kubeconfig file

  set-cluster     Sets a cluster entry in kubeconfig

  set-context     Sets a context entry in kubeconfig

  set-credentials Sets a user entry in kubeconfig

  unset           Unsets an individual value in a kubeconfig file

  use-context     Sets the current-context in a kubeconfig file

  view            Display merged kubeconfig settings or a specified kubeconfig file


Usage:

root@kubemaster:/kubernetes# kubectl config set-context --current --namespace=production

Context "kubernetes-admin@kubernetes" modified.

root@kubemaster:/kubernetes# kubectl get pods

NAME                                READY   STATUS    RESTARTS   AGE

nginx-deployment-6b474476c4-dbxnn   1/1     Running   0          6m27s

nginx-deployment-6b474476c4-tqfxm   1/1     Running   0          6m27s

nginx-deployment-6b474476c4-zvmgk   1/1     Running   0          6m27s

root@kubemaster:/kubernetes# 

contexts:

- context:

cluster: kubernetes

namespace: production

user: kubernetes-admin

name: kubernetes-admin@kubernetes

current-context: kubernetes-admin@kubernetes

root@kubemaster:/kubernetes# kubectl config set-context --current --namespace=kubernetes-admin@kubernetes

Context "kubernetes-admin@kubernetes" modified.

root@kubemaster:/kubernetes# kubectl get pods

No resources found in kubernetes-admin@kubernetes namespace.

root@kubemaster:/kubernetes#


Comments

Popular posts from this blog

SRE/DevOps Syllabus

AWS Code Commit - CI/CD Series Part 1

Docker - Preventing IP overlapping