Repository: kubernetes/website
Pull request #49801: KEP-4049: Add StorageCapacityScoring feature gate documents
Author: login: cupnes
Labels: name: cncf-cla: yes
description: Indicates the PR's author has signed the CNCF CLA.
name: size/M
description: Denotes a PR that changes 30-99 lines, ignoring generated files.
name: lgtm
description: "Looks good to me", indicates that a PR is ready to be merged.
name: approved
description: Indicates a PR has been approved by an approver from all required OWNERS files.
name: language/en
description: Issues or PRs related to English language
Created: 2025-02-17T01:12:56Z | Merged: 2025-04-08T01:00:53Z

<!--
 Hello!

 PLEASE title the FIRST commit appropriately, so that if you squash all
 your commits into one, the combined commit message makes sense.
 For overall help on editing and submitting pull requests, visit:
  https://kubernetes.io/docs/contribute/suggesting-improvements/

 Use the default base branch, “main”, if you're documenting existing
 features in the English localization.

 If you're working on a different localization (not English), see
 https://kubernetes.io/docs/contribute/new-content/overview/#choose-which-git-branch-to-use
 for advice.

 If you're documenting a feature that will be part of a future release, see
 https://kubernetes.io/docs/contribute/new-content/new-features/ for advice.
-->
### Description

<!--
 Remember to ADD A DESCRIPTION and delete this note before submitting
 your pull request. The description should explain what will change,
 and why.
-->

This PR updates existing documentation to include the addition of the StorageCapacityScoring feature gate of KEP-4049  as an alpha version.

### Issue

<!--
 If this pull request resolves an open issue, please link the issue in the PR
 description so it will automatically close when the PR is merged.

 See the GitHub documentation for more details and other options:

 https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword
-->

- https://github.com/kubernetes/enhancements/issues/4049


Diff:
diff --git a/content/en/docs/concepts/scheduling-eviction/scheduling-framework.md b/content/en/docs/concepts/scheduling-eviction/scheduling-framework.md
index d76ad3e1d0809..8ec66e96c2f1a 100644
--- a/content/en/docs/concepts/scheduling-eviction/scheduling-framework.md
+++ b/content/en/docs/concepts/scheduling-eviction/scheduling-framework.md
@@ -130,6 +130,18 @@ defined range of integers representing the minimum and maximum scores. After the
 [NormalizeScore](#normalize-scoring) phase, the scheduler will combine node
 scores from all plugins according to the configured plugin weights.
 
+#### Capacity scoring {#scoring-capacity}
+
+{{< feature-state feature_gate_name="StorageCapacityScoring" >}}
+
+The feature gate `VolumeCapacityPriority` was used in v1.32 to support storage that are
+statically provisioned. Starting from v1.33, the new feature gate `StorageCapacityScoring`
+replaces the old `VolumeCapacityPriority` gate with added support to dynamically provisioned storage.
+When `StorageCapacityScoring` is enabled, the VolumeBinding plugin in the kube-scheduler is extended
+to score Nodes based on the storage capacity on each of them.
+This feature is applicable to CSI volumes that supported [Storage Capacity](/docs/concepts/storage/storage-capacity/),
+including local storage backed by a CSI driver.
+
 ### NormalizeScore {#normalize-scoring}
 
 These plugins are used to modify scores before the scheduler computes a final
diff --git a/content/en/docs/reference/command-line-tools-reference/feature-gates/StorageCapacityScoring.md b/content/en/docs/reference/command-line-tools-reference/feature-gates/StorageCapacityScoring.md
new file mode 100644
index 0000000000000..8c75f23dd7412
--- /dev/null
+++ b/content/en/docs/reference/command-line-tools-reference/feature-gates/StorageCapacityScoring.md
@@ -0,0 +1,19 @@
+---
+title: StorageCapacityScoring
+content_type: feature_gate
+_build:
+  list: never
+  render: false
+
+stages:
+  - stage: alpha
+    defaultValue: false
+    fromVersion: "1.33"
+---
+The feature gate `VolumeCapacityPriority` was used in v1.32 to support storage that are
+statically provisioned. Starting from v1.33, the new feature gate `StorageCapacityScoring`
+replaces the old `VolumeCapacityPriority` gate with added support to dynamically provisioned storage.
+When `StorageCapacityScoring` is enabled, the VolumeBinding plugin in the kube-scheduler is extended
+to score Nodes based on the storage capacity on each of them.
+This feature is applicable to CSI volumes that supported [Storage Capacity](/docs/concepts/storage/storage-capacity/),
+including local storage backed by a CSI driver.
diff --git a/content/en/docs/reference/command-line-tools-reference/feature-gates/VolumeCapacityPriority.md b/content/en/docs/reference/command-line-tools-reference/feature-gates/VolumeCapacityPriority.md
index d1bfcf30428b8..fd6f3e2751341 100644
--- a/content/en/docs/reference/command-line-tools-reference/feature-gates/VolumeCapacityPriority.md
+++ b/content/en/docs/reference/command-line-tools-reference/feature-gates/VolumeCapacityPriority.md
@@ -9,6 +9,9 @@ stages:
   - stage: alpha 
     defaultValue: false
     fromVersion: "1.21"
+    toVersion: "1.32"
+
+removed: true
 ---
 Enable support for prioritizing nodes in different
 topologies based on available PV capacity.
diff --git a/content/en/docs/reference/scheduling/config.md b/content/en/docs/reference/scheduling/config.md
index 6b303beb39b9a..5bf74097b496d 100644
--- a/content/en/docs/reference/scheduling/config.md
+++ b/content/en/docs/reference/scheduling/config.md
@@ -143,7 +143,7 @@ extension points:
   {{< glossary_tooltip text="volumes" term_id="volume" >}}.
   Extension points: `preFilter`, `filter`, `reserve`, `preBind`, `score`.
   {{< note >}}
-  `score` extension point is enabled when `VolumeCapacityPriority` feature is
+  `score` extension point is enabled when `StorageCapacityScoring` feature is
   enabled. It prioritizes the smallest PVs that can fit the requested volume
   size.
   {{< /note >}}
@@ -332,14 +332,14 @@ The general hierarchy for precedence when configuring `MultiPoint` plugins is as
 3. Default plugins and their default settings
 
 To demonstrate the above hierarchy, the following example is based on these plugins:
-|Plugin|Extension Points|
-|---|---|
-|`DefaultQueueSort`|`QueueSort`|
-|`CustomQueueSort`|`QueueSort`|
-|`DefaultPlugin1`|`Score`, `Filter`|
-|`DefaultPlugin2`|`Score`|
-|`CustomPlugin1`|`Score`, `Filter`|
-|`CustomPlugin2`|`Score`, `Filter`|
+| Plugin             | Extension Points  |
+| ------------------ | ----------------- |
+| `DefaultQueueSort` | `QueueSort`       |
+| `CustomQueueSort`  | `QueueSort`       |
+| `DefaultPlugin1`   | `Score`, `Filter` |
+| `DefaultPlugin2`   | `Score`           |
+| `CustomPlugin1`    | `Score`, `Filter` |
+| `CustomPlugin2`    | `Score`, `Filter` |
 
 A valid sample configuration for these plugins would be:
 


Reviews:
user: login: sftim
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-02-17T10:13:08Z
user: login: cupnes
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-02-17T10:23:25Z
user: login: dipesh-rawat
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-02-18T00:26:13Z
user: login: cupnes
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-02-20T09:00:31Z
user: login: cupnes
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-02-20T09:08:30Z
user: login: tengqm
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-18T09:31:53Z
user: login: sftim
body: /hold

Older Kubernetes versions included a feature gate named `VolumeCapacityPriority` and this fact will not change. We should make sure to document that the feature gate previously had an effect.

Preemptive hold to make sure we don't actually miss that detail.
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-18T22:28:40Z
user: login: cupnes
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-19T00:39:25Z
user: login: cupnes
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-25T05:07:42Z
user: login: tengqm
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T08:02:51Z
user: login: cupnes
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T09:30:20Z
user: login: cupnes
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T09:30:34Z
user: login: cupnes
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T09:31:43Z
user: login: tengqm
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-05T09:30:33Z
user: login: cupnes
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-07T00:05:40Z
user: login: tengqm
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-07T00:48:01Z
user: login: cupnes
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-07T00:59:01Z
user: login: cupnes
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-07T01:14:27Z
user: login: cupnes
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-07T01:16:29Z
user: login: tengqm
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-07T01:17:15Z
user: login: cupnes
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-07T01:19:28Z
user: login: cupnes
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-07T01:34:24Z
user: login: cupnes
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-07T01:56:36Z

Review comments:
diff_hunk: @@ -130,6 +130,15 @@ defined range of integers representing the minimum and maximum scores. After the
 [NormalizeScore](#normalize-scoring) phase, the scheduler will combine node
 scores from all plugins according to the configured plugin weights.
 
+#### Capacity scoring {#scoring-capacity}
+
+{{< feature-state feature_gate_name="StorageCapacityScoring" >}}
+
+Nodes can be scored based on their available storage capacity. This only applies
+when not using static provisioning
+([dynamic provisioning](/docs/concepts/storage/dynamic-provisioning/) only), and
+this feature is currently in alpha.
path: content/en/docs/concepts/scheduling-eviction/scheduling-framework.md
user: login: sftim
body: Early feedback: I think this detail would belong in https://kubernetes.io/docs/reference/scheduling/config/#scheduling-plugins
created_at: 2025-02-17T10:13:08Z
author_association: CONTRIBUTOR
diff_hunk: @@ -130,6 +130,15 @@ defined range of integers representing the minimum and maximum scores. After the
 [NormalizeScore](#normalize-scoring) phase, the scheduler will combine node
 scores from all plugins according to the configured plugin weights.
 
+#### Capacity scoring {#scoring-capacity}
+
+{{< feature-state feature_gate_name="StorageCapacityScoring" >}}
+
+Nodes can be scored based on their available storage capacity. This only applies
+when not using static provisioning
+([dynamic provisioning](/docs/concepts/storage/dynamic-provisioning/) only), and
+this feature is currently in alpha.
path: content/en/docs/concepts/scheduling-eviction/scheduling-framework.md
user: login: cupnes
body: Thank you. I will address it once the work on [the k/k PR](https://github.com/kubernetes/kubernetes/pull/128184) is complete.
created_at: 2025-02-17T10:23:25Z
author_association: CONTRIBUTOR
path: content/en/docs/reference/command-line-tools-reference/feature-gates/storage-capacity-scoring.md
user: login: dipesh-rawat
body: Could you also please update the feature gate file name to follow the new naming convention, `StorageCapacityScoring.md`? 
We’ve recently updated guidelines for feature reference files - https://kubernetes.io/docs/contribute/new-content/new-features/#ready-for-review-feature-gates
created_at: 2025-02-18T00:26:13Z
author_association: MEMBER
diff_hunk: @@ -130,6 +130,15 @@ defined range of integers representing the minimum and maximum scores. After the
 [NormalizeScore](#normalize-scoring) phase, the scheduler will combine node
 scores from all plugins according to the configured plugin weights.
 
+#### Capacity scoring {#scoring-capacity}
+
+{{< feature-state feature_gate_name="StorageCapacityScoring" >}}
+
+Nodes can be scored based on their available storage capacity. This only applies
+when not using static provisioning
+([dynamic provisioning](/docs/concepts/storage/dynamic-provisioning/) only), and
+this feature is currently in alpha.
path: content/en/docs/concepts/scheduling-eviction/scheduling-framework.md
user: login: cupnes
body: I will add to that document once the feature gate is enabled by default.
created_at: 2025-02-20T09:00:31Z
author_association: CONTRIBUTOR
path: content/en/docs/reference/command-line-tools-reference/feature-gates/storage-capacity-scoring.md
user: login: cupnes
body: I addressed it.
created_at: 2025-02-20T09:08:29Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,14 @@
+---
+title: StorageCapacityScoring
+content_type: feature_gate
+_build:
+  list: never
+  render: false
+
+stages:
+  - stage: alpha
+    defaultValue: false
+    fromVersion: "1.33"
+---
+Enable the feature that scores nodes based on available
+storage capacity.
path: content/en/docs/reference/command-line-tools-reference/feature-gates/StorageCapacityScoring.md
user: login: tengqm
body: - We are renaming an existing feature gate?
- What kind of storage are we talking about? Local disk? Including ephemeral?
- Which component(s) are affected? Looks like kube-scheduler is unavoidable, any other components affected?
created_at: 2025-03-18T09:31:53Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,14 @@
+---
+title: StorageCapacityScoring
+content_type: feature_gate
+_build:
+  list: never
+  render: false
+
+stages:
+  - stage: alpha
+    defaultValue: false
+    fromVersion: "1.33"
+---
+Enable the feature that scores nodes based on available
+storage capacity.
path: content/en/docs/reference/command-line-tools-reference/feature-gates/StorageCapacityScoring.md
user: login: cupnes
body: I understood. I will add those explanations.
created_at: 2025-03-19T00:39:25Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,14 @@
+---
+title: StorageCapacityScoring
+content_type: feature_gate
+_build:
+  list: never
+  render: false
+
+stages:
+  - stage: alpha
+    defaultValue: false
+    fromVersion: "1.33"
+---
+Enable the feature that scores nodes based on available
+storage capacity.
path: content/en/docs/reference/command-line-tools-reference/feature-gates/StorageCapacityScoring.md
user: login: cupnes
body: I have updated the content to answer your question. Could you please review it again?
created_at: 2025-03-25T05:07:42Z
author_association: CONTRIBUTOR
diff_hunk: @@ -130,6 +130,18 @@ defined range of integers representing the minimum and maximum scores. After the
 [NormalizeScore](#normalize-scoring) phase, the scheduler will combine node
 scores from all plugins according to the configured plugin weights.
 
+#### Capacity scoring {#scoring-capacity}
+
+{{< feature-state feature_gate_name="StorageCapacityScoring" >}}
+
+Nodes can be scored based on their available storage capacity. Originally
+extended `VolumeCapacityPriority` (for static provisioning) to dynamic
+provisioning. Now handles both functions since `VolumeCapacityPriority` was
+removed as a feature gate. Extends kube-scheduler's VolumeBinding plugin and
+uses Storage Capacity Tracking supported CSI plugins. Available for
+CSI-managed persistent volumes, including local storage when supported by the
+CSI driver. This feature is currently in alpha.
path: content/en/docs/concepts/scheduling-eviction/scheduling-framework.md
user: login: tengqm
body: Most of these are not complete sentences, i.e. no subjects in them.
Could you please fix?
created_at: 2025-04-04T08:01:16Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,20 @@
+---
+title: StorageCapacityScoring
+content_type: feature_gate
+_build:
+  list: never
+  render: false
+
+stages:
+  - stage: alpha
+    defaultValue: false
+    fromVersion: "1.33"
+---
+Enable node scoring based on available storage capacity.
+Originally extended `VolumeCapacityPriority` (for static
+provisioning) to dynamic provisioning. Now handles both
+functions since `VolumeCapacityPriority` was removed.
+Extends kube-scheduler's VolumeBinding plugin and uses
+Storage Capacity Tracking supported CSI plugins.
+Available for CSI-managed persistent volumes, including
+local storage when supported by the CSI driver.
path: content/en/docs/reference/command-line-tools-reference/feature-gates/StorageCapacityScoring.md
user: login: tengqm
body: Please revise this text to use complete sentences.

created_at: 2025-04-04T08:01:50Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,14 +0,0 @@
----
-title: VolumeCapacityPriority
-content_type: feature_gate
-_build:
-  list: never
-  render: false
-
-stages:
-  - stage: alpha 
-    defaultValue: false
-    fromVersion: "1.21"
----
-Enable support for prioritizing nodes in different
path: content/en/docs/reference/command-line-tools-reference/feature-gates/VolumeCapacityPriority.md
user: login: tengqm
body: Why delete this ?
No feature gate file is supposed to be deleted.
created_at: 2025-04-04T08:02:24Z
author_association: CONTRIBUTOR
diff_hunk: @@ -130,6 +130,18 @@ defined range of integers representing the minimum and maximum scores. After the
 [NormalizeScore](#normalize-scoring) phase, the scheduler will combine node
 scores from all plugins according to the configured plugin weights.
 
+#### Capacity scoring {#scoring-capacity}
+
+{{< feature-state feature_gate_name="StorageCapacityScoring" >}}
+
+Nodes can be scored based on their available storage capacity. Originally
+extended `VolumeCapacityPriority` (for static provisioning) to dynamic
+provisioning. Now handles both functions since `VolumeCapacityPriority` was
+removed as a feature gate. Extends kube-scheduler's VolumeBinding plugin and
+uses Storage Capacity Tracking supported CSI plugins. Available for
+CSI-managed persistent volumes, including local storage when supported by the
+CSI driver. This feature is currently in alpha.
path: content/en/docs/concepts/scheduling-eviction/scheduling-framework.md
user: login: cupnes
body: Thank you. I addressed it.
created_at: 2025-04-04T09:30:19Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,20 @@
+---
+title: StorageCapacityScoring
+content_type: feature_gate
+_build:
+  list: never
+  render: false
+
+stages:
+  - stage: alpha
+    defaultValue: false
+    fromVersion: "1.33"
+---
+Enable node scoring based on available storage capacity.
+Originally extended `VolumeCapacityPriority` (for static
+provisioning) to dynamic provisioning. Now handles both
+functions since `VolumeCapacityPriority` was removed.
+Extends kube-scheduler's VolumeBinding plugin and uses
+Storage Capacity Tracking supported CSI plugins.
+Available for CSI-managed persistent volumes, including
+local storage when supported by the CSI driver.
path: content/en/docs/reference/command-line-tools-reference/feature-gates/StorageCapacityScoring.md
user: login: cupnes
body: I addressed it.
created_at: 2025-04-04T09:30:34Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,14 +0,0 @@
----
-title: VolumeCapacityPriority
-content_type: feature_gate
-_build:
-  list: never
-  render: false
-
-stages:
-  - stage: alpha 
-    defaultValue: false
-    fromVersion: "1.21"
----
-Enable support for prioritizing nodes in different
path: content/en/docs/reference/command-line-tools-reference/feature-gates/VolumeCapacityPriority.md
user: login: cupnes
body: Sorry. It was my mistake. I reverted this file. And I appended `toVersion: "1.33"` and `removed: true`.
created_at: 2025-04-04T09:31:43Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,14 +0,0 @@
----
-title: VolumeCapacityPriority
-content_type: feature_gate
-_build:
-  list: never
-  render: false
-
-stages:
-  - stage: alpha 
-    defaultValue: false
-    fromVersion: "1.21"
----
-Enable support for prioritizing nodes in different
path: content/en/docs/reference/command-line-tools-reference/feature-gates/VolumeCapacityPriority.md
user: login: tengqm
body: The `toVersion` is inclusive. If the gate is gone in 1.33, that means the alpha stage ends in "1.32", not "1.33".

created_at: 2025-04-05T09:30:33Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,14 +0,0 @@
----
-title: VolumeCapacityPriority
-content_type: feature_gate
-_build:
-  list: never
-  render: false
-
-stages:
-  - stage: alpha 
-    defaultValue: false
-    fromVersion: "1.21"
----
-Enable support for prioritizing nodes in different
path: content/en/docs/reference/command-line-tools-reference/feature-gates/VolumeCapacityPriority.md
user: login: cupnes
body: Thank you. I fixed it.
created_at: 2025-04-07T00:05:39Z
author_association: CONTRIBUTOR
diff_hunk: @@ -130,6 +130,23 @@ defined range of integers representing the minimum and maximum scores. After the
 [NormalizeScore](#normalize-scoring) phase, the scheduler will combine node
 scores from all plugins according to the configured plugin weights.
 
+#### Capacity scoring {#scoring-capacity}
+
+{{< feature-state feature_gate_name="StorageCapacityScoring" >}}
+
+This feature adds a scoring method for pod scheduling with
+[the topology-aware volume provisioning](/blog/2018/10/11/topology-aware-volume-provisioning-in-kubernetes/).
+This feature eases to schedule pods on nodes with either the most or least
path: content/en/docs/concepts/scheduling-eviction/scheduling-framework.md
user: login: tengqm
body: ```suggestion
This feature enables pods to be scheduled to nodes with either the most or least
```
created_at: 2025-04-07T00:44:12Z
author_association: CONTRIBUTOR
diff_hunk: @@ -130,6 +130,23 @@ defined range of integers representing the minimum and maximum scores. After the
 [NormalizeScore](#normalize-scoring) phase, the scheduler will combine node
 scores from all plugins according to the configured plugin weights.
 
+#### Capacity scoring {#scoring-capacity}
+
+{{< feature-state feature_gate_name="StorageCapacityScoring" >}}
+
+This feature adds a scoring method for pod scheduling with
+[the topology-aware volume provisioning](/blog/2018/10/11/topology-aware-volume-provisioning-in-kubernetes/).
+This feature eases to schedule pods on nodes with either the most or least
+available storage capacity. This feature originally extended the
path: content/en/docs/concepts/scheduling-eviction/scheduling-framework.md
user: login: tengqm
body: ? "extended" what?
created_at: 2025-04-07T00:46:19Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,23 @@
+---
+title: StorageCapacityScoring
+content_type: feature_gate
+_build:
+  list: never
+  render: false
+
+stages:
+  - stage: alpha
+    defaultValue: false
+    fromVersion: "1.33"
+---
+This feature adds a scoring method for pod scheduling with
+[the topology-aware volume provisioning](/blog/2018/10/11/topology-aware-volume-provisioning-in-kubernetes/).
+This feature eases to schedule pods on nodes with either the most or least
path: content/en/docs/reference/command-line-tools-reference/feature-gates/StorageCapacityScoring.md
user: login: tengqm
body: This sentence could use some help from native speakers.

created_at: 2025-04-07T00:47:55Z
author_association: CONTRIBUTOR
diff_hunk: @@ -130,6 +130,23 @@ defined range of integers representing the minimum and maximum scores. After the
 [NormalizeScore](#normalize-scoring) phase, the scheduler will combine node
 scores from all plugins according to the configured plugin weights.
 
+#### Capacity scoring {#scoring-capacity}
+
+{{< feature-state feature_gate_name="StorageCapacityScoring" >}}
+
+This feature adds a scoring method for pod scheduling with
+[the topology-aware volume provisioning](/blog/2018/10/11/topology-aware-volume-provisioning-in-kubernetes/).
+This feature eases to schedule pods on nodes with either the most or least
+available storage capacity. This feature originally extended the
path: content/en/docs/concepts/scheduling-eviction/scheduling-framework.md
user: login: cupnes
body: Originally, `StorageCapacityScoring` was a feature that added dynamic provisioning support to `VolumeCapacityPriority`, which only supported static provisioning. However, because `VolumeCapacityPriority` was going to be removed, `StorageCapacityScoring` became the feature gate that includes both static and dynamic provisioning.

Would "added" be more appropriate than "extended" in this context?
created_at: 2025-04-07T00:59:01Z
author_association: CONTRIBUTOR
diff_hunk: @@ -130,6 +130,23 @@ defined range of integers representing the minimum and maximum scores. After the
 [NormalizeScore](#normalize-scoring) phase, the scheduler will combine node
 scores from all plugins according to the configured plugin weights.
 
+#### Capacity scoring {#scoring-capacity}
+
+{{< feature-state feature_gate_name="StorageCapacityScoring" >}}
+
+This feature adds a scoring method for pod scheduling with
+[the topology-aware volume provisioning](/blog/2018/10/11/topology-aware-volume-provisioning-in-kubernetes/).
+This feature eases to schedule pods on nodes with either the most or least
path: content/en/docs/concepts/scheduling-eviction/scheduling-framework.md
user: login: cupnes
body: I addressed it.
created_at: 2025-04-07T01:14:27Z
author_association: CONTRIBUTOR
diff_hunk: @@ -130,6 +130,23 @@ defined range of integers representing the minimum and maximum scores. After the
 [NormalizeScore](#normalize-scoring) phase, the scheduler will combine node
 scores from all plugins according to the configured plugin weights.
 
+#### Capacity scoring {#scoring-capacity}
+
+{{< feature-state feature_gate_name="StorageCapacityScoring" >}}
+
+This feature adds a scoring method for pod scheduling with
+[the topology-aware volume provisioning](/blog/2018/10/11/topology-aware-volume-provisioning-in-kubernetes/).
+This feature eases to schedule pods on nodes with either the most or least
+available storage capacity. This feature originally extended the
path: content/en/docs/concepts/scheduling-eviction/scheduling-framework.md
user: login: cupnes
body: I have modified this sentence as follows.

> Originally, `StorageCapacityScoring` was a feature that added dynamic provisioning support to `VolumeCapacityPriority`, which only supported static provisioning. However, because `VolumeCapacityPriority` was going to be removed, `StorageCapacityScoring` became the feature gate that includes both static and dynamic provisioning.
created_at: 2025-04-07T01:16:29Z
author_association: CONTRIBUTOR
diff_hunk: @@ -130,6 +130,23 @@ defined range of integers representing the minimum and maximum scores. After the
 [NormalizeScore](#normalize-scoring) phase, the scheduler will combine node
 scores from all plugins according to the configured plugin weights.
 
+#### Capacity scoring {#scoring-capacity}
+
+{{< feature-state feature_gate_name="StorageCapacityScoring" >}}
+
+This feature adds a scoring method for pod scheduling with
+[the topology-aware volume provisioning](/blog/2018/10/11/topology-aware-volume-provisioning-in-kubernetes/).
+This feature eases to schedule pods on nodes with either the most or least
+available storage capacity. This feature originally extended the
path: content/en/docs/concepts/scheduling-eviction/scheduling-framework.md
user: login: tengqm
body: How about this?
> The feature gate `VolumeCapacityPriority` was used in v1.32 to support storage that are
> statically provisioned. Starting from v1.33, the new feature gate `StorageCapacityScoring`
> replaces the old `VolumeCapacityPriority` gate with added support to dynamically provisioned storage.
> When `VolumeCapacityScoring` is enabled, the VolumeBinding plugin in the kube-scheduler is extended
> to score Nodes based on the storage capacity on each of them.
> This feature is applicable to all CSI volumes, including local storage backed by
> a CSI driver.

created_at: 2025-04-07T01:17:15Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,23 @@
+---
+title: StorageCapacityScoring
+content_type: feature_gate
+_build:
+  list: never
+  render: false
+
+stages:
+  - stage: alpha
+    defaultValue: false
+    fromVersion: "1.33"
+---
+This feature adds a scoring method for pod scheduling with
+[the topology-aware volume provisioning](/blog/2018/10/11/topology-aware-volume-provisioning-in-kubernetes/).
+This feature eases to schedule pods on nodes with either the most or least
path: content/en/docs/reference/command-line-tools-reference/feature-gates/StorageCapacityScoring.md
user: login: cupnes
body: Unfortunately, I don't have any native English speakers near me...
created_at: 2025-04-07T01:19:28Z
author_association: CONTRIBUTOR
diff_hunk: @@ -130,6 +130,23 @@ defined range of integers representing the minimum and maximum scores. After the
 [NormalizeScore](#normalize-scoring) phase, the scheduler will combine node
 scores from all plugins according to the configured plugin weights.
 
+#### Capacity scoring {#scoring-capacity}
+
+{{< feature-state feature_gate_name="StorageCapacityScoring" >}}
+
+This feature adds a scoring method for pod scheduling with
+[the topology-aware volume provisioning](/blog/2018/10/11/topology-aware-volume-provisioning-in-kubernetes/).
+This feature eases to schedule pods on nodes with either the most or least
+available storage capacity. This feature originally extended the
path: content/en/docs/concepts/scheduling-eviction/scheduling-framework.md
user: login: cupnes
body: Thank you very much!

> When `VolumeCapacityScoring` is enabled,

(I think this is just a typo) It should be `StorageCapacityScoring` now.

> This feature is applicable to all CSI volumes,

The phrase "all CSI volumes" could be a bit misleading. This feature requires storage capacity information obtained from [Storage Capacity](https://kubernetes.io/docs/concepts/storage/storage-capacity/). Therefore, CSI volumes that do not support [Storage Capacity](https://kubernetes.io/docs/concepts/storage/storage-capacity/) are not covered by this feature.

Nevertheless, thank you. I will try to revise the text based on your comments.
created_at: 2025-04-07T01:34:24Z
author_association: CONTRIBUTOR
diff_hunk: @@ -130,6 +130,23 @@ defined range of integers representing the minimum and maximum scores. After the
 [NormalizeScore](#normalize-scoring) phase, the scheduler will combine node
 scores from all plugins according to the configured plugin weights.
 
+#### Capacity scoring {#scoring-capacity}
+
+{{< feature-state feature_gate_name="StorageCapacityScoring" >}}
+
+This feature adds a scoring method for pod scheduling with
+[the topology-aware volume provisioning](/blog/2018/10/11/topology-aware-volume-provisioning-in-kubernetes/).
+This feature eases to schedule pods on nodes with either the most or least
+available storage capacity. This feature originally extended the
path: content/en/docs/concepts/scheduling-eviction/scheduling-framework.md
user: login: cupnes
body: I addressed it.
created_at: 2025-04-07T01:56:36Z
author_association: CONTRIBUTOR

PR comments:
user: login: netlify[bot]
created_at: 2025-02-17T01:13:23Z
body: ### <span aria-hidden="true">👷</span> Deploy Preview for *kubernetes-io-vnext-staging* processing.


|  Name | Link |
|:-:|------------------------|
|<span aria-hidden="true">🔨</span> Latest commit | 9ef3b682386b662d9d6d22f0156821d58c260ae8 |
|<span aria-hidden="true">🔍</span> Latest deploy log | https://app.netlify.com/sites/kubernetes-io-vnext-staging/deploys/67f330b97ae557000902a35b |
author_association: NONE
user: login: cupnes
created_at: 2025-02-17T01:15:00Z
body: I will add a commit about [this comment](https://github.com/kubernetes/kubernetes/pull/128184#issuecomment-2628523423). So, I created this PR as a draft.
author_association: CONTRIBUTOR
user: login: netlify[bot]
created_at: 2025-02-17T01:23:15Z
body: ### <span aria-hidden="true">✅</span> Pull request preview available for checking
Built [without sensitive environment variables](https://docs.netlify.com/configure-builds/environment-variables/#sensitive-variable-policy)

|  Name | Link |
|:-:|------------------------|
|<span aria-hidden="true">🔨</span> Latest commit | 9ef3b682386b662d9d6d22f0156821d58c260ae8 |
|<span aria-hidden="true">🔍</span> Latest deploy log | https://app.netlify.com/sites/kubernetes-io-main-staging/deploys/67f330b99cc8c50008401d14 |
|<span aria-hidden="true">😎</span> Deploy Preview | [https://deploy-preview-49801--kubernetes-io-main-staging.netlify.app](https://deploy-preview-49801--kubernetes-io-main-staging.netlify.app) |
|<span aria-hidden="true">📱</span> Preview on mobile | <details><summary> Toggle QR Code... </summary><br /><br />![QR Code](https://app.netlify.com/qr-code/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1cmwiOiJodHRwczovL2RlcGxveS1wcmV2aWV3LTQ5ODAxLS1rdWJlcm5ldGVzLWlvLW1haW4tc3RhZ2luZy5uZXRsaWZ5LmFwcCJ9.oZn9-Gdr17CdApCNkWPK1rdOitFIkjEzhMz7cHNG7uM)<br /><br />_Use your smartphone camera to open QR code link._</details> |
---
<!-- [kubernetes-io-main-staging Preview](https://deploy-preview-49801--kubernetes-io-main-staging.netlify.app) -->
_To edit notification comments on pull requests, go to your [Netlify site configuration](https://app.netlify.com/sites/kubernetes-io-main-staging/configuration/notifications#deploy-webhooks)._
author_association: NONE
user: login: cupnes
created_at: 2025-03-19T00:41:15Z
body: @sftim 
I understood. I will add the explanation.
author_association: CONTRIBUTOR
user: login: xing-yang
created_at: 2025-03-24T15:39:36Z
body: @cupnes I assume this doc PR is ready to review?  Can you please remove "Draft" status?  Thanks.
author_association: CONTRIBUTOR
user: login: cupnes
created_at: 2025-03-25T00:59:21Z
body: @xing-yang I will address the comments from [tengqm](https://github.com/kubernetes/website/pull/49801#discussion_r2000585166) and [sftim](https://github.com/kubernetes/website/pull/49801#pullrequestreview-2696456244). Additionally, I will replace `VolumeCapacityPriority` with `StorageCapacityScoring` in the command documentation, such as kubelet.md, located at content/en/docs/reference/command-line-tools-reference/. (I'm currently working on this according to [this document](https://kubernetes.io/docs/contribute/generate-ref-docs/kubectl/).) Therefore, I cannot remove the "Draft" status yet.
author_association: CONTRIBUTOR
user: login: cupnes
created_at: 2025-03-25T05:08:09Z
body: @sftim 
I have updated the content to include your suggested points. Could you please review it again?
author_association: CONTRIBUTOR
user: login: cupnes
created_at: 2025-03-25T05:11:42Z
body: @sftim @dipesh-rawat @tengqm @xing-yang 
I would like to replace the feature gate name `VolumeCapacityPriority` with `StorageCapacityScoring` in the following documents. These documents are automatically generated, and I believe the update procedure is described in [this documentation](https://kubernetes.io/docs/contribute/generate-ref-docs/kubectl/). Is this correct? If so, the procedure in the documentation requires checking out a release tag from the kubernetes/kubernetes repository, but there is no v1.33.0 tag in kubernetes/kubernetes yet. Could you tell me what I should do?

- https://github.com/kubernetes/website/blob/e63cc33fb676d06e9c71a4fc9d2ef9eb2c137f72/content/en/docs/reference/command-line-tools-reference/kube-apiserver.md?plain=1#L641C8715-L641C8725
- https://github.com/kubernetes/website/blob/e63cc33fb676d06e9c71a4fc9d2ef9eb2c137f72/content/en/docs/reference/command-line-tools-reference/kube-controller-manager.md?plain=1#L505C8715-L505C8725
- https://github.com/kubernetes/website/blob/e63cc33fb676d06e9c71a4fc9d2ef9eb2c137f72/content/en/docs/reference/command-line-tools-reference/kube-proxy.md?plain=1#L161C7830-L161C7840
- https://github.com/kubernetes/website/blob/e63cc33fb676d06e9c71a4fc9d2ef9eb2c137f72/content/en/docs/reference/command-line-tools-reference/kube-scheduler.md?plain=1#L176C8715-L176C8725
- https://github.com/kubernetes/website/blob/e63cc33fb676d06e9c71a4fc9d2ef9eb2c137f72/content/en/docs/reference/command-line-tools-reference/kubelet.md?plain=1#L492C0-L492C10

Additionally, I would like to reflect [the changes](https://github.com/kubernetes/kubernetes/pull/128184/files#diff-4f151352f36a8ccb35851ee4d5c17159d98aa2b5f4abb02f905b2e4806d4de84L161-L174) I made in [my kubernetes/kubernetes PR](https://github.com/kubernetes/kubernetes/pull/128184) to the following documents. How should I proceed with this?

- https://github.com/kubernetes-sigs/reference-docs/blob/096a94d6e7d0d04e41356f21233498c3c4e31699/genref/output/html/kube-scheduler-config.v1.html#L1629-L1641
- https://github.com/kubernetes-sigs/reference-docs/blob/096a94d6e7d0d04e41356f21233498c3c4e31699/genref/output/html/kube-scheduler-config.v1beta2.html#L1126-L1138
- https://github.com/kubernetes-sigs/reference-docs/blob/096a94d6e7d0d04e41356f21233498c3c4e31699/genref/output/html/kube-scheduler-config.v1beta3.html#L1066-L1078
- https://github.com/kubernetes-sigs/reference-docs/blob/096a94d6e7d0d04e41356f21233498c3c4e31699/genref/output/md/kube-scheduler-config.v1.md#L554-L566
- https://github.com/kubernetes/website/blob/ee29ab7ec88bf0b2df7734a0601293b4e28330b1/content/en/docs/reference/config-api/kube-scheduler-config.v1.md#L554-L566
author_association: CONTRIBUTOR
user: login: rayandas
created_at: 2025-03-25T05:50:58Z
body: Hello @cupnes  :wave: please take a look at [Documenting for a release - PR Ready for Review](https://kubernetes.io/docs/contribute/new-content/new-features/#pr-ready-for-review) to get your PR ready for review before Tuesday 25th March 2025 18:00 PDT. Thank you!
author_association: MEMBER
user: login: cupnes
created_at: 2025-03-25T05:59:36Z
body: @rayandas 
I understand. Since this PR has already received review comments, I have removed the Draft status.
author_association: CONTRIBUTOR
user: login: cupnes
created_at: 2025-03-27T00:58:30Z
body: @sftim @dipesh-rawat @tengqm @xing-yang 

After looking at [the PR](https://github.com/kubernetes/website/pull/26712) that updated documentation for VolumeCapacityPriority (KEP-1845), I noticed that it did not update the files I mentioned in [my comment](https://github.com/kubernetes/website/pull/49801#issuecomment-2750100494). I understand now that these files do not need to be updated by the KEP author. If so, please ignore [my comment from two days ago](https://github.com/kubernetes/website/pull/49801#issuecomment-2750100494).

I have already updated this PR based on the reviewers' feedback, so please continue with the review.
author_association: CONTRIBUTOR
user: login: cupnes
created_at: 2025-04-02T08:32:33Z
body: @sftim @dipesh-rawat @tengqm @xing-yang 
How is the review going? If there are no problems, could you please remove the hold label and add the approved and lgtm labels?
author_association: CONTRIBUTOR
user: login: Urvashi0109
created_at: 2025-04-03T11:02:25Z
body: Hello @cupnes  :wave:! I'm reaching out from the Docs team. Just checking in as we approach Docs Freeze on 8th April, 2025 18:00 PDT.
This documentation appears to still be under review. To meet the Docs Freeze, this PR must have a technical review as well as lgtm and approve labels applied, without any unaddressed comments or concerns from SIG Docs. The status of this enhancement is marked as at risk for docs freeze. Thank you!
author_association: CONTRIBUTOR
user: login: cupnes
created_at: 2025-04-04T00:33:27Z
body: @sftim @dipesh-rawat @tengqm @xing-yang 
The Docs Freeze deadline is approaching, so please review this. If looks good, please remove the hold label and add the approved and lgtm labels. I probably won't be able to work from 4/4 9:00UTC to 4/7 0:00UTC.
author_association: CONTRIBUTOR
user: login: rayandas
created_at: 2025-04-07T08:35:55Z
body: @tengqm The suggested changes were applied. This could another review. Thanks!
author_association: MEMBER
user: login: tengqm
created_at: 2025-04-07T10:10:40Z
body: /lgtm

author_association: CONTRIBUTOR
user: login: k8s-ci-robot
created_at: 2025-04-07T10:10:47Z
body: LGTM label has been added.  <details>Git tree hash: 0438cc30765e7dff818ec6e6f2d72a3360f6361e</details>
author_association: CONTRIBUTOR
user: login: rayandas
created_at: 2025-04-07T11:02:36Z
body: This PR also requires a technical review. @xing-yang PTAL.
author_association: MEMBER
user: login: xing-yang
created_at: 2025-04-07T16:39:03Z
body: /lgtm
author_association: CONTRIBUTOR
user: login: cupnes
created_at: 2025-04-08T00:42:30Z
body: @tengqm @xing-yang 
Could you please also add the `approved` label? And could you remove the `do-not-merge/hold` label?
author_association: CONTRIBUTOR
user: login: tengqm
created_at: 2025-04-08T00:47:12Z
body: Treating https://github.com/kubernetes/website/pull/49801#issuecomment-2783962422 as a tech lgtm,
/approve

author_association: CONTRIBUTOR
user: login: k8s-ci-robot
created_at: 2025-04-08T00:47:27Z
body: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/kubernetes/website/pull/49801#issuecomment-2784957672" title="Approved">tengqm</a>*

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=kubernetes%2Fwebsite).

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

<details >
Needs approval from an approver in each of these files:

- ~~[content/en/docs/OWNERS](https://github.com/kubernetes/website/blob/dev-1.33/content/en/docs/OWNERS)~~ [tengqm]

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":[]} -->
author_association: CONTRIBUTOR
user: login: cupnes
created_at: 2025-04-08T00:58:53Z
body: @tengqm @xing-yang
Since you have added the `approved` and `lgtm` labels, I remove the `do-not-merge/hold` label. Thank you!
/unhold
author_association: CONTRIBUTOR