Architecture of Nublado controller¶
The Nublado controller is a FastAPI application with three basic functions:
Prepull images to every Kubernetes node.
Manage user lab pods and their supporting environment.
Manage user file server pods and their supporting environment.
Internally, the code structure uses the handler-services-storage code structure documented in SQR-072. To try to keep the size of the major services, such as the user lab manager, manageable, there are several layers of services that coordinate.
This diagram attempts to provide a guide to the overall code structure. The Kubernetes storage layer is further subdivided into per-resource storage layers, which are not shown in this graph to try to keep the graph more concise.
flowchart LR subgraph services prepuller(Prepuller) image(ImageService) lab(LabManager) fileserver(FileserverManager) image --> docker-source(DockerImageSource) image --> gar-source(GARImageSource) prepuller --> prepull-builder(PrepullerBuilder) prepuller --> image lab --> image lab --> lab-builder(LabBuilder) fileserver --> fileserver-builder(FileserverBuilder) lab-builder --> volume-builder(VolumeBuilder) fileserver-builder --> volume-builder end subgraph storage docker(DockerStorageClient) gar(GARStorageClient) metadata(MetadataStorage) fileserver-storage(FilserverStorage) fileserver-storage --> kubernetes(Kubernetes) lab-storage(LabStorage) lab-storage --> kubernetes node-storage(NodeStorage) end docker-source --> docker gar-source --> gar fileserver --> fileserver-storage lab --> metadata lab --> lab-storage prepuller --> metadata prepuller --> kubernetes image --> node-storage main(app) --> handlers handlers --> image handlers --> prepuller handlers --> lab handlers --> fileserver background(BackgroundTaskManager) background --> image background --> prepuller background --> lab background --> fileserver
Internal structure¶