[en] The main objective of this project consists of the deployment of a Kubernetes cluster configured in high availability (HA), with the help of auxiliary tools such as Ansible, Keepalived and HAProxy, among others. The goal is that both the deployment and configuration of Kubernetes are performed in a centralized manner and with the least amount of manual inter- vention possible, that is, aiming to automate all processes as much as possible. Regarding the clúster architecture that will be deployed, it will consist of five nodes, three of them playing the role of control plane in Kubernetes. These control plane nodes are in charge of providing an access point to the cluster and make decisions based on the events that occur within it. One of these three control plane nodes will be responsible for initializing the cluster and to which the rest of the nodes will later join. The two remaining cluster nodes will play the role of worker, being in charge of executing the applications and services by the end users. There will also be a Network File System (NFS) server to provide shared storage for the applications. In our case, this NFS server will be hosted in one of the three control plane nodes. In addition, horizontal/vertical auto-scaling systems for the cluster resources will be configured, along with monitoring them and sending notification of important events. The deployment and configuration of the cluster will be carried out using the Infrastructure as Code (IaC) paradigm, which allows us to manage systems and infrastructures from source code. This approach enable managing computers, networks, databases, storage and other type of resources, as well as their provisioning, in a centralized and automated manner. For this purpose we will use the Ansible tool, as mentioned above. Finally, due to the hardware required to carry out this project, we will use Virtual Machines (VMs) managed by VirtualBox and Vagrant. However, all the Ansible playbooks developed in this project will remain usable in case of deploying a Kubernetes cluster directly on physical machines.

[es] Este Trabajo de Final de Grado (TFG) tiene como principal objetivo el despliegue de un clúster Kubernetes configurado en alta disponibilidad (High Availability, HA) con la ayuda de herramientas auxiliares como por ejemplo Ansible, Keepalived y HAProxy, entre otras. El propósito es que, tanto el despliegue como la configuración de Kubernetes, se hagan de manera centralizada y con la menor intervención manual posible, es decir, buscando la automatización de todos los procesos en la medida de lo posible. En cuanto a la arquitectura clúster que se desplegará inicialmente constará de cinco nodos, de los cuales tres de ellos tendrán el rol de control plane de Kubernetes, y serán los encargados de proveer un punto de acceso al clúster y tomar las decisiones en función de los eventos que ocurren dentro del mismo. De estos tres nodos control plane, uno de ellos será el encargado de inicializar el clúster Kubernetes y al cual se unirán el resto de nodos. Los dos nodos restantes jugarán el rol de worker, y serán los encargados de ejecutar las aplicaciones y servicios por parte de los usuarios finales. También se dispondrá de un servidor Network File System (NFS) para proveer el almacenamiento compartido de las aplicaciones que vayamos a desplegar. En nuestro caso, este servidor NFS será proporcionado por uno de los tres nodos con el rol de control plane. Además, se configurarán sistemas de autoescalado horizontal/vertical de los recursos del clúster, junto con su monitorización y el envío de notificaciones ante eventos importantes. El despliegue y configuración del clúster se llevará a cabo siguiendo el paradigma Infrastructure as Code (IaC), el cual nos permite administrar infraestructuras y sistemas a partir de código fuente. De esta forma podemos, de forma centralizada y automatizada, administrar equipos, redes, bases de datos, almacenamiento y otros tipos de recursos, además de su aprovisionamiento. Para este propósito usaremos la herramienta Ansible, mencionada anteriormente. Por último, debido al hardware requerido para realizar este proyecto, se llevará a cabo mediante máquinas virtuales haciendo uso de VirtualBox y Vagrant. En cualquier caso, todos los playbooks de Ansible que se desarrollarán en este proyecto serán perfectamente válidos en caso de que se quiera desplegar un clúster Kubernetes directamente sobre máquinas físicas.