openchami-wiki/Use Cases/Serving the Root Filesystem with NFS (import-image.sh).md

1.9 KiB

For the tutorial, we served images via HTTP with a local S3 bucket using MinIO and an OCI registry. We could instead serve our images by network mounting the directories that hold our images with NFS. We can spin up a NFS server on the head node by including NFS tools in our base image and configure our nodes to mount the images.

Configure NFS to serve your SquashFS nfsroot with as much performance as possible.

sudo mkdir -p /opt/nfsroot && sudo chown rocky /opt/nfsroot

Create a file at path /etc/exports and copy the following contents to export the /opt/nfsroot directory for use by our compute nodes.

/opt/nfsroot *(ro,no_root_squash,no_subtree_check,noatime,async,fsid=0)

Reload the NFS daemon to apply the changes.

modprobe -r nfsd && modprobe nfsd

For NFS, we need to update the /etc/exports file and then reload the kernel nfs daemon

Create /opt/nfsroot to serve our images

sudo mkdir /srv/nfs
sudo chown rocky: /srv/nfs
  • Create the /etc/exports file with the following contents to export the /srv/nfs directory for use by our compute nodes

    /srv/nfs *(ro,no_root_squash,no_subtree_check,noatime,async,fsid=0)
    
  • Reload the nfs daemon

    sudo modprobe -r nfsd && sudo modprobe nfsd
    

Webserver for Boot Artifacts

We expose our NFS directory over https as well to make it easy to serve boot artifacts.

# nginx.container
[Unit]
Description=Serve /srv/nfs over HTTP
After=network-online.target
Wants=network-online.target

[Container]
ContainerName=nginx
Image=docker.io/library/nginx:1.28-alpine
Volume=/srv/nfs:/usr/share/nginx/html:Z
PublishPort=80:80

[Service]
TimeoutStartSec=0
Restart=always

Import Images from OCI to Share with NFS

Import-image Script