Skip to content

WINC-991: Windows CSI node plugin support - #2072

Draft
mansikulkarni96 wants to merge 1 commit into
openshift:masterfrom
mansikulkarni96:csi_driver_support
Draft

WINC-991: Windows CSI node plugin support#2072
mansikulkarni96 wants to merge 1 commit into
openshift:masterfrom
mansikulkarni96:csi_driver_support

Conversation

@mansikulkarni96

@mansikulkarni96 mansikulkarni96 commented Jul 31, 2026

Copy link
Copy Markdown
Member

This enhancement proposes adding Windows node DaemonSets to CSI driver operators (csi-operator, vmware-vsphere-csi-driver-operator), enabling persistent storage for Windows workloads through standard PVCs. This supersedes the manual DaemonSet deployment workflow from the csi-proxy enhancement, now that Buildah supports building Windows container images.

Summary by CodeRabbit

  • Documentation
    • Added an enhancement proposal for supporting CSI node plugins on Windows nodes.
    • Documented Windows configurations for Azure File and VMware vSphere integrations.
    • Described deployment, security, upgrade, downgrade, testing, support, and graduation considerations.

@openshift-ci openshift-ci Bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jul 31, 2026
@openshift-ci

openshift-ci Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@openshift-ci

openshift-ci Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign pacevedom for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown

Walkthrough

The enhancement proposal defines operator-managed Windows CSI node plugins for Azure File and VMware vSphere. It covers DaemonSets, CSI Proxy integration, image builds, testing, lifecycle behavior, failure reporting, and support procedures.

Changes

Windows CSI support

Layer / File(s) Summary
Windows CSI deployment model
enhancements/windows-containers/windows-CSI-sriver-support.md
Defines the goals, supported drivers, Windows DaemonSets, CSI Proxy usage, security settings, mounts, and deployment workflow.
Operator, driver, and image implementation
enhancements/windows-containers/windows-CSI-sriver-support.md
Specifies csi-operator, driver repository, template, sidecar, node-service, and multi-architecture image changes.
Validation, lifecycle, and operations
enhancements/windows-containers/windows-CSI-sriver-support.md
Defines automated tests, GA targeting, upgrade and downgrade behavior, failure reporting, support procedures, prototypes, and alternatives.

Estimated code review effort: 2 (Simple) | ~10 minutes

Sequence Diagram(s)

sequenceDiagram
  participant csi-operator
  participant WindowsDaemonSet
  participant CSIProxy
  participant CSIDriver
  csi-operator->>WindowsDaemonSet: Generate and manage Windows node plugin
  WindowsDaemonSet->>CSIProxy: Use Windows node storage interface
  CSIProxy->>CSIDriver: Provide node operations for Azure File or VMware vSphere
Loading
🚥 Pre-merge checks | ✅ 15
✅ Passed checks (15 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names ✅ Passed The PR adds only one enhancement Markdown document; it introduces no Ginkgo tests or test-title calls, and its test plan contains no dynamic test names.
Test Structure And Quality ✅ Passed The PR changes only one Markdown enhancement document (+343/-0); no Ginkgo test code, test files, or lifecycle/wait/assertion calls are present to review.
Microshift Test Compatibility ✅ Passed The pull request adds only one Markdown enhancement proposal; it adds no Ginkgo tests, test files, or executable code requiring MicroShift API compatibility review.
Single Node Openshift (Sno) Test Compatibility ✅ Passed The PR adds only a Markdown enhancement proposal; no new Ginkgo tests or multi-node test code is present, so SNO compatibility is not applicable.
Topology-Aware Scheduling Compatibility ✅ Passed The commit adds only one Markdown enhancement document; it adds no manifests, controllers, or scheduling constraints. The proposal targets Windows nodes and explicitly excludes HyperShift.
Ote Binary Stdout Contract ✅ Passed The patch adds only a 343-line Markdown enhancement; it contains no OTE binary, suite setup, or process-level stdout write to evaluate.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed The PR changes only one Markdown proposal; it adds no Ginkgo test declarations or test implementation, and contains no IPv4-only or external-connectivity test logic.
No-Weak-Crypto ✅ Passed The PR changes one Markdown proposal; exact searches found no MD5, SHA1, DES, 3DES, RC4, Blowfish, ECB, custom crypto, or secret/token comparisons.
Container-Privileges ✅ Passed The PR adds only a Markdown proposal, with no manifest blocks or prohibited assignments; it explicitly excludes securityContext.privileged and justifies Windows hostProcess with SYSTEM for CSI Prox...
No-Sensitive-Data-In-Logs ✅ Passed The proposal contains no log statements or sample sensitive values. It only describes generic oc logs/must-gather collection and an Azure credentials secret mount.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'WINC-991: Windows CSI node plugin support' is specific and clearly summarizes the main change: adding Windows CSI node plugin support.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@mansikulkarni96 mansikulkarni96 changed the title Add enhancement proposal for Windows CSI node plugin support Windows CSI node plugin support Jul 31, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 13

🧹 Nitpick comments (1)
enhancements/windows-containers/windows-CSI-sriver-support.md (1)

131-133: 🩺 Stability & Availability | 🔵 Trivial

Specify the driver and CSI Proxy compatibility matrix.

Stable CSI Proxy APIs do not define the exact proxy binary, supported API groups, security baseline, or upgrade ordering. Record minimum supported CSI Proxy versions for Azure File and vSphere. Test proxy and driver version skew before GA.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@enhancements/windows-containers/windows-CSI-sriver-support.md` around lines
131 - 133, Expand the CSI proxy compatibility guidance in the Windows CSI driver
support documentation to define a driver-to-proxy compatibility matrix,
including minimum supported CSI Proxy versions for Azure File and vSphere,
supported API groups, security baseline, and upgrade ordering. Add a requirement
to test proxy/driver version skew before GA, replacing the current general
statement about stable APIs and WMCO-managed upgrades.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@enhancements/windows-containers/windows-CSI-sriver-support.md`:
- Around line 12-13: Replace the placeholder WINC-TBD value in the tracking-link
configuration with the actual traceable enhancement or implementation issue key
before merging.
- Around line 247-257: Add a direct GA graduation-criteria section in the
proposal, separate from the existing Tech Preview -> GA criteria. Define
measurable acceptance requirements covering supported Azure File and VMware
vSphere drivers, Windows build compatibility, image provenance, end-to-end test
coverage, upgrade behavior, failure reporting, and support documentation.
- Around line 261-276: Expand the “Upgrade / Downgrade Strategy” section to
define a safe migration for legacy manually deployed Windows CSI DaemonSets,
including their resource names, ownership or adoption behavior, conflict
detection, rollout/removal order, and rollback procedure. Ensure the workflow
prevents simultaneous node plugins from sharing CSI registration or socket
paths, rather than relying only on administrators deleting resources before
upgrade.
- Around line 234-245: Expand the GA E2E plan to define separate coverage for
both initial drivers, Azure File and vSphere, rather than only referencing the
Azure WMCO helper. For each driver, verify operator-owned Windows DaemonSets,
pod readiness on Windows nodes, CSINode registration, PVC
creation/mount/write/persistence across pod restarts, and deletion cleanup,
while explicitly removing manual DaemonSet deployment from the tests.
- Around line 285-289: Update the “Downgrades” guidance to explicitly block
unsupported CSI driver operator downgrades rather than allowing Windows
DaemonSets to be silently removed. If downgrade support is intended, document
retaining the existing Windows node service until workloads are drained and the
replacement is healthy.
- Around line 128-130: Update the multi-arch manifest risk description near the
Windows DaemonSet image behavior to state that a manifest without a Windows
variant causes the Windows runtime to report an image-pull/no-matching-manifest
failure, rather than pulling a Linux image. Describe the mitigation as
validating that the released or mirrored image reference includes a
Windows-compatible descriptor.
- Around line 303-307: Expand the “Failure Modes” section to distinguish
clusters with no eligible Windows nodes from clusters where expected Windows CSI
driver pods fail: define the non-degraded ClusterOperator conditions and metrics
for zero desired pods, the degraded conditions and metrics for failures on
eligible nodes, and add tests covering both cases.
- Around line 224-230: Replace the proposed negative-field and API-schema-only
acceptance criteria for the csi-operator generator tests with explicit
assertions on each generated Windows DaemonSet. Verify scheduling,
Windows-compatible paths, image variant resolution, hostProcess security,
tolerations, named-pipe configuration, C:\csi and C:\registration paths, and CSI
registration values for every Windows-enabled driver.
- Around line 85-89: Update the Windows DaemonSet documentation to use valid
YAML escaping for the SYSTEM account, such as single quotes or a doubled
backslash. Clarify that windowsOptions.hostProcess applies to the entire pod,
and explicitly document the HostProcess and hostNetwork requirements for the CSI
driver, node-driver-registrar, and liveness-probe containers, including why each
requirement is needed.
- Around line 290-294: Revise the “Version Skew Strategy” section to remove the
claim that Linux and Windows CSI DaemonSets update atomically or cannot
experience version skew. Document the separate DaemonSet rollout behavior,
including the Operator’s rollout order and health gates, or specify expected
temporary skew and recovery steps for partial failures.
- Around line 213-218: Update the Windows image contract documentation around
the Buildah multi-stage build and manifest list to identify the supported
WMCO/node Windows builds and pin them to the promoted Windows image variant,
rather than implying nanoserver:ltsc2022 supports every node. Add test coverage
that validates the complete promoted multi-architecture manifest list, including
the Windows variants and their OS/build compatibility.
- Around line 134-137: Update the Windows DaemonSet guidance around the direct
Azure credentials Secret mount to require security mitigations before treating
it as preferred, including node-level BitLocker and constrained Secret file
ACLs/path verification for the HostProcess/System driver container, or require a
Windows credentials injector instead. Apply the same requirement to the
duplicate direct-mount preference in the Alternatives section.
- Around line 61-69: Expand the “Non-Goals” or Windows storage support
documentation with an Azure File/vSphere support matrix covering volume mode,
access mode, NFS versus SMB, raw block mapping, and filesystem expansion.
Clearly identify unsupported Windows StorageClass capabilities and preserve the
distinction between supported existing classes and unsupported feature
combinations.

---

Nitpick comments:
In `@enhancements/windows-containers/windows-CSI-sriver-support.md`:
- Around line 131-133: Expand the CSI proxy compatibility guidance in the
Windows CSI driver support documentation to define a driver-to-proxy
compatibility matrix, including minimum supported CSI Proxy versions for Azure
File and vSphere, supported API groups, security baseline, and upgrade ordering.
Add a requirement to test proxy/driver version skew before GA, replacing the
current general statement about stable APIs and WMCO-managed upgrades.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 7538ef3f-b90b-49b6-9cc4-f99a36886bdd

📥 Commits

Reviewing files that changed from the base of the PR and between c79913a and 7d711e5.

📒 Files selected for processing (1)
  • enhancements/windows-containers/windows-CSI-sriver-support.md

Comment thread enhancements/windows-containers/windows-CSI-sriver-support.md Outdated
Comment thread enhancements/windows-containers/windows-CSI-sriver-support.md Outdated
Comment thread enhancements/windows-containers/windows-CSI-sriver-support.md
Comment on lines +128 to +130
* If multi-arch manifest lists are not ready for the release payload, the Windows DaemonSets would pull Linux images
that cannot run on Windows nodes. This is mitigated by coordinating with the Konflux team to ensure multi-arch
builds are integrated before the feature ships.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== file section =="
sed -n '110,140p' enhancements/windows-containers/windows-CSI-sriver-support.md 2>/dev/null || true

echo "== docker/moby docs snippets if available locally =="
python3 - <<'PY'
import subprocess, textwrap
target="C:\\Program Files\\docker\\docker-daemon.json"
print("target_exists_path=", target)
PY

echo "== search for Windows CSI/Sriver related content =="
rg -n "Windows Container|manifest list|image-pull|no image|Linux images|multi-arch|CSI|Sriver|sriver" enhancements/windows-containers/windows-CSI-sriver-support.md .github README.md 2>/dev/null | head -80 || true

Repository: openshift/enhancements

Length of output: 13403


🌐 Web query:

Microsoft Docker Windows containers run your first container image manifest list Windows node image pull error

💡 Result:

When you encounter an error stating no match for platform in manifest or no matching manifest for [OS/arch] in the manifest list entries while pulling a Windows container image, it indicates that the Docker daemon cannot find an image version in the remote repository that is compatible with your host's operating system version or container mode [1][2][3]. To resolve this issue, consider the following troubleshooting steps: 1. Check your Container Mode: Ensure your Docker daemon is correctly set to Windows container mode [4][5][3]. If you are running in Linux container mode, you cannot pull or run Windows-based images [5][3]. You can verify this by checking the Docker Desktop system tray icon or by running docker info and reviewing the Operating System and Architecture fields [1][4]. 2. Verify OS Compatibility: Windows containers require a high degree of compatibility between the host OS build and the container image base OS version [1][6][2]. If you are using a newer image (such as Windows Server 2022) on an older host (such as Windows 10 or Windows Server 2019), the pull will fail because the manifest does not contain a platform entry that matches your specific host build [1][2]. Ensure you are pulling a tag that matches your host environment (e.g., ltsc2019, ltsc2022) [1][5]. 3. Inspect the Manifest: You can inspect the available platforms for a specific image by running the following command [7][8]: docker manifest inspect : Review the output to see if there is a matching entry for your host's OS and architecture under the platform section [7][8]. 4. Avoid Incompatible Snapshotters: If you are using containerd or specialized runtimes, ensure you are not using incompatible storage snapshotters, such as the Stargz snapshotter, which is not supported for Windows containers and can trigger misleading manifest errors [1]. 5. Use Platform-Specific Tags: Rather than pulling the latest tag, which may default to a platform version incompatible with your host, explicitly pull an image version known to be compatible with your Windows build [1][5]. If the error persists, verify your host's version using winver or systeminfo and ensure it meets the requirements for the specific base image you are attempting to pull [1][6][2].

Citations:


Describe the Windows image-pull behavior correctly.

If the multi-arch manifest list has no Windows variant, the Windows runtime reports an image-pull/no-matching-manifest failure; it does not silently select the Linux image. Update this risk to say validate the released/mirrored image reference for a Windows-compatible descriptor.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@enhancements/windows-containers/windows-CSI-sriver-support.md` around lines
128 - 130, Update the multi-arch manifest risk description near the Windows
DaemonSet image behavior to state that a manifest without a Windows variant
causes the Windows runtime to report an image-pull/no-matching-manifest failure,
rather than pulling a Linux image. Describe the mitigation as validating that
the released or mirrored image reference includes a Windows-compatible
descriptor.

Source: MCP tools

Comment thread enhancements/windows-containers/windows-CSI-sriver-support.md
Comment thread enhancements/windows-containers/windows-CSI-sriver-support.md
Comment on lines +261 to +276
The manual Windows CSI DaemonSet deployment workflow described in the [csi-proxy enhancement](csi-proxy.md) will be
superseded by this enhancement. Users who have manually deployed Windows CSI DaemonSets will need to remove them
before the operator-managed DaemonSets are deployed, to avoid conflicts. Documentation should guide users through
this transition.

### Upgrade / Downgrade Strategy

#### Cluster upgrades

When upgrading to a version that includes operator-managed Windows CSI DaemonSets, the DaemonSets will be created
automatically. If the cluster has Windows nodes, the CSI driver pods will start on those nodes. If the cluster has
no Windows nodes, the DaemonSets will exist with zero desired pods and have no effect.

Cluster administrators who have manually deployed Windows CSI DaemonSets (following the workflow from the csi-proxy
enhancement) should remove them before upgrading, to avoid conflicts with the operator-managed DaemonSets. Release
notes should clearly document this requirement.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Define a safe migration from manually deployed DaemonSets.

Requiring administrators to delete old DaemonSets conflicts with the no-manual-deployment goal. The proposal does not define legacy resource names, ownership, conflict detection, rollout order, or rollback. Two node plugins can race when they share CSI registration or socket paths. Define an explicit adoption/removal workflow, or use unique resources during migration.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@enhancements/windows-containers/windows-CSI-sriver-support.md` around lines
261 - 276, Expand the “Upgrade / Downgrade Strategy” section to define a safe
migration for legacy manually deployed Windows CSI DaemonSets, including their
resource names, ownership or adoption behavior, conflict detection,
rollout/removal order, and rollback procedure. Ensure the workflow prevents
simultaneous node plugins from sharing CSI registration or socket paths, rather
than relying only on administrators deleting resources before upgrade.

Comment thread enhancements/windows-containers/windows-CSI-sriver-support.md
Comment on lines +290 to +294
### Version Skew Strategy

Because the Windows and Linux DaemonSets are managed by the same operator and use images from the same multi-arch
manifest list, there is no version skew between Linux and Windows CSI components. Both DaemonSets are updated
atomically by the operator during cluster upgrades.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== locate file =="
git ls-files | rg 'enhancements/windows-containers/windows-CSI-sriver-support.md|csi-driver-smb|cifs|smb|daemonset|operator' || true

echo
echo "== relevant snippet =="
if [ -f enhancements/windows-containers/windows-CSI-sriver-support.md ]; then
  wc -l enhancements/windows-containers/windows-CSI-sriver-support.md
  sed -n '250,320p' enhancements/windows-containers/windows-CSI-sriver-support.md | cat -n
fi

echo
echo "== search for atomic/version skew/operator/daemonset mentions =="
rg -n "atomic|version skew|DaemonSet|operator|manifest list|multi-arch|rollout|health gate|partial-failure|recovery" . --glob '!vendor/**' --glob '!node_modules/**' || true

Repository: openshift/enhancements

Length of output: 50379


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== exact tracked file =="
git ls-files -- 'enhancements/windows-containers/windows-CSI-sriver-support.md' -- 'enhancements/windows-containers/*windows*csi*.md' -- '*win*storage*.md' -- 'enhancements/*windows*' || true

echo
echo "== targeted file availability =="
if [ -f enhancements/windows-containers/windows-CSI-sriver-support.md ]; then
  echo "FOUND"
  wc -l enhancements/windows-containers/windows-CSI-sriver-support.md
  sed -n '260,305p' enhancements/windows-containers/windows-CSI-sriver-support.md | cat -n
else
  echo "NOT FOUND"
fi

echo
echo "== targeted daemonset/operator/atomic/version skew mentions in windows enhancements =="
rg -n -C 3 'atomic|version skew|DaemonSet|operator|manifest list|multi-arch|rollout|health gate|temporary|partial-failure|recovery' enhancements/windows-containers || true

Repository: openshift/enhancements

Length of output: 50381


🌐 Web query:

Kubernetes DaemonSet separate resources roll out independently atomic update two DaemonSets multi-arch nodeSelector

💡 Result:

In Kubernetes, you can manage multi-architecture workloads by deploying separate DaemonSets, one for each architecture (e.g., amd64 and arm64), using nodeSelectors or nodeAffinity to target the appropriate nodes [1]. This approach allows you to roll out updates to each architecture independently [2]. Key considerations for this strategy include: 1. Architecture-Specific DaemonSets: You define separate DaemonSet manifests with identical app labels (for organization) but unique names, nodeSelectors, and container images optimized for the target architecture [1]. The DaemonSet controller treats these as distinct objects, meaning updating one does not affect the other [2]. 2. Independent Rollouts: Because each DaemonSet is a separate controller resource, their update strategies (RollingUpdate or OnDelete) are configured and executed independently [3][4]. You can trigger a rollout for the arm64 DaemonSet without impacting the amd64 DaemonSet [2]. 3. Atomic Updates: DaemonSet rolling updates are controlled by the.spec.updateStrategy.rollingUpdate configuration, specifically the maxUnavailable parameter [3][5]. While this ensures "atomic" behavior on a per-node basis (replacing an old pod with a new one according to your limits), the "atomicity" is scoped to the individual DaemonSet object [2]. If you have two DaemonSets, the cluster-wide state will transition as each controller processes its respective updates [2]. 4. Advanced Scheduling: While nodeSelector is sufficient for simple requirements, you may use nodeAffinity to implement more complex scheduling rules (e.g., combining architecture requirements with other node labels like spot instance status or hardware features) [6]. For managing complex multi-arch environments, some organizations also use admission webhooks that automatically inject necessary tolerations or affinity rules based on container image metadata, reducing the need for manual orchestration of multiple DaemonSet objects [7][8].

Citations:


Do not treat Linux and Windows CSI DaemonSets as atomic upgrades.

Kubernetes treats each DaemonSet as a separate controller resource, so the Linux and Windows nodes can be at different pod versions during rollout. Either define rollout order and health gates using the Operator’s upgrade model, or document expected temporary version skew and partial-failure recovery.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@enhancements/windows-containers/windows-CSI-sriver-support.md` around lines
290 - 294, Revise the “Version Skew Strategy” section to remove the claim that
Linux and Windows CSI DaemonSets update atomically or cannot experience version
skew. Document the separate DaemonSet rollout behavior, including the Operator’s
rollout order and health gates, or specify expected temporary skew and recovery
steps for partial failures.

Source: MCP tools

Comment thread enhancements/windows-containers/windows-CSI-sriver-support.md
@mansikulkarni96
mansikulkarni96 force-pushed the csi_driver_support branch 2 times, most recently from a3fb046 to c01b1e5 Compare July 31, 2026 16:25
This enhancement proposes adding Windows node DaemonSets to CSI driver
operators (csi-operator, vmware-vsphere-csi-driver-operator), enabling
persistent storage for Windows workloads through standard PVCs. This
supersedes the manual DaemonSet deployment workflow from the csi-proxy
enhancement, now that Buildah supports building Windows container images.
@mansikulkarni96

Copy link
Copy Markdown
Member Author

/cc: @openshift/openshift-team-storage

@jrvaldes jrvaldes 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.

Thanks @mansikulkarni96 for working on this. PTAL the comments?

* Achieving full feature parity with Linux storage. Windows does not support all volume modes, access modes, and
volume features available on Linux. See the support matrix below.
* Modifying CSI driver controllers. Controllers run on the Linux control plane and are OS-agnostic.
* HyperShift support. Windows nodes are only supported on standalone clusters.

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.

no need to mention this. this is a WMCO limitation, to the CSI proposal

A single multi-OS DaemonSet is not feasible. Windows and Linux pods require fundamentally different security models
(`windowsOptions.hostProcess` vs `securityContext.privileged`), different filesystem paths (`C:\var\lib\kubelet` vs
`/var/lib/kubelet`), and different volume mounts (no `/dev`, `/sys/fs`, or `/etc/selinux` on Windows). Two separate
DaemonSets is the standard upstream pattern for multi-OS CSI deployments.

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.

provide links/ref for this

automatically pulls the variant matching its platform, so the same image reference (e.g. `${DRIVER_IMAGE}`) works
for both DaemonSets without any special configuration.

Two CSI drivers are targeted for the initial implementation:

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.

why not just one?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

The aim is to create user stories for the two driver plugins available.

@mansikulkarni96 mansikulkarni96 changed the title Windows CSI node plugin support WINC-1993: Windows CSI node plugin support Aug 5, 2026
@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Aug 5, 2026
@openshift-ci-robot

openshift-ci-robot commented Aug 5, 2026

Copy link
Copy Markdown

@mansikulkarni96: This pull request references WINC-1993 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the task to target the "5.0.0" version, but no target version was set.

Details

In response to this:

This enhancement proposes adding Windows node DaemonSets to CSI driver operators (csi-operator, vmware-vsphere-csi-driver-operator), enabling persistent storage for Windows workloads through standard PVCs. This supersedes the manual DaemonSet deployment workflow from the csi-proxy enhancement, now that Buildah supports building Windows container images.

Summary by CodeRabbit

  • Documentation
  • Added an enhancement proposal for supporting CSI node plugins on Windows nodes.
  • Documented Windows configurations for Azure File and VMware vSphere integrations.
  • Described deployment, security, upgrade, downgrade, testing, support, and graduation considerations.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@mansikulkarni96

Copy link
Copy Markdown
Member Author

/cc: @gnufied

@mansikulkarni96 mansikulkarni96 changed the title WINC-1993: Windows CSI node plugin support WINC-991: Windows CSI node plugin support Aug 5, 2026
@openshift-ci-robot

openshift-ci-robot commented Aug 5, 2026

Copy link
Copy Markdown

@mansikulkarni96: This pull request references WINC-991 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the spike to target the "5.0.0" version, but no target version was set.

Details

In response to this:

This enhancement proposes adding Windows node DaemonSets to CSI driver operators (csi-operator, vmware-vsphere-csi-driver-operator), enabling persistent storage for Windows workloads through standard PVCs. This supersedes the manual DaemonSet deployment workflow from the csi-proxy enhancement, now that Buildah supports building Windows container images.

Summary by CodeRabbit

  • Documentation
  • Added an enhancement proposal for supporting CSI node plugins on Windows nodes.
  • Documented Windows configurations for Azure File and VMware vSphere integrations.
  • Described deployment, security, upgrade, downgrade, testing, support, and graduation considerations.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

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

Labels

do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants