Get it on Google Play
Mas de 21 años en el mundo del IT corporativo

Despliegue de aplicaciones sobre Kubernetes

01-08-2019
Kubernetes Architecture

Kubernetes Architecture

Hacía tiempo que me reclamabais que hablara sobre Kubernetes y hoy empezamos una serie de vídeos sobre kubernetes. El motivo de no empezar antes es que no se puede trabajar con kubernetes sin una sólida base de contenedores Docker. Os recomiendo los vídeos donde hablamos sobre Docker aquí o los artículos sobre la misma temática aquí.

Kubernetes es un gestor de cluster, de hecho lo que nos venden es que permite gestionar todo un cluster de servidores como si fuera una única máquina. Kubernetes es una solución desarrollada y liberada por Google que podemos usar en nuestros propios servidores(on-premise) o a través del Cloud de Google entre otros.

Hoy vamos a aprender como desplegamos nuestras aplicaciones sobre un cluster de servidores con Kubernetes, para hacer esto utilizaremos Minikube. Minikube es un entorno para trastear con Kubernetes utilizando máquinas virtuales de Virtualbox. En futuros vídeos y artículos veremos como instalar Kubernetes on-premise(Sobre nuestras propias máquinas) o usando el cloud de Google(Es que instalar y trastear al mismo tiempo en un mismo vídeo/artículo era muy lioso).

Instalar Minikube

Podemos instalar Minikube siguiendo las instrucciones del siguiente enlace, esta disponible en Linux, Window y Mac. En mi caso, lo instalo sobre Linux:

# Descagamos e instalamos
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
  && chmod +x minikube
# Arrancamos minikube
./minikube start

Instalar kubectl, el cliente de Kubernetes

Podemos instalar el cliente de kubernetes siguiendo las instrucciones del siguiente enlace, esta disponible en Linux, Window y Mac. En mi caso, lo instalo sobre Linux:

# Descargamos
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

# Le damos permisos de ejecución
chmod 777 ./kubectl

# Lo copiamos en la carpeta /usr/local/bin para que esté disponible
sudo mv ./kubectl /usr/local/bin/kubectl
# Si todo ha ido bien, deberíamos poder ejecutar esto y que nos devolviera información de la versión
kubectl version

Dashboard de Kubernetes

Una de las ventajas de Kubernetes respecto a Docker Swarm es que aporta un Dashboard desde donde controlar el cluster. Como estamos usando Minikube, deberemos activarlo de la siguiente manera:

./minikube dashboard
Kubernetes Dashboard

Kubernetes Dashboard

Ver estado del cluster

A través del cliente de Kubernetes, la solución mas usada por los profesionales de los sistemas porque permite mayor control y automatizar los procesos, también podemos ver los nodos de nuestro clustery hacer todo lo que podemos hacer desde el Dashboard y mucho mas:

# Ver el listado de nodos de nuestro cluster
kubectl get nodes

También podemos pedirle el detalle de nuestros nodos:

kubectl describe nodes

Despliegue de aplicaciones

Ya podemos desplegar contenedores, en este caso vamos a desplegar un contenedor usando la imagen httpd:latest, que nos descargamos del hub de docker:

kubectl create deployment hello-http –image=httpd:latest

Podemos ver el estado de nuestro despliegue. En Kubernetes un despliegue es un pod, que puede ser un solo contenedor o un conjunto de contenedores relacionados entre si. Un Pod siempre se desplegará en una única máquina:

kubectl get pods

Podemos también pedir el detalle de nuestro despliegue, con información muy interesante sobre el nodo donde se ha desplegado, los eventos, etc.:

 kubectl describe pod hello-http

Como hemos comentado, podemos desplegar un pod como un conjunto de contenedores, en este caso usaremos un fichero YML o JSON donde describiremos la aplicación(Os recomiendo volver a ver el vídeo de Docker Swarm):

# Desplegamos el conjunto de contenedores descritos en el fichero app.yml
kubectl apply -f app.yml

El fichero ‘app.yml’ que hemos usado es el siguiente:

---
apiVersion: v1

kind: Pod

metadata:
  name: mi-app
  labels:
    app: web

spec:
  containers:
    - name: front-end
      image: nginx
      ports:
        - containerPort: 80

    - name: back-end
      image: redis

Exponer servicios

Nuestros despliegues serán solo visibles desde dentro del cluster, si queremos dar visibilidad a nuestros despliegues deberemos hacerlo así:

kubectl expose deployment hello-http --type=LoadBalancer --port=80

Donde le decimos a kubernetes que exponga el puerto 80 del servicio ‘hello-http’ usando balanceo de carga. Podemos ver los servicios:

kubectl get services

Escalar los servicios

Algo muy atractivo es la facilidad con la que se pueden escalar aplicaciones hechas con contenedores. Por ejemplo, para escalar a 3 el número de pods del servicio ‘hello-http’:

kubectl scale deployment --replicas=3 hello-http

Eliminar pods/despliegues

Para ir finalizando vamos a eliminar los despliegues, los servicios y cerrar el minikube:

# Eliminamos el despliegue de la imagen httpd:latest
kubectl delete deployment hello-http

# Eliminamos el despliegue hecho con el fichero app.yml
kubectl delete -f app.yml

# Eliminamos el servicio expuesto hello.http
kubectl delete service hello-http

# Eliminamos el minikube
minikube delete

Conclusiones

Como veis, Docker Swarm, Kubernetes incluso Apache Mesos(Del que todavía no hemos visto nada en este canal) nos muestran el camino hacia un nuevo tipo de gestión del servicio y los despliegues. Kubernetes es quizá la solución mas usada y famosa y es que tiene un muy buen padrino, Google. Os espero en el próximos vídeos de Kubernetes donde instalaremos un cluster REAL.

Si te ha servido, por favor comparte

Interesado en formación Docker?

 

Leave a Reply