La computación en la niebla surge como un complemento a la computación en la nube, que persigue acercar los recursos de cómputo y almacenamiento a los datos allí donde éstos se generan. Esto permite reducir tiempos de respuesta y optimizar ancho de banda, entre otras mejoras, aspectos que resultan críticos en muchos casos de uso relacionados con Internet de las Cosas. Una de las múltiples opciones de implementación es el uso de computadores monoplaca, de los que la Raspberry Pi es quizás su modelo más popular.
Por otro lado, hoy en día el uso de los contenedores como mecanismo de virtualización ligera vive un gran auge, en gran medida por la expansión de arquitecturas basadas en microservicios. De ahí que sean necesarias herramientas que gestionen y coordinen el conjunto de contenedores que suponen la implementación de una aplicación o servicio, los orquestadores, de los cuales Kubernetes es el más popular. Uno de los elementos clave de Kubernetes es su planificador, encargado de decidir en qué recurso (nodo) se ejecutará cada trabajo (pod, que contiene uno o varios contenedores). Kubernetes ofrece mecanismos declarativos para influir en el comportamiento del planificador por defecto (tales como reglas de afinidad, toleracias o requisitos de CPU y memoria), así como la posibilidad de incluir planificadores alternativos definidos por el usuario. Es posible particularizar en la especificación del contenedor los parámetros del planificador a usar e incluso utilizar varios planificadores en un mismo sistema.
El objetivo general de este TFM es desarrollar y analizar las prestaciones de un nuevo planificador para un clúster formado por Raspberry Pis. En particular, se implementará un operador de Kubernetes capaz de planificar las aplicaciones según la geolocalización y disponibilidad de los nodos de cómputo a lo largo del tiempo.
Para el desarrollo de este TFM se hará uso de una metodología ágil basada en Scrum. Se mantendrán reuniones quincenales con los tutores para el correcto seguimiento y retroalimentación del trabajo. En cuanto al plan de trabajo, a priori se definen las siguientes fases:
1. Estudio funcional de Docker y Kubernetes.
2. Estudio de la arquitectura de Kubernetes y de la interfaz de programación de Kubernetes.
3. Aprender el desarrollo de recursos y operadores propios en Kubernetes.
4. Despliegue de un clúster con Kubernetes sobre Raspberry Pis.
5. Diseño de un operador propio para planificar aplicaciones en el clúster.
6. Implementación del operador con el framework operator-sdk.
7. Evaluación de prestaciones del operador/planificador desarrollado.
Las competencias que se aplican en el caso de la Tecnología de Ingeniería de Computadores son:
CE1: Capacidad para la integración de tecnologías, aplicaciones, servicios y sistemas propios de la Ingeniería Informática, con carácter generalista, y en contextos más amplios y multidisciplinares.
CE4: Capacidad para modelar, diseñar, definir la arquitectura, implantar, gestionar, operar, administrar y mantener aplicaciones, redes, sistemas, servicios y contenidos informáticos.
CE09: Capacidad para diseñar y evaluar sistemas operativos y servidores, y aplicaciones y sistemas basados en computación distribuida.
CE12 - Capacidad para aplicar métodos matemáticos, estadísticos y de inteligencia artificial para modelar, diseñar y desarrollar aplicaciones, servicios, sistemas inteligentes y sistemas basados en el conocimiento.
CE16: Realización, presentación y defensa, una vez obtenidos todos los créditos del plan de estudios, de un ejercicio original realizado individualmente ante un tribunal universitario, consistente en un proyecto integral de Ingeniería en Informática de naturaleza profesional en el que se sinteticen las competencias adquiridas en las enseñanza
• Eben Upton y Gareth Halfacree, Rasbperry Pi User Guide, Ed. Wiley, 2012. Disponible en http://www.cs.unca.edu/~bruce/Fall14/360/RPiUsersGuide.pdf [accedida nov-2021]
• Página web de Docker: https://www.docker.com/ [accedida nov-2021]
• Página web de Kubernetes: https://Kubernetes.io/es [accedida nov-2021]
• Documentación de Kubernetes: https://kubernetes.io/es/docs/home/ [accedida nov-2021]
• Taller de Kubernetes, Asignatura PyGiTIC del MUII-AB, UCLM, Curso 2021-2022.
• Controllers: https://kubernetes.io/docs/concepts/architecture/controller/ [accedida nov-2021]
• Demystifying Kubernetes Operators with the Operator SDK. Disponible en: https://www.linux.com/topic/cloud/demystifying-kubernetes-operators-operator-sdk-part-1/ [accedida nov-2021]
• Writing a Kubernetes Operator: From Zero to Hero. Disponible en: [accedida nov-2021]
• Hausenblas, M., & Schimanski, S. (2019). Programming Kubernetes: Developing Cloud-Native Applications. " O'Reilly Media, Inc.". : Disponible en: https://www.oreilly.com/library/view/programming-kubernetes/9781492047094/ y https://github.com/programming-kubernetes [accedidas nov-2021]
• Dobies, J., & Wood, J. (2020). Kubernetes Operators: Automating the Container Orchestration Platform. " O'Reilly Media, Inc.". Disponible en: https://www.oreilly.com/library/view/kubernetes-operators/9781492048039/ [accedida nov-2021]