Ya escribí la primera parte de esta trilogía sobre Kubernetes. Me he pensado mucho hacer estos artículos y me estoy pensando muy muy bien hacer otro en el que atacaré mucho a una de las tecnologías que más se están utilizando hoy en día. Pero no nos detengamos más, vamos con este artículo donde básicamente vamos a ver cómo implementar Kubernetes.
Ya tenemos instalado todo lo necesario, por lo que solamente tenemos que configurar contenedores y el propio orquestador que es el propio Kubernetes. (Si veo que hay muchas dudas, dedicaré un único artículo a explicar Kubernetes).
docker run -d --restart=always -e DOMAIN=cluster --name nginx-app -p 80:80 nginx
Lo primero que vamos a hacer será lanzar un contenedor de Docker, por ejemplo un nginx. El output que se espera es algo como esto.
3026290696b3fa960f0280e288b2c5f8a2e1be7ea8cd105c2186e78d97d5c357
Esta es información propia del contenedor.
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3026290696b3 nginx "nginx -g 'daemon of…" 14 minutes ago Up 14 minutes 0.0.0.0:80->80/tcp nginx-app
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3026290696b3 nginx "nginx -g 'daemon of…" 14 minutes ago Up 14 minutes 0.0.0.0:80->80/tcp nginx-app
Con un docker ps veremos nuestros contenedores que hayamos creado.
kubectl run --image=nginx nginx-app --port=80 --env="DOMAIN=cluster"
Es la hora de Kubernetes y de lanzarlo con la imagen del nginx y el clúster. El output que esperamos debe ser similar a el siguiente:
deployment.apps/nginx-app created
Ahora, si habéis utilizado Docker, sabréis que muchas veces teníamos que hacer un expose de los puertos
kubectl expose deployment nginx-app --port=80 --name=nginx-http
El output que esperamos debe ser como el siguiente:
service/nginx-http exposed
Ahora ya lo tenemos casi todo, vamos a obtener los pods que tenemos
kubectl get pods
La instrucción en Kubernetes es muy sencilla, y la salida será más o menos parecida a esta
NAME READY STATUS RESTARTS AGE
hello-minikube-856979d68c-v8rw5 1/1 Running 1 4d
nginx-app-54947cf746-hp99r 1/1 Running 0 3m33s
hello-minikube-856979d68c-v8rw5 1/1 Running 1 4d
nginx-app-54947cf746-hp99r 1/1 Running 0 3m33s
Ya lo que tenemos es un orquestador que nos devolverá salidas muy similares a las que podríamos obtener con docker. Por ejemplo, esta es la forma de obtener logs
kubectl logs -f nginx-app-54947cf746-hp99r
Y así obtenemos más información sobre nuestro clúster
kubectl cluster-info
El output debe ser muy similar a esto
Kubernetes master is running at https://192.168.99.101:8443
KubeDNS is running at https://192.168.99.101:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
KubeDNS is running at https://192.168.99.101:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
Y ya tenemos nuestro orquestador. Ojo porque no hemos utilizado docker-compose, y es que si somos más de Docker Compose, esto será más complicado, pues necesitaremos tirar de Docker Hub y en caso de querer utilizar nuestro propio Docker Hub, tendremos que tirar, lo más seguro, de Jenkins, por lo que es hacer mucha más compleja una infraestructura cuando no hay necesidad. De hecho, utilizando Docker y Kubernetes ya es hacer demasiado compleja una infra para mi gusto; y más en Prod.
Para la próxima parte veremos cómo implementar la Web UI de Kubernetes para obtener una visualización del contenido aún más claro.
¿Hackeamos el Mundo?
No hay comentarios:
Publicar un comentario