En este post vamos a ver de forma sencilla como poder crear tu propio cluster de Kubernetes en local. Y así poder adentrarnos un poco en esta tecnología. En el mundo del desarrollo cada vez es más necesario tener al menos conocimientos básicos de DevOps.
Y de eso trata este post de poder tener al menos una noción de lo que significan determinados conceptos. Aunque el ejemplo es sencillo y en un par de ficheros tendremos lo que deseamos, necesitaremos de más teoría de la que normalmente indicamos, para poder llevarlo a cabo. La idea es poderarrancar un cluster, con dos instancias de nuestro microservicio que contendrá un sencillo health y poder probar desde fuera del cluster su funcionamiento.
Empecemos con conceptos básicos de la tecnología a utilizar:
- Kubernetes: Es un sistema de código abierto para automatizar el despliegue, el escalado y la gestión de aplicaciones en contenedores.
- Kind: es una herramienta para ejecutar clusters locales de Kubernetes utilizando "nodos" contenedores Docker. Aunque nació con otro objetivo se puede usar para el despliegue en local.
- Kubectl: Herramienta para manejar mediante comandos tu cluster de Kubernetes.
- Nodo o worker: Elemento del cluster, puede ser una máquina física o virtual, que ejecutan aplicaciones en contenedores.
- Control Plane: Gestiona los worker y los Pods en el cluster.
apiVersion: kind.x-k8s.io/v1alpha4 kind: Cluster nodes: - role: control-plane extraPortMappings: - containerPort: 30000 hostPort: 30000 listenAddress: "0.0.0.0" # Optional, defaults to "0.0.0.0" protocol: tcp # Optional, defaults to tcp - role: worker
En este fichero, podemos ver cómo tendremos dos nodos, el de administración y el que nos permitirá el despliegue de los contenedores. Podemos indicar tantos como queramos teniendo en cuenta los requisitos de nuestra máquina. También indicamos que vamos a exponer el puerto 30000 (el primero disponible ya que no es posible indicar puertos inferiores) desde el cluster hacia fuera. Ya veremos más adelante porque.
Si queremos arrancar nuestro cluster debemos ejecutar este comando:
kind create cluster --config kind-config.yaml --name kind-basic
Y si queremos destruirlo, este otro:
kind delete cluster --name kind-basic
Lo siguiente será preparar los ficheros de configuración de los objetos de Kubernetes. Aunque hay más, por ahora solo necesitamos saber de estos:
- Pods: Son las unidades desplegables más pequeñas que se pueden crear y gestionar en Kubernetes. Y que pueden estar compuesto por un solo contenedor, en un caso de uso común, o por varios.
- Deployment: Es un objeto que describe cómo se debe implementar y actualizar una aplicación en el clúster
- Service: Es un objeto que describe cómo se accede a las aplicaciones y que puede describir puertos y balanceadores de carga asociados al mismo.
Sabiendo esto procederemos a configurar por un lado un Deployment, el cual nos permitirá indicar que aplicación queremos desplegar, su versión, cuantas replicas desplegar en el cluster. Y un sinfín de posibilidades más. En este fichero declararemos el nombre y etiqueta asociada a nuestro deployment, y lo que es más importante, cuantas replicas queremos desplegar y cual es la imagen que debemos utilizar.
Por último debemos configurar el servicio. A través del cual podremos exponer nuestra aplicación al exterior. Hasta aquí la configuración no tenia dificultad, mas allá de conocer cómo Kubernetes necesita que se configuren sus objetos. Pero para el servicio necesitamos saber qué tipos de servicios existen y cual es el que requerimos para nuestro ejemplo.
- ClusterIP: Opción por defecto. Expone el Service en una dirección IP interna del clúster asociado a un determinado puerto, también interno.
- NodePort: Permite exponer el Service asociado en cada IP del nodo en un puerto estático. Permitiéndonos acceder desde forma externa a través de dicho puerto.
- LoadBalancer: Permite exponer el servicio a través de un LoadBalancer de un proveedor en la nube. La opción a utilizar para producción.
- ExternalName: Funciona de forma similar a cualquier otro tipo, pero accedes a ese servicio en vez de devolver la IP asociada al mismo, devuelve el registro CNAME con el valor indicado.
No hace falta tener las dos configuraciones separadas, podemos incluirlas en el mismo fichero siempre que tengamos una linea con el texto '---' entre ambas configuraciones. Y si queremos desplegarlas en nuestro cluster, debemos ejecutar el comando:
kubectl apply -f configuration.yaml
curl --location 'http://localhost:30000/q/health/live'
Y esto ha sido todo, amigos. Espero que os haya servido para tener un conocimiento mínimo de Kubernetes y de cómo realizar una configuración básica.
No hay comentarios:
Publicar un comentario