lunes, 2 de septiembre de 2019

Kubernetes, entrando en el mundo de la moda (Parte II)

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


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

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'.

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

Related Posts Plugin for WordPress, Blogger...

Entrada destacada

El server me sabe a poco.

Soy un fanático del Rock y de Debian . (Creo que voy a inventar Rockbian, que suena bien y todo xD) Llevaba tiempo queriendo unir estos 2 c...