Los Namespaces
nos permiten aislar recursos para el uso por los distintos usuarios del cluster, para trabajar en distintos proyectos. A cada namespace
se le puede asignar una cuota y definirle reglas y políticas de acceso.
Para obtener la lista de Namespaces
ejecutamos:
kubectl get namespaces
NAME STATUS AGE
default Active 1d
kube-public Active 1d
kube-system Active 1d
default
: Espacio de nombres por defecto.kube-system
: Espacio de nombres creado y gestionado por Kubernetes.kube-public
: Espacio de nombres accesible por todos los usuarios, reservado para uso interno del cluster.
Para crear un nuevo Namespace
:
kubectl create ns proyecto1
namespace "proyecto1" created
Otra forma de crear un Namespace
es a partir de un fichero yaml con su definición:
apiVersion: v1
kind: Namespace
metadata:
name: proyecto1
Podemos ver las características del nuevo espacio de nombres:
kubectl describe ns proyecto1
Name: proyecto1
Labels: <none>
Annotations: <none>
Status: Active
No resource quota.
No resource limits.
Y su definición yaml:
kubectl get ns proyecto1 -o yaml
apiVersion: v1
kind: Namespace
metadata:
creationTimestamp: 2018-05-23T16:19:58Z
name: proyecto1
resourceVersion: "152566"
selfLink: /api/v1/namespaces/proyecto1
uid: 2306825c-5ea5-11e8-ab66-fa163e99cb75
spec:
finalizers:
- kubernetes
status:
phase: Active
Para crear un recurso en un namespace
debemos indicar el nombre del espacio de nombres en la etiqueta namespace
en su definición:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx
namespace: proyecto1
...
También podemos crearlos sin el fichero yaml:
kubectl run nginx --image=nginx -n proyecto1
deployment.apps "nginx" created
kubectl get deploy -n proyecto1
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx 1 1 1 1 15s
Y creamos el servicio asociado:
kubectl expose deployment/nginx --port=80 --type=NodePort -n proyecto1
service "nginx" exposed
kubectl get services -n proyecto1
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.107.121.169 <none> 80:30352/TCP 10s
Podemos indicar en un determinado contexto (un contexto determina el cluter y el usuario que podemos utilizar) un namespace
, de tal manera que cuando utilicemos dicho contexto se va a utilizar el namespace
indicado, y no será necesario indicarlo con la opción -n
. Para ello es necesario determinar el contexto en el que estamos trabajando:
kubectl config current-context
kubernetes-admin@kubernetes
Y a continuación modifico el contexto añadiendo el namespace que quiero usar por defecto.
kubectl config set-context kubernetes-admin@kubernetes --namespace=proyecto1
Context "kubernetes-admin@kubernetes" modified.
Al eliminar un namespace
se borran todos los recursos que hemos creado en él.
kubectl delete ns proyecto1
namespace "proyecto1" deleted