Namespace

Nos permite separar nuestro cluster físico en cluster virtuales separados de forma lógica. Los namespace no permiten agrupar recursos(Pods, servicios, deployments, etc.) por espacios de nombres. De esta forma podemos tener diferentes aplicaciones, usuarios, etc. trabajando en el mismo cluster de kubernetes pero trabajando en espacios de nombre separados.

Un ejemplo de uso de namespace sería dividir nuestro cluster físico en dos cluster lógicos, uno de pre y otro de pro

Kubernetes arranca con tres espacios de nombres inicialmente:

default El espacio de nombres por defecto para aquellos objetos que no especifican ningún espacio de nombres

kube-system El espacio de nombres para aquellos objetos creados por el sistema de Kubernetes

kube-public Este espacio de nombres se crea de forma automática y es legible por todos los usuarios (incluyendo aquellos no autenticados)

<sxh yaml> apiVersion: v1 kind: Namespace metadata:

name: development
labels:
name: desarrollo
</sxh>

Comandos

Crear un namespace <sxh>kubectl create namespace <nombrenamespace></sxh> <sxh>kubectl get namespaces</sxh>

ver lo objetos de un namespace <sxh>kubectl get all -n <nombrenamespace></sxh>

Establecer un namespace como predeterminado

<sxh>kubectl config set-context –current –namespace=default</sxh>

Especificar el namespace para un pod

<sxh>kubectl apply -f pod.yaml –namespace=<nombre_namespace></sxh>

Ejemplo

https://github.com/ricardoandre97/k8s-resources/blob/master/namespaces/envs-ns.yaml <sxh yaml> — apiVersion: v1 kind: Namespace metadata:

name: dev #crea un namespace de nombre dev y con la etiqueta dev
labels:
name: dev

— apiVersion: v1 kind: Namespace metadata:

name: prod #crea un namespace de nombre prod y con la etiqueta prod
labels:
name: prod

— apiVersion: apps/v1 kind: Deployment metadata:

name: deployment-dev
namespace: dev # indica en que namespace debe de crear el deployment
labels:
app: front

spec:

replicas: 1
selector:
matchLabels:
app: front
template:
metadata:
labels:
app: front
spec:
containers:
- name: nginx
image: nginx:alpine

— apiVersion: apps/v1 kind: Deployment metadata:

name: deployment-prod
namespace: prod # indica en que namespace debe de crear el deployment
labels:
app: back

spec:

replicas: 5
selector:
matchLabels:
app: back
template:
metadata:
labels:
app: back
spec:
containers:
- name: nginx
image: nginx:alpine

</sxh>

Referencias

https://kubernetes.io/es/docs/concepts/overview/working-with-objects/namespaces/