Published using Google Docs
10 - Container Native File System Interposer.docx
Updated automatically every 5 minutes

Container Native File System Interposer

Preferred past experience:

Project background:

FUSE library provides a mechanism and an API for implementing full-fledged file systems in user space, which makes developing a new file system significantly easier and safer compared to kernel based file systems. This also enables quick development of various “utility” file systems that layer on top of other file systems to add new functionalities.  For example, a file system that injects random errors to evaluate applications’ error handling, a file system that logs activity for later analysis or playback, or a file system that throttles I/O operations for quality of service (QoS) purposes or reducing the load on backend.


Applications are now often deployed in container native environments, such as
Kubernetes.  In Kubernetes, storage is provided to workloads (“pods”) via volumes (“persistent volumes, PVs”) that are usually formatted with a file system such as ext4 or xfs.  To use a FUSE-based stackable utility file system with these volumes and workloads, some integration with Kubernetes is required, e.g. a special CSI plugin.

Project description:

1. Create a new CSI plugin for Kubernetes that allows to mount a stackable FUSE-based file system over another file system. Many open-source CSI plugins exist and can be used as a reference. CSI plugins are usually implemented using Go language.

2. Implement one or more (depending on the student group size) utility FUSE file systems (basing them on existing passthrough) that do: workload tracing, workload metric collection, faulty I/O, throttle I/O, fake IO. The details of each file system will be discussed with the mentors.

3. Run experiments with several data-intensive applications using the 2 technologies above. Perform descriptive analysis of applications’ behavior when a utility file system is used.

What team members will learn: