Skip to content

feat: Lustre charm documentation - #155

Open
dsloanm wants to merge 8 commits into
canonical:mainfrom
dsloanm:lustre-docs
Open

dsloanm wants to merge 8 commits into
canonical:mainfrom
dsloanm:lustre-docs

Conversation

@dsloanm

@dsloanm dsloanm commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Pre-submission checklist

  • I read and followed the CONTRIBUTING guidelines.
  • I have ensured that the documentation tests complete successfully.
  • I have added a metadata description at the top of any new page.

Summary of Changes

Adds documentation for the Charmed HPC Lustre offering. Includes an Explanation page detailing the Lustre filesystem and charm.

Related Issues, PRs, and Discussions

Code PR for the initial Lustre charm: canonical/filesystem-charms#36

@dsloanm

dsloanm commented Aug 20, 2026

Copy link
Copy Markdown
Contributor Author

@AshleyCliff This is now in a state where it could use a preliminary review. Biggest question IMO is how we reconcile the "Deploy Lustre" and "Deploy a shared filesystem" pages. Re-titling the latter may make sense since it actually describes integrating with an externally managed shared filesystem rather than deploying your own.

@dsloanm
dsloanm requested a review from AshleyCliff August 20, 2026 12:46

@AshleyCliff AshleyCliff left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good, thanks for all the effort! I've left a few suggested updates and a variety of open-ended questions.

The `lustre-server` charm is in an experimental state and is not ready for production use.
:::

## Prerequisites

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are there any weird order-of-operations issues that could crop up if the Lustre server is deployed before Slurm? The deploy a shared filesystem lists 'A Slurm cluster' as a prereq. If not an explicit prereq, would it be advised?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't be any issues with order-of-operations. Slurm or Lustre could come up first. You could even use Lustre without a Slurm cluster if you just wanted a standalone parallel filesystem so I've not included it as a prereq

Comment thread howto/deploy/deploy-lustre.md Outdated
(howto-deploy-deploy-lustre-server)=
## Deploy the `lustre-server` charm

To deploy a default configuration, where the initial leader unit is a combined MGS+MDS and all remaining units are OSSes, run the following:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How well known are MGS, MDS, and OSS acronyms? Especially for those who may not be highly familiar with filesystems/Lustre? I'd suggest spelling them out with the acronym in parentheses the first time they're used on the page and then just acronyms after that.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh I see they're described on the explanation page. My other comments stands but maybe also a "Visit the Lustre explanation page for more details.." somewhere near this sentence.

@dsloanm dsloanm Aug 28, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've spelled out the acronyms and added a "For an explanation of Lustre and related terminology, see the {ref}`Lustre explanation page `" to the top of the page

Comment thread howto/deploy/deploy-lustre.md Outdated
(howto-deploy-deploy-lustre-server)=
## Deploy the `lustre-server` charm

To deploy a default configuration, where the initial leader unit is a combined MGS+MDS and all remaining units are OSSes, run the following:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

initial leader

I'm not sure why but something about 'initial' keeps catching me here. Is there an expectation that the leader unit will change?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, the leader unit can change at any time. When that happens, we don't want the MGS+MDS node to change with it so the service is fixed to the unit that happened to be leader as lustre-server was deploying

Comment thread howto/deploy/deploy-lustre.md Outdated
Comment thread howto/deploy/deploy-lustre.md Outdated
-n <number of units>
:::

A minimum of two units is required; a single unit deployment is not supported.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two total - one leader and one OSS, or two OSS? (I'm assuming one leader one OSS but might be worth spelling it out).

Comment thread explanation/lustre.md Outdated

LNet is Lustre's network layer, responsible for communication between clients and server components. The `lustre-server` charm can automatically detect network interfaces and configure LNet or a custom configuration can be provided using the `lnet-networks` option.

Both the `lustre-server` and `filesystem-client` charms perform network auto-detection by default, during the charm `install` hook. LNet is automatically configured with a network name of `tcp` using the default route Ethernet interface and, if RDMA hardware such as InfiniBand is detected, another network name of `o2ib` using every RDMA device, in a multi-rail setup if multiple devices are detected.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe this is the first mention of the filesystem-client charm on this page. Should there be a very brief statement added somewhere prior to this that describes how it fits into this process?

@dsloanm dsloanm Aug 28, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, I've moved the paragraph explaining filesystem-client from "Integrating with clients" to further up the page, as you suggested in another comment

Comment thread explanation/lustre.md Outdated

LNet is Lustre's network layer, responsible for communication between clients and server components. The `lustre-server` charm can automatically detect network interfaces and configure LNet or a custom configuration can be provided using the `lnet-networks` option.

Both the `lustre-server` and `filesystem-client` charms perform network auto-detection by default, during the charm `install` hook. LNet is automatically configured with a network name of `tcp` using the default route Ethernet interface and, if RDMA hardware such as InfiniBand is detected, another network name of `o2ib` using every RDMA device, in a multi-rail setup if multiple devices are detected.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Both the `lustre-server` and `filesystem-client` charms perform network auto-detection by default, during the charm `install` hook. LNet is automatically configured with a network name of `tcp` using the default route Ethernet interface and, if RDMA hardware such as InfiniBand is detected, another network name of `o2ib` using every RDMA device, in a multi-rail setup if multiple devices are detected.
Both the `lustre-server` and `filesystem-client` charms perform network auto-detection by default, during the charm `install` hook. LNet is automatically configured with a network name of `tcp` using the default route Ethernet interface. If RDMA hardware such as InfiniBand is detected, another network name of `o2ib` is also configured, which uses every RDMA device in a multi-rail setup if multiple devices are detected.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure that edit works but something needs to be tweaked, that sentence had way too much going and was hard to parse. The 'if multiple devices are detected' part still isn't fitting well.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I went with:

"If RDMA hardware such as InfiniBand is detected, an o2ib network is also configured. When multiple RDMA devices are present, all of them are configured in a multi-rail setup in the o2ib network"

which feels slightly blunt but more precise

Comment thread explanation/lustre.md Outdated

### Service placement

The charm automatically places the MGS and MDS on the initial leader unit, with all subsequent units becoming OSSes. A minimum of two units is required in a deployment.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as the how-to question - two units total or two OSS units?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clarified this

Comment thread explanation/lustre.md Outdated

A **ZFS dataset** is a subdivision of a zpool that can be configured like an independent filesystem. Datasets inherit properties from their parent pool but ZFS features can be individually tailored per dataset. For example, a particular dataset can be configured for more frequent snapshots than another dataset in the same zpool.

TODO: how Lustre charm uses ZFS

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Plans for updating this soon?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, once we have disk detection and we've finalized exactly how we're using ZFS

Comment thread explanation/lustre.md Outdated

If all health checks pass while the unit is in a `BlockedStatus`, the unit is restored to `ActiveStatus`.

### Integrating with clients

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Putting this section earlier would resolve my prior comment about filesystem-client needed some description/context.

dsloanm and others added 3 commits August 27, 2026 14:54
Co-authored-by: Ashley Cliff <ashley.cliff@canonical.com>
* remove admonitions
* add additional explanation around LNet
* provided additional context for why a user may want to override
  LNet auto-detection
* clarify minimum unit counts
* add LNDs to wordlist
* add "## Architecture" header to Explanation
* move the "Integration with clients" section
* reword LNet autodetection and minimum unit count descriptions
* add sample `juju status`
* add test to verify Lustre is functioning
@dsloanm

dsloanm commented Aug 28, 2026

Copy link
Copy Markdown
Contributor Author

Thanks for the comments @AshleyCliff. That should be all of them addressed and the docs ready for another review.

Getting disk detection functionality in the charm should be all that's needed to fix "TODO: how Lustre charm uses ZFS" and get this PR out of draft

Rewrite sections that reference the initial leader being set as
the MGS+MDS as service placement is now done based on storage.

Reword various sections for greater clarity.

Signed-off-by: Dominic Sloan-Murphy <dominic.sloanmurphy@canonical.com>

Assisted-by: opencode:gpt-5.6
@dsloanm
dsloanm marked this pull request as ready for review September 9, 2026 13:22
@dsloanm
dsloanm requested a review from a team as a code owner September 9, 2026 13:22
@dsloanm

dsloanm commented Sep 9, 2026

Copy link
Copy Markdown
Contributor Author

Now out of draft!

@benschwaller benschwaller left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! Left a few thoughts. A couple of the refs and code blocks loaded incorrectly on my github preview, affirm they are all correct.

Comment on lines +48 to +50
:::{code-block} shell
juju add-storage lustre-server/1 ost=loop,4,1G
:::

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might want to consider adding the 4 device minimum for OST here.

Comment thread explanation/lustre.md
--config lnet-networks="tcp=eth0; o2ib0=ib0,ib1"
```

configures LNet with a net name of `tcp` using the `eth0` interface, and a net name of `o2ib0` using the `ib0` and `ib1` interfaces.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we support RoCE interfaces? If not, should call that out here given it was discussed earlier.

Comment thread explanation/lustre.md

- Peer relation data is present and consistent.
- Required kernel modules are loaded.
- Lustre service mounts are active.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

More info on "active" mount definition and how you test for it might be useful to properly set expectations.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants