You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes 1.10中mountPropagation: Bidirectional不生效问题

问题排查与解决:K8s挂载传播未生效的原因

我来帮你梳理这个问题——你设置了mountPropagation: Bidirectional但容器里还是rprivate,核心是两个关键条件没满足,咱们一步步拆解:

1. 最直接的原因:容器没开特权模式

Kubernetes里,mountPropagation: Bidirectional的生效要求容器必须是特权模式。你直接用Docker启动时加了--privileged=true,但你的Deployment里完全没配置这个!非特权容器没有权限修改挂载传播属性,所以K8s就算收到了你的配置,也没法生效。

修复步骤:给容器加特权配置

修改你的Deployment YAML,在容器部分添加securityContext.privileged: true:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: test
spec:
  selector:
    matchLabels:
      app: test
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - image: gcr.io/google_containers/busybox:1.24
        command: ["sleep", "36000"]
        name: test
        volumeMounts:
        - mountPath: /tmp/test
          mountPropagation: Bidirectional
          name: test-vol
        # 新增特权模式配置
        securityContext:
          privileged: true
      volumes:
      - name: test-vol
        hostPath:
          path: /tmp/test

2. RKE节点的Docker默认挂载传播限制

就算开了特权模式,你还得确保集群节点的根文件系统挂载传播是shared模式——K8s的挂载传播是继承节点的挂载层级的,RKE默认部署的Docker可能没开这个,导致容器没法拿到shared属性。

先检查节点状态

在每个集群节点上跑这个命令,看根目录的传播模式:

findmnt -o TARGET,PROPAGATION /

如果输出里PROPAGATION是private或者rprivate,就得改Docker配置。

修改RKE的Docker配置

打开你的RKE cluster.yml,给Docker daemon加默认挂载传播参数:

services:
  docker:
    extra_args:
      - "--mount-propagation=shared"

然后重新执行rke up更新集群,等Docker重启后生效。

验证修复结果

重新部署修改后的Deployment,然后用这个命令检查挂载传播:

kubectl exec -it $(kubectl get pods -l app=test -o jsonpath='{.items[0].metadata.name}') -- findmnt -o TARGET,PROPAGATION /tmp/test

这时候应该能看到PROPAGATION显示为shared,和你直接用Docker启动的效果一致了。


内容的提问来源于stack exchange,提问作者Will

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:45:21