From 62eaccfe63af0b4b616934d9c6f663b7e8aa1d2b Mon Sep 17 00:00:00 2001 From: Martin Morgenstern Date: Tue, 16 Jul 2024 18:08:27 +0200 Subject: [PATCH 01/11] First draft of KaaS default StorageClass standard v2 Signed-off-by: Martin Morgenstern --- .../scs-0211-v2-kaas-default-storage-class.md | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Standards/scs-0211-v2-kaas-default-storage-class.md diff --git a/Standards/scs-0211-v2-kaas-default-storage-class.md b/Standards/scs-0211-v2-kaas-default-storage-class.md new file mode 100644 index 000000000..8cbeff960 --- /dev/null +++ b/Standards/scs-0211-v2-kaas-default-storage-class.md @@ -0,0 +1,49 @@ +--- +title: SCS KaaS default storage class +type: Standard +status: Draft +replaces: scs-0211-v1-kaas-default-storage-class.md +track: KaaS +description: | + The SCS-0211 standard ensures that a default StorageClass with specific characteristics is available to KaaS users. +--- + +## Introduction + +Cluster consumers can request persistent storage via [`PersistentVolumeClaims`][k8s-pvc], which is provisioned +automatically by cloud-provided automation. +Storage requirements may vary across use cases, so there is the concept of storage classes (`StorageClass`). +Storage classes define some set of storage properties and consumers can choose one of these depending on the use case. + +## Motivation + +A lot of third-party software, such as Helm charts, assume that a default storage class is configured. +Thus, for an out-of-the-box working experience, a SCS compliant Kubernetes cluster should come +preconfigured with a sensible default storage class providing persistent storage. + +## Decision + +A freshly provisioned Kubernetes cluster MUST have a default storage class, i.e., a `StorageClass` +object that is annotated with `storageclass.kubernetes.io/is-default-class=true` as described in the +[Kubernetes documentation][k8s-default-sc]. +The name of this storage class is not standardized. + +Users MUST be able to change the default storage class. + +The persistent volumes (PV) provisioned by the provided default storage class MUST fulfill all +of the following properties: + +- MUST support the `ReadWriteOnce` [access mode][k8s-accessmode]. +- MUST NOT be backed by local or ephemeral storage. +- MUST NOT be bound to the lifecycle of a Kubernetes node. + +The provisioned storage class MAY support volume expansion (`allowVolumeExpansion=true`). + +## Conformance Tests + +TBD + +[k8s-pv]: https://kubernetes.io/docs/concepts/storage/persistent-volumes/ +[k8s-pvc]: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims +[k8s-default-sc]: https://kubernetes.io/docs/tasks/administer-cluster/change-default-storage-class/ +[k8s-accessmode]: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes From 49140ecb4907593fe100afaa114ba26ec938c8d4 Mon Sep 17 00:00:00 2001 From: Martin Morgenstern Date: Tue, 16 Jul 2024 18:12:16 +0200 Subject: [PATCH 02/11] Fix linter errors Signed-off-by: Martin Morgenstern --- Standards/scs-0211-v2-kaas-default-storage-class.md | 1 - 1 file changed, 1 deletion(-) diff --git a/Standards/scs-0211-v2-kaas-default-storage-class.md b/Standards/scs-0211-v2-kaas-default-storage-class.md index 8cbeff960..adb0ee505 100644 --- a/Standards/scs-0211-v2-kaas-default-storage-class.md +++ b/Standards/scs-0211-v2-kaas-default-storage-class.md @@ -43,7 +43,6 @@ The provisioned storage class MAY support volume expansion (`allowVolumeExpansio TBD -[k8s-pv]: https://kubernetes.io/docs/concepts/storage/persistent-volumes/ [k8s-pvc]: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims [k8s-default-sc]: https://kubernetes.io/docs/tasks/administer-cluster/change-default-storage-class/ [k8s-accessmode]: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes From f8f58b4c13cf16826e786dbacfc191378690a9cb Mon Sep 17 00:00:00 2001 From: Martin Morgenstern Date: Wed, 17 Jul 2024 16:44:59 +0200 Subject: [PATCH 03/11] Remove requirement to change the default SC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Joshua Mühlfort Signed-off-by: Martin Morgenstern --- Standards/scs-0211-v2-kaas-default-storage-class.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/Standards/scs-0211-v2-kaas-default-storage-class.md b/Standards/scs-0211-v2-kaas-default-storage-class.md index adb0ee505..e4a4358c2 100644 --- a/Standards/scs-0211-v2-kaas-default-storage-class.md +++ b/Standards/scs-0211-v2-kaas-default-storage-class.md @@ -28,8 +28,6 @@ object that is annotated with `storageclass.kubernetes.io/is-default-class=true` [Kubernetes documentation][k8s-default-sc]. The name of this storage class is not standardized. -Users MUST be able to change the default storage class. - The persistent volumes (PV) provisioned by the provided default storage class MUST fulfill all of the following properties: From 70a13aea5ea91d6585cf930283435260b1f0d661 Mon Sep 17 00:00:00 2001 From: Martin Morgenstern Date: Fri, 19 Jul 2024 15:37:24 +0200 Subject: [PATCH 04/11] Add information about previous standard versions Signed-off-by: Martin Morgenstern --- Standards/scs-0211-v2-kaas-default-storage-class.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Standards/scs-0211-v2-kaas-default-storage-class.md b/Standards/scs-0211-v2-kaas-default-storage-class.md index e4a4358c2..8b88e52f4 100644 --- a/Standards/scs-0211-v2-kaas-default-storage-class.md +++ b/Standards/scs-0211-v2-kaas-default-storage-class.md @@ -10,6 +10,7 @@ description: | ## Introduction +This is the standard v2 for SCS Release 7. Cluster consumers can request persistent storage via [`PersistentVolumeClaims`][k8s-pvc], which is provisioned automatically by cloud-provided automation. Storage requirements may vary across use cases, so there is the concept of storage classes (`StorageClass`). @@ -37,6 +38,17 @@ of the following properties: The provisioned storage class MAY support volume expansion (`allowVolumeExpansion=true`). +## Previous standard versions + +[Version v1 of this standard](scs-0211-v1-kaas-default-storage-class.md) did not enforce the +existence of a default storage class in a newly created cluster. + +Previously, the backing storage of the default storage class was required to be protected +against data loss caused by a physical disk or host failure. +It also contained recommendations (MAY) with regard to redundant storage across hosts +or availability zones. +In this revision, these requirements and recommendations have been dropped. + ## Conformance Tests TBD From 3f8dce5364831212069ab14b4b71dd006d6a9470 Mon Sep 17 00:00:00 2001 From: Martin Morgenstern Date: Fri, 19 Jul 2024 15:40:00 +0200 Subject: [PATCH 05/11] Cosmetic improvement Signed-off-by: Martin Morgenstern --- Standards/scs-0211-v2-kaas-default-storage-class.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Standards/scs-0211-v2-kaas-default-storage-class.md b/Standards/scs-0211-v2-kaas-default-storage-class.md index 8b88e52f4..72d2e2bcc 100644 --- a/Standards/scs-0211-v2-kaas-default-storage-class.md +++ b/Standards/scs-0211-v2-kaas-default-storage-class.md @@ -11,6 +11,7 @@ description: | ## Introduction This is the standard v2 for SCS Release 7. + Cluster consumers can request persistent storage via [`PersistentVolumeClaims`][k8s-pvc], which is provisioned automatically by cloud-provided automation. Storage requirements may vary across use cases, so there is the concept of storage classes (`StorageClass`). From 4a7b389c976a74cbf4b91fba6a1664b2974e64b8 Mon Sep 17 00:00:00 2001 From: Katharina Trentau Date: Tue, 27 Aug 2024 17:12:18 +0200 Subject: [PATCH 06/11] soft requirements from v1 Signed-off-by: Katharina Trentau --- .../scs-0211-v2-kaas-default-storage-class.md | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/Standards/scs-0211-v2-kaas-default-storage-class.md b/Standards/scs-0211-v2-kaas-default-storage-class.md index 72d2e2bcc..329e21dcb 100644 --- a/Standards/scs-0211-v2-kaas-default-storage-class.md +++ b/Standards/scs-0211-v2-kaas-default-storage-class.md @@ -39,16 +39,32 @@ of the following properties: The provisioned storage class MAY support volume expansion (`allowVolumeExpansion=true`). +### Recommended non-performance-related properties + +The following recommendations cannot be checked without further ado and therefore do not represent hard requirement criteria. Nevertheless, they are important prerequisites for ensuring data storage stability: + +- `ReadWriteOnce` should be a supported [access mode](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) +- volume should be protected against data loss due to hardware failures of a single disk or host +- volume should not be bound to the lifecycle of a Kubernetes Node + +Hence, + +- ...volume should not be backed by local storage on the Kubernetes Node VM itself +- ...volume may be backed by some kind of redundant storage within an AZ, across hosts +- ...volume may be backed by some kind of redundant storage across AZ's + +- volumes that are not necessarily required to be failure-safe may be local/node-bound/non-redundant, possibly fast to run applications that take care of data durability and availability on application level + +### Required performance-related properties + +- _NO_ fixed guarantees regarding latency/bandwidth/IOPS/... +Generally, customers should be able to expect low-tier performance without pricing surprises. + ## Previous standard versions [Version v1 of this standard](scs-0211-v1-kaas-default-storage-class.md) did not enforce the existence of a default storage class in a newly created cluster. -Previously, the backing storage of the default storage class was required to be protected -against data loss caused by a physical disk or host failure. -It also contained recommendations (MAY) with regard to redundant storage across hosts -or availability zones. -In this revision, these requirements and recommendations have been dropped. ## Conformance Tests From 0a22cf94da4e41ae423530787eb3109b71a699ef Mon Sep 17 00:00:00 2001 From: Katharina Trentau Date: Wed, 28 Aug 2024 08:40:00 +0200 Subject: [PATCH 07/11] fixed double spaces Signed-off-by: Katharina Trentau --- Standards/scs-0211-v2-kaas-default-storage-class.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Standards/scs-0211-v2-kaas-default-storage-class.md b/Standards/scs-0211-v2-kaas-default-storage-class.md index 329e21dcb..0d25a1efb 100644 --- a/Standards/scs-0211-v2-kaas-default-storage-class.md +++ b/Standards/scs-0211-v2-kaas-default-storage-class.md @@ -41,7 +41,7 @@ The provisioned storage class MAY support volume expansion (`allowVolumeExpansio ### Recommended non-performance-related properties -The following recommendations cannot be checked without further ado and therefore do not represent hard requirement criteria. Nevertheless, they are important prerequisites for ensuring data storage stability: +The following recommendations cannot be checked without further ado and therefore do not represent hard requirement criteria. Nevertheless, they are important prerequisites for ensuring data storage stability: - `ReadWriteOnce` should be a supported [access mode](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) - volume should be protected against data loss due to hardware failures of a single disk or host From c0417fe9cf7e90b38ffed88006163e2459be8182 Mon Sep 17 00:00:00 2001 From: Katharina Trentau Date: Wed, 28 Aug 2024 08:54:59 +0200 Subject: [PATCH 08/11] fixed blank lines Signed-off-by: Katharina Trentau --- Standards/scs-0211-v2-kaas-default-storage-class.md | 1 - 1 file changed, 1 deletion(-) diff --git a/Standards/scs-0211-v2-kaas-default-storage-class.md b/Standards/scs-0211-v2-kaas-default-storage-class.md index 0d25a1efb..596a16bb6 100644 --- a/Standards/scs-0211-v2-kaas-default-storage-class.md +++ b/Standards/scs-0211-v2-kaas-default-storage-class.md @@ -65,7 +65,6 @@ Generally, customers should be able to expect low-tier performance without prici [Version v1 of this standard](scs-0211-v1-kaas-default-storage-class.md) did not enforce the existence of a default storage class in a newly created cluster. - ## Conformance Tests TBD From 71636bc588c2fc8228766e8b2af71e8181dfdfb0 Mon Sep 17 00:00:00 2001 From: Katharina Trentau Date: Wed, 28 Aug 2024 09:57:34 +0200 Subject: [PATCH 09/11] content redundancy removed Signed-off-by: Katharina Trentau --- .../scs-0211-v2-kaas-default-storage-class.md | 30 ++++++++----------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/Standards/scs-0211-v2-kaas-default-storage-class.md b/Standards/scs-0211-v2-kaas-default-storage-class.md index 596a16bb6..d23140aaa 100644 --- a/Standards/scs-0211-v2-kaas-default-storage-class.md +++ b/Standards/scs-0211-v2-kaas-default-storage-class.md @@ -30,34 +30,28 @@ object that is annotated with `storageclass.kubernetes.io/is-default-class=true` [Kubernetes documentation][k8s-default-sc]. The name of this storage class is not standardized. -The persistent volumes (PV) provisioned by the provided default storage class MUST fulfill all -of the following properties: - -- MUST support the `ReadWriteOnce` [access mode][k8s-accessmode]. -- MUST NOT be backed by local or ephemeral storage. -- MUST NOT be bound to the lifecycle of a Kubernetes node. - -The provisioned storage class MAY support volume expansion (`allowVolumeExpansion=true`). - ### Recommended non-performance-related properties The following recommendations cannot be checked without further ado and therefore do not represent hard requirement criteria. Nevertheless, they are important prerequisites for ensuring data storage stability: -- `ReadWriteOnce` should be a supported [access mode](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) -- volume should be protected against data loss due to hardware failures of a single disk or host -- volume should not be bound to the lifecycle of a Kubernetes Node +If the persistent volumes (PV) provisioned by the provided default storage class are required to be failure-safe they MUST fulfill all +of the following properties: -Hence, +- MUST support the `ReadWriteOnce` [access mode][k8s-accessmode]. +- MUST NOT be bound to the lifecycle of a Kubernetes node. +- MUST NOT be backed by local or ephemeral storage.\ + This means: + - MUST NOT be backed by local storage on the Kubernetes Node VM itself. + - MAY be backed by some kind of redundant storage within an AZ, across hosts. + - MAY be backed by some kind of redundant storage across AZ's. -- ...volume should not be backed by local storage on the Kubernetes Node VM itself -- ...volume may be backed by some kind of redundant storage within an AZ, across hosts -- ...volume may be backed by some kind of redundant storage across AZ's +Volumes that are not necessarily required to be failure-safe may be local/node-bound/non-redundant. This might be the case with fast to run applications that take care of data durability and availability on application level. -- volumes that are not necessarily required to be failure-safe may be local/node-bound/non-redundant, possibly fast to run applications that take care of data durability and availability on application level +The provisioned storage class MAY support volume expansion (`allowVolumeExpansion=true`). ### Required performance-related properties -- _NO_ fixed guarantees regarding latency/bandwidth/IOPS/... +- _NO_ fixed guarantees regarding latency/bandwidth/IOPS/etc. Generally, customers should be able to expect low-tier performance without pricing surprises. ## Previous standard versions From 4aa390ffb84e42eee5320800d799144b101ca0e4 Mon Sep 17 00:00:00 2001 From: Katharina Trentau Date: Wed, 28 Aug 2024 12:03:28 +0200 Subject: [PATCH 10/11] provisioner list Signed-off-by: Katharina Trentau --- Standards/scs-0211-v2-kaas-default-storage-class.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Standards/scs-0211-v2-kaas-default-storage-class.md b/Standards/scs-0211-v2-kaas-default-storage-class.md index d23140aaa..7e91ce815 100644 --- a/Standards/scs-0211-v2-kaas-default-storage-class.md +++ b/Standards/scs-0211-v2-kaas-default-storage-class.md @@ -32,7 +32,7 @@ The name of this storage class is not standardized. ### Recommended non-performance-related properties -The following recommendations cannot be checked without further ado and therefore do not represent hard requirement criteria. Nevertheless, they are important prerequisites for ensuring data storage stability: +The following recommendations are not completely tested yet and therefore do not represent hard requirement criteria so far. Nevertheless, they are important prerequisites for ensuring data storage stability. Generally, these criteria are met by choosing the right provisioner such as Cinder CSI Provisioner. And this shall be cross-checked against a list of provisioners. If the persistent volumes (PV) provisioned by the provided default storage class are required to be failure-safe they MUST fulfill all of the following properties: @@ -43,7 +43,7 @@ of the following properties: This means: - MUST NOT be backed by local storage on the Kubernetes Node VM itself. - MAY be backed by some kind of redundant storage within an AZ, across hosts. - - MAY be backed by some kind of redundant storage across AZ's. + - MAY be backed by some kind of redundant storage across AZ's. Volumes that are not necessarily required to be failure-safe may be local/node-bound/non-redundant. This might be the case with fast to run applications that take care of data durability and availability on application level. From 63c1cf751ff9ba05f09dbd748a042dd33c8dd9df Mon Sep 17 00:00:00 2001 From: Katharina Trentau Date: Thu, 29 Aug 2024 09:26:31 +0200 Subject: [PATCH 11/11] fixed trailing space Signed-off-by: Katharina Trentau --- Standards/scs-0211-v2-kaas-default-storage-class.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Standards/scs-0211-v2-kaas-default-storage-class.md b/Standards/scs-0211-v2-kaas-default-storage-class.md index 7e91ce815..f535b9ae4 100644 --- a/Standards/scs-0211-v2-kaas-default-storage-class.md +++ b/Standards/scs-0211-v2-kaas-default-storage-class.md @@ -43,7 +43,7 @@ of the following properties: This means: - MUST NOT be backed by local storage on the Kubernetes Node VM itself. - MAY be backed by some kind of redundant storage within an AZ, across hosts. - - MAY be backed by some kind of redundant storage across AZ's. + - MAY be backed by some kind of redundant storage across AZ's. Volumes that are not necessarily required to be failure-safe may be local/node-bound/non-redundant. This might be the case with fast to run applications that take care of data durability and availability on application level. @@ -61,7 +61,7 @@ existence of a default storage class in a newly created cluster. ## Conformance Tests -TBD +Is currently under progress [stage: pull-request](https://github.com/SovereignCloudStack/standards/pull/658). [k8s-pvc]: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims [k8s-default-sc]: https://kubernetes.io/docs/tasks/administer-cluster/change-default-storage-class/