Skip to content

helm: atelet mounts /var/lib/kubelet/plugins with HostToContainer propagation - #39

Open
teemow wants to merge 19 commits into
kagent-dev:mainfrom
giantswarm:upstream/atelet-plugins-mount-propagation
Open

teemow wants to merge 19 commits into
kagent-dev:mainfrom
giantswarm:upstream/atelet-plugins-mount-propagation

Conversation

@teemow

@teemow teemow commented Sep 15, 2026

Copy link
Copy Markdown

Problem

atelet hostPath-mounts /var/lib/kubelet/plugins to reach the CSI driver sockets. With the default (private) propagation, every atelet start copies the node's CSI globalmounts into the container's mount namespace, and kubelet's later unmount of a volume never reaches that copy. The volume's filesystem — and the LUKS mapper of an encrypted volume — stays open, so the volume cannot be unstaged while atelet runs.

We hit this with Longhorn on a cluster running Substrate: after a pod moved to another node, NodeUnstageVolume failed forever with cryptsetup luksClose: Device is still in use, and the pod could not attach its volume on the new node until atelet was restarted.

Fix

mountPropagation: HostToContainer (rslave) on the kubelet-plugins volume mount — what CSI node plugins use for the kubelet directories. Mounts and unmounts made by kubelet propagate into the container; nothing propagates back.

Rendered manifests are otherwise unchanged. The change has been running in our Substrate deployment since 2026-09-11.

Prepared with AI assistance, reviewed and tested by the author.

EItanya and others added 19 commits September 15, 2026 16:03
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Signed-off-by: Jet Chiang <pokyuen.jetchiang-ext@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
Signed-off-by: Eitan Yarmush <eitan.yarmush@solo.io>
…pagation

atelet hostPath-mounts /var/lib/kubelet/plugins to reach the CSI driver sockets. With the
default (private) propagation every atelet start copies the node's CSI globalmounts into
the container's mount namespace, and kubelet's later unmount of a volume does not reach
that copy: the volume's filesystem stays mounted there, the block device (and the LUKS
mapper of an encrypted volume) stays open, and the volume can never be unstaged while
atelet runs. Observed with Longhorn: NodeUnstageVolume failed forever with
"cryptsetup luksClose: Device is still in use" after a pod moved to another node, and the
pod could not attach the volume on the new node until atelet was restarted.

HostToContainer (rslave) is what CSI node plugins use for the kubelet directories: mounts
and unmounts made by kubelet propagate into the container, nothing propagates back.

Signed-off-by: Timo Derstappen <teemow@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants