Primeros pasos con Kubernetes (X):Namespaces
Vamos a ejecutar previamente unos comandos que nos permitirán crear 4 namespaces distintos y desplegar aplicaciones en cada uno de ellos. A lo largo del post se irá concretando que es cada elemento.
export PROJECT=k8slabs-142707
# Generate container
sudo docker build -f ./apps/hello/v1/Dockerfile -t gcr.io/$PROJECT/hello:v1 ./apps/hello/v1
# Deploy container
sudo gcloud docker push gcr.io/$PROJECT/hello:v1
# Create namespaces
kubectl create -f ./namespaces/namespaces.yml
# Create deployment
kubectl create -f ./apps/hello/deployment.yml --namespace=dev1
kubectl create -f ./apps/hello/deployment.yml --namespace=dev2
kubectl create -f ./apps/hello/deployment.yml --namespace=pre1
kubectl create -f ./apps/hello/deployment.yml --namespace=pre2
# Create service
kubectl create -f ./apps/hello/service.yml --namespace=dev1
kubectl create -f ./apps/hello/service.yml --namespace=dev2
kubectl create -f ./apps/hello/service.yml --namespace=pre1
kubectl create -f ./apps/hello/service.yml --namespace=pre2
Todos los ejemplos que hemos realizado hasta el momento se han desplegado sobre el namespace “default” que proporciona Kubernetes. Un namespace es un cluster virtual sobre el cluster físico sobre el que trabajamos, de manera que permite tener una separación total namespaces y evitar conflictos por colisiones como por ejemplo elementos con el mismo nombre.
Todos los elementos que tenemos en un namespace han de tener un nombre único, por lo que no podemos desplegar dos aplicaciones con el mismo nombre. En cluster con muchos usuarios, es una buena práctica crear namespaces por ámbito aplicativo para reducir el impacto de afectaciones entre aplicaciones, como por ejemplo tener un Service que balancee entre instancias de dos aplicaciones, pq estas tienen los mismos labels y el Service casualmente tiene como node selector esos labels compartidos.
Otro uso vital para la creación de namespaces es gestionar multiples entornos (DEV, INT, QA…) dentro de un mismo cluster. Obviamente se desplegarán las mismas aplicaciones para cada entorno y en este caso si se desplegaran todas sobre el namespace “default” daría errores por intentar desplegar varios elementos con el mismo nombre. Para ello, crearíamos un namespace por cada entorno.
Para profundizar más en las características de los namespaces se puede consultar los siguientes enlaces::
http://kubernetes.io/docs/user-guide/namespaces/
http://kubernetes.io/docs/admin/namespaces/walkthrough/
http://kubernetes.io/docs/admin/namespaces/
Para crear los namespaces los configuraremos en un fichero de YAML. Como podemos ver a continuación hemos definido dentro del YAML 4 namespaces (dev1, dev2, pre1, pre2) y hemos lanzado en el script de prearranque la creación de dichos namespaces.
apiVersion: v1
kind: Namespace
metadata:
name: dev1
labels:
environment: development
line: 1
---
apiVersion: v1
kind: Namespace
metadata:
name: dev2
labels:
environment: development
line: 2
---
apiVersion: v1
kind: Namespace
metadata:
name: pre1
labels:
environment: preproduction
line: 1
---
apiVersion: v1
kind: Namespace
metadata:
name: pre2
labels:
environment: preproduction
line: 2
En el script de prearranque hemos creado el mismo Deployment y Service en cada uno de los namespaces creados. Si vemos a continuación el script de verificación veremos como se ha realizado la distribución.
$ kubectl get namespaces
NAME STATUS AGE
default Active 3h
dev1 Active 2m
dev2 Active 1m
kube-system Active 3h
pre1 Active 1m
pre2 Active 1m
$ kubectl get po --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
dev1 hello-991347669-1fi65 1/1 Running 0 2m
dev2 hello-991347669-knqk2 1/1 Running 0 2m
kube-system fluentd-cloud-logging-gke-bs-default-pool-28f5092a-chrz 1/1 Running 0 3h
kube-system fluentd-cloud-logging-gke-bs-default-pool-28f5092a-j9g5 1/1 Running 0 3h
kube-system fluentd-cloud-logging-gke-bs-default-pool-28f5092a-y4wc 1/1 Running 0 3h
kube-system heapster-v1.2.0-4114705363-uxd17 2/2 Running 0 3h
kube-system kube-dns-v19-90l0i 3/3 Running 0 3h
kube-system kube-dns-v19-l8gaz 3/3 Running 0 3h
kube-system kube-proxy-gke-bs-default-pool-28f5092a-chrz 1/1 Running 0 3h
kube-system kube-proxy-gke-bs-default-pool-28f5092a-j9g5 1/1 Running 0 3h
kube-system kube-proxy-gke-bs-default-pool-28f5092a-y4wc 1/1 Running 0 3h
kube-system kubernetes-dashboard-v1.4.0-sgy7u 1/1 Running 0 3h
kube-system l7-default-backend-v1.0-7t7sf 1/1 Running 0 3h
pre1 hello-991347669-88lml 1/1 Running 0 2m
pre2 hello-991347669-6g4ll 1/1 Running 0 2m
No hay comentarios
Publicar un comentario