jump to navigation

Introducción a Kubernetes 18 febrero, 2020

Posted by ubanov in Informática-Linux.
trackback

Hace tiempo que tenía abandonado el blog, no tanto porque no haya estado “jugueteando” conn diferentes cosas, sino porque no tenía tiempo para escribirlo en limpio, para compartirlo. Ahora que tengo un poco más de tiempo, voy a intentar escribir un poco más.

En esta entrada voy a dar una rápida a qué es kubernetes y algunos links que me parecen interesantes sobre este tema.

¿Qué es Kubernetes? Es un software open source, para orquestación y la automatización de todas las tareas relacionadas con contenedores (despliegue, actualización, manejo, gestión de carga…). A veces por internet lo veréis nombrado como k8s.

Como definición oficial, la anterior definición puede valer, pero por intentar explicarlo de una forma un poco práctica, voy a poner un ejemplo (aunque va a ser un párrafo largo). Pensemos que estamos desarrollando un servidor web. Este va a llevar una base de datos (por ejemplo MariaDB/MySQL) y un servidor Web con, por ejemplo, 3 “microservicios” (varios servidores Web que atienden diferentes partes del mismo servidor Web). Pensemos que cada uno de los 3 microservicios de la web se desarrollan como contenedores, como dockers. Pensemos también que la base de datos la implementamos como otro docker. Supongamos también que tenemos un cluster de kubernetes, que cuente con tres nodos (lo mínimo que se recomienda para un cluster kubernetes para sistemas en producción). Sobre este cluster, para poder desplegar ese supuesto servicio web, se desplegaría primero el docker correspondiente a la base de datos. Esto hará que el contenedor se arranque en alguno de los nodos (asignándole además un volumen donde alojar las bases de datos). Una vez arrancado, el kubernetes se encargará de vigilar que todo esté funcionando correctamente, en caso de que haya algún problema con el nodo (o el docker), se encargará de arrancarlo de nuevo. Lo mismo se podrían hacer con los tres microservicios web. Los desplegamos en el cluster y publicamos su dirección en internet. Los servidores web suele ser muy habitual ponerlos en granjas, de forma que cuando la demanda suba se puedan arrancar más servidores. Kubernetes nos va a permitir también hacer esto a golpe de teclado (le decimos que un pod, contenedor, queremos que se ejecuten x instancias, y k8s lo hará y nos presentará, por ejemplo, una especie de balanceador para poder repartir el tráfico entre las instancias). Que el departamento de desarrollo prepara una nueva versión de uno de los microservicios web, kubernetes nos permitirá hacer la actualización en caliente sin dejar de dar servicio….

La siguiente imagen (sacada de kubernetes.io), muestra los componentes principales de un cluster kubernetes:

components-of-kubernetes

 

Para empezar, y poder tocar por primera vez kubernetes, yo recomendaría seguir el siguiente tutorial: https://kubernetes.io/docs/tutorials/kubernetes-basics (desde esa página podrás conocer los conceptos más importantes y empezar a tocar un cluster de kubernetes desde tu navegador web, sin tener que instalar nada en tu ordenador).

Algunos conceptos básicos:

  • cluster, una o más máquinas (nodos) que pueden ejecutar dockers. Habrá dos tipos de nodos: unos que harán las labores de gestión (nodos manager) y nodos que se encargarán de ejecutar contenedores (nodos workers).
  • kubectl: programa que se va a utilizar para administrar todos los componentes de un cluster kubernetes. 
  • nodos: máquinas que perticipan en el cluster (ejecutar “kubectl get nodes”, para ver todos los nodos de un cluster). Un cluster pueden añadirse o quitarse nuevos nodos (para ampliar o reducir el cluster). Como decía antes puede haber dos tipos de nodos.
  • volúmenes persistentes: lugar donde podrán almacenar datos algunos de los contenedores (por ejemplo, los datos de una base de datos).
  • pods: es la unidad mínima de gestión. Un pod podrá tener 1 o varios contenedores. Un pod mantendrá todos los contenedores en una misma máquina (y con la misma dirección IP). Un pod puede servir para escalar servicios (cuando la carga de un determinado pod suba, podemos decirle a kubernetes que cree más instancias de un determinado pod).
  • deployment: un contenedor que se ejecuta en un nodo. Si se crea un deployment directamente, kubernetes te creará un pod con ese contenedor especificado.
  • ingress: componente que se va a encargar de gestionar el tráfico desde fuera del cluster, a su servicio correspondiente. Podrá hacerse a redirigiéndo puertos, creando balanceadores, o con proxy de capa 7. 
  • namespace: para organizar los servicios se pueden meter en diferentes “espacios de nombres”. Los espacios se pueden ver con “kubectl get namespaces”, si queremos obtener información de todos los elementos que están en todos los namespace, ejecuta por ejemplo: «kubectl get pods —all-namespace» o su versión corta «kubectl get pods -A». Para hacer operaciones con un determinado namespace añadir «-n nombre_namespace», por ejemplo: «kubectl get pods -n kube-system»

¿Cómo instalar kubernetes en tu propia máquina para probar, desarrollar, etc? Una forma sencilla de instalarlo es utilizando un proyecto que se llama minikube. Instalarlo es muy sencillo, ver página https://minikube.sigs.k8s.io/docs/start/

(yo he instalado la versión de mac osx, con hyperkit… y la instalación han sido menos de 5 minutos).

Minikube instalará en tu máquina un pequeño cluster (con un solo nodo).

Una vez instalado podemos probar a crear un contenedor y acceder a él, con los siguientes comandos:

$ kubectl create deployment hello-minikube \
    --image=k8s.gcr.io/echoserver:1.10
$ kubectl expose deployment hello-minikube --type=NodePort \
    --port=8080
$ minikube service hello-minikube --url

El primer comando crea el deployment, el segundo hace accesible el puerto 8080 de esa aplicación fuera del cluster (asignándole otro puerto, en mi caso el 32364). Con el último comando obtenemos la URL desde la que acceder a ese servicio. En mi caso accediendo a la url que me da el último comando, obtengo la siguiente página:

kubernetes-echoserver-minikube

Kubernetes tiene una gran cantidad de software desarrollado alrededor de él. Algunas de las cosas que se hacen desde el comando kubectl, pueden hacerse desde una pagina Web (desde un addon llamado Dashboard).

El dashboard viene instalado como un plugin dentro de minikube. Para habilitarlo hay que ejecutar el siguiente comando:

$ minikube addons enable dashboard

Una vez habilitado podemos acceder a él con el siguiente comando

$ minikube dashboard

(este último comando lo que va a hacer es ejecutar el comando kubectl proxy y luego abrir la siguiente URL: http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/)

Lo que veremos podría ser algo como lo siguiente:

kubernetes-dashboard

Parece que ahora está muy de moda el uso de kubernetes, os animo a profundizar sobre él.

Para acabar, un último link que tiene unos cuantos cursos interesantes sobre kubernetes: https://www.katacoda.com/courses/kubernetes

Comentarios»

No comments yet — be the first.

Deja un comentario