The list of possible topics for the current academic year are the following:

#1. Improving Resources and Namespaces Management in CrownLabs

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.

(student: XX; tutor: YY)

#2. Adding the support for "Sandbox" in CrownLabs

While most of the CrownLabs users connect to the graphical dashboard and use the services available in there, in some cases a student would like to simply get a "slice" of Kubernetes, for its own purposes. This is for instance the case for a new lab for Cloud Computing that is being introduced in current academic year, which requires to setup a new web service within Kubernetes.

This project aims at extending the current CrownLabs logic by creating a new "sandbox" namespace, to be used to assign a Kubernetes "slice" to each user, as well as the setting of custom resources (e.g., capability to create "ingress" resources).

(student: XX; tutor: YY)

#3. Enable resource accounting in CrownLabs

Currently, users are prevented to exceed a given amount of resources (e.g., N CPU cores) in order to avoid resource exhaustion. However, this situation is suboptimal, as users may want to use a lot of resources for a limited time, leveraging the power of the cloud. This project aims at changing the resource consumption model, moving away from the "fixed limits" and adopting a "pay-per-use" model. According to the new model, each student is provided with (1) a given amount of "tokens", (2) a resource accounting model that estimates its actual resource consumption (e.g., X tokens per CPU used/hour, Y tokens per CPU allocated/hour, etc), and (3) a resource accounting system that measures the actual resources used. This way, a student can even use a large amount of computing for limited amount of time, provided that he still have enough tokens, hence leveraging cloud resources in a more flexible way.

(student: XX; tutor: YY)

#4. Enable Cloud-native storage

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.

(student: XX; tutor: YY)

#5. Enable arbitrary applications on CrownLabs

CrownLabs was born to deliver VM to users. However, the technological fundation of CrownLabs is the Kubernetes orchestrator, which can support many more applications. The objective of this project is to explore the possibility to offer multiple applications to CrownLabs users, which go beyond traditional VM-based or Docker-based applications. Particularly, we foresee additional applications such as Visual Studio Code, Jupiter Notebooks, KubeFlow that can be deployed in CrownLabs.

This project aims at:

  • exploring how the above applications can be installed in CrownLabs, with the possibility to provide a per-user running environment;

  • extending the CrownLabs backend in order to support the installation of arbitrary applications;

  • extending the CrownLabs frontend in order to support applications that do use VNC (hence, Xorg) to interact with the user;

  • extending the CrownLabs UI to list the above applications in addition to currently supported services.

(student: XX; tutor: YY)

#6. Improve Service Catalog and Docker Registry in CrownLabs

CrownLabs leverages a private, on-premise Docker registry to store the images required to start the VMs. Yet, the current deployment has very basic functionalities, missing the support for multi-tenant authentication, permission management, and so on. This makes it impossible to provide the possibility to external users to build and upload their custom VM images on CrownLabs. This project proposes to replace the current docker registry with a fully-fledged cloud-native solution (such as Harbor) in a high-availability configuration, and integrate it with the CrownLabs authentication subsystem. Additionally, it should be explored how to expose the available images, along with a set of custom attributes (e.g., whether they are VMs or traditional containers, whether they have GUI or not, ...) to the CrownLabs frontend, in order to allow the seamless creation of new templates.

(student: XX; tutor: YY)

#7. Simplify the creation of custom VMs (or Dockers) in CrownLabs

CrownLabs was recently extended with the support for Stateful VM, i.e., VM with persistent disk whose content is preserved across reboots. This brings to the necessity of creating new VMs with an operating system of choice, which goes beyond the default "xubuntu" provided by CrownLabs. However, Crownlabs may not accept "vanilla" OS images, as several steps are customized in order to allow VMs to work in the CrownLabs environment at best (e.g., the VNC-based graphical engine).

This project aims at simplifying how a custom VM can be created and uploaded in CrownLabs and it will require the following steps:

  • enrich the documentation with more details about adding a new custom VM to Crownlabs;

  • extend the CrownLabs backend in order to allow the upload of custom images (e.g., a new operator)

  • extend the CrownLabs frontend in order to facilitate the upload and configuration of the above new image

Note: this project requires #6 as a pre-requisite; hence this project could be done with a group of two students, taking care of both objectives.

(student: XX; tutor: YY)

#8. Unify logging systems in CrownLabs

One of the biggest pains in current micro-service architecture is the debugging of running services, as well as the whole infrastructure. In fact, debugging a faulty applications is usually achieved by inspecting log files. However, a problem in a given application can be located in one of the microservices composing the application itself, in other ancillary services (e.g., distributed storage), in the infrastructure, etc. This requires the developers (and the system administrator) to inspect multiple log files, in different locations, trying to locate the log lines that are meaningful for the impacting problem.

This project aims at introducing a "single log concentrator" in CrownLabs, leveraging one of the several projects that are oriented to this task, and determine which modifications to existing applications and containers are required to achieve the above result. Finally, the student is requested to simulate a problem in one application and demonstrate the advantage of the proposed approach compared to the traditional solution.

(student: XX; tutor: YY)