SovereignCloudStack / standards

SCS standards in a machine readable format
https://scs.community/
Creative Commons Attribution Share Alike 4.0 International
31 stars 21 forks source link

[Standard] A simple, usable default StorageClass should be available in Kubernetes clusters #652

Closed martinmo closed 1 week ago

martinmo commented 2 months ago

At the moment, we have scs-0211-v1 SCS KaaS default storage class, which defines some contraints for a default storage class, if it exists. But it doesn't enforce that such an SC exists.

Proposal to be discussed:

  1. Require that a default storage class exists and is properly annotated (storageclass.kubernetes.io/is-default-class).
  2. It must support RWO access mode.
  3. Users may delete this SC, it just has to exist in a fresh cluster.
  4. How this default StorageClass is implemented, is up to the CSP. For example, it could be provided by something simple as rancher/local-path-provisioner.
  5. Advanced requirements are out of scope, for example:
    • not being backed by local storage
    • support for allowVolumeExpansion
    • HA / redundancy
    • performance

Motivation: lower the entry barrier for users by making things work out of the box, wrt storage. For example, many Helm charts require either a default SC or the user needs to specifiy a SC name.

Risks: users may solely rely on this default SC without checking what guarantees it gives.

(CC @mxmxchere because he proposed this to me via chat and I endorse this.)

Definition of Done:

Please refer to scs-0001-v1 for details.

martinmo commented 1 month ago

I've edited the above text and added some more details and thoughts to be discussed in upcoming calls.

martinmo commented 1 month ago

I brought this up in today's Container Call. The original author of the existing standard participated and he endorsed it as well. In the call, I think we reached consensus on the following:

joshmue commented 1 month ago

Agreed.

Not explicitly stating that such storage class has to exist, was technically an oversight in the original standard, as it always was the intention.

I think the quickest way to handle the explicit would be a small change to the original standard. Instead of...

The default StorageClass is made default using the storageclass.kubernetes.io/is-default-class annotation, following Kubernetes upstream.

...something like...

A default StorageClass MUST exist and MUST be made default using the storageclass.kubernetes.io/is-default-class annotation, following Kubernetes upstream.


According to the consensus, the other points regarding data durability (not necessarily regarding availability) do not need changes, I guess.