Projects
The list of possible topics for the current academic year are the following:
#1. Improving resources and namespaces management in CrownLabs (assigned)
For isolation purposes, CrownLabs creates a new Kubernetes namespace for each tenant (e.g., student). However, due to the high number of users, this operation may become problematic, also considering that namespaces are active in CrownLabs even if the user is not logged-in. This project aims at improving how namespaces and resources are handled in CrownLabs, possibly creating dynamically the namespace only when the user is actively using the system.
Technologies: Kubernetes, Go, Git
Student: Robert Schwartz; tutor: Marco Iorio/Federico Cucinella
#2. Enabling cloud-native storage in CrownLabs (assigned)
Currently, CrownLabs leverages two different storage solutions to provide easy-to-use interfaces for users to save their data, one in case of VMs (i.e., NextCloud), and one for containers (i.e., FileBrowser). Still, this approach is suboptimal, since the files stored in one are not available in the other, NextCloud has shown reliability and performance issues, while FileBrowser is currently attached to independent volumes destroyed when an instance is deleted. This project aims to explore the possibility to replace those solutions with a more unified and cloud-native approach, allowing the CrownLabs users to access their data both from a web-based GUI, as well as inside their environments, no matter whether VM or container based.
Technologies: Kubernetes, Cloud-native storage
Student: Diego Gasco, Matteo Rosani; tutor: Marco Iorio/Federico Cucinella
#3. Enhancing the observability of Liqo components (assigned)
Observability is key to determine whether complex systems behave properly. This project aims to extend one component of the Liqo open-source project, namely the "virtual kubelet", to expose an appropriate set of metrics in the Prometheus format, describing the most relevant characteristics, such as the amount of offloaded and replicated objects, its performance, and so on. The project will also require the creation a Grafana dashboard, graphically presenting the extracted information in a comprehensive and coherent way.
Technologies: Kubernetes, Prometheus, Grafana, Go, Git
Student: Damiano Turriziani; tutors: Marco Iorio/Alessandro Olivero
#4. Extending the Liqo CLI to improve UX and observability
Liqoctl is the CLI tool that allows to streamline the installation and management of Liqo, abstracting the interaction with the appropriate Kubernetes APIs (both standard and CRDs). This project aims to extend the current version of liqoctl and introduce a new set of commands, improving the overall user experience and simplifying troubleshooting and observability of the entire system. Concrete examples include the possibility to display active peerings and offloaded namespaces, along with their status and characteristics, configure specific parameters, as well as dump all system information required for troubleshooting purposes when new issues are encountered.
Technologies: Kubernetes, Go, Cobra, Git
Student: XXX; tutor: YYY
#5. Extending the Liqo Virtual Kubelet with advanced pod handling functionalities (assigned)
The virtual kubelet is the component of the Liqo open-source project which, among others, handles the lifecycle of the pods offloaded to remote clusters. This project aims to extend the current virtual kubelet implementation, enabling advanced troubleshooting operations typically available in vanilla Kubernetes clusters. Examples include the possibility to leverage ephemeral containers for troubleshooting purposes, start a new interactive pod, as well as forward port-forward a container to the local machine.
Technologies: Kubernetes, Go, Git
Student: Salvatore Cirone, Pablo Borrelli; tutor: Marco Iorio/Alessandro Olivero
#6. Creating cloud resources through the infrastructure as code paradigm (assigned)
Infrastructure as code is the process of defining a set of infrastructural components through declarative definition files enforced by appropriate software (e.g., Terraform, Pulumi, Crossplane), rather than using imperative CLI tools or point-and-click dashboards. Overall, it simplifies the frequent creation and tear down of resources, as well as clearly establishes their characteristics.
This project aims to leverage infrastructure as code tools in the context of Liqo, defining in a declarative way the appropriate infrastructure components (e.g., multiple Kubernetes clusters, including the necessary system components) to be leveraged for demo purposes and during E2E tests. These tests, in particular, are periodically executed on multiple cloud providers, such as AWS, GCP and Azure, to ensure compatibility and prevent regressions. Additionally, we foresee the possibility of integrating this approach in the current CI/CD pipelines, further automating the entire testing process.
Technologies: Terraform/Pulumi, Kubernetes, Helm, Git
Student: Alessandro De Crecchio, Erasmo Notaro; tutor: Marco Iorio/Alessandro Olivero
#7. Extending CrownLabs with student auto-enrolling capabilities
CrownLabs is an excellent framework enabling students to play with cloud computing capabilities and resources. In particular, it allows users to start dedicated execution environments (virtual machines, containers) targeting their courses, with all the software running in there. While the standard procedure is that the professor creates the accounts for his students, there are cases in which some students are missing, leaving the responsibility, for the professor, to add them manually. This project aims at creating the required infrastructure (backend + frontend) to allow individual students to enroll in the courses on their own, upon receiving the approval from the course administrators. This would make the system more flexible, and save time from students and professors.
Technologies: Kubernetes, Go, Javascript, React, Git
Student: XXX; tutor: YYY
#8. Cloud-native storage sharing across multiple tenants
A recent CrownLabs project added support for cloud native storage based based on NFS volumes provisioned by the cluster. Currently each user is provided with a personal volume that is mounted onto all instance he creates. However, this is just personal space, with no support for shared folders, e.g., among all users of a group. Purpose of this project is to:
study/explore volume sharing solutions
prepare and implement the solution on the Kubernetes backend
provide integration of the feature into the frontend
Technologies: Kubernetes, Go, Javascript, React, Git
Student: XXX; tutor: YYY