kubernetes ReadWriteMany访问模式不应与hostPath卷一起使用,

hts6caw3  于 6个月前  发布在  Kubernetes
关注(0)|答案(5)|浏览(79)

发生了什么?
我们知道 hostPath 不支持 ReadWriteMany 访问模式,从文档中可以看到[1]。但是如果我们尝试使用 hostPath 选项创建 PV 和 PVC,并设置 ReadWriteMany 的访问模式,Kubernetes 允许创建,但当最终目标是在一个运行在多个节点上的部署中由许多 pod 共用一个通用卷时,这种设置会给用户带来困惑,因为在创建 PV 和 PVC 时没有出现错误,他们以为一切都设置得很好。
当用户尝试从其中一个 pod 写入一些文件时,数据将无法被其他 pod 访问,因为它正在挂载 hostpath 并写入其中。
这是在 GKE 上部署的 deployment 中观察到的。
[1] https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes:~:text=%2D-,HostPath,-%E2%9C%93你期望发生什么? Kubernetes 不应该允许创建带有hostPath选项启用的ReadWriteMany` 访问模式的 PV。我们应该提供某种错误消息或设置 web-hook 以阻止创建这些 PV。
如何尽可能最小精确地重现它?

  • 使用以下配置创建一个 PV 和 PVC。
--- PV---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: test-pv
spec:
  storageClassName: standard
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: "/tmp/data"

---PVC---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc
spec:
  storageClassName: standard
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  volumeName: test-pv
  • 创建一个部署,将上述卷挂载在 /tmp/data 路径下,如下所示。
volumeMounts:
        - name: test-data
          mountPath: /tmp/data
      volumes:
        - name: test-data
          persistentVolumeClaim:
            claimName: test-pvc
  • 这将成功创建,但用户无法访问共享卷,因为 hostPath 选项正在挂载 pod 运行所在节点的主机文件系统路径。

我们需要了解其他任何信息吗?
无响应
Kubernetes 版本

$ kubectl version
WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short.  Use --output=yaml|json to get the full version.
Client Version: version.Info{Major:"1", Minor:"27+", GitVersion:"v1.27.9-dispatcher", GitCommit:"8b508a33aafcd3ba51641b6b2ef203adbdd9de1e", GitTreeState:"clean", BuildDate:"2023-12-21T23:22:51Z", GoVersion:"go1.20.12", Compiler:"gc", Platform:"linux/amd64"}
Kustomize Version: v5.0.1
Server Version: version.Info{Major:"1", Minor:"26", GitVersion:"v1.26.13-gke.1052000", GitCommit:"c88fda4c3b7ef204c20602c368811d8ba2fdd2e6", GitTreeState:"clean", BuildDate:"2024-01-23T17:45:47Z", GoVersion:"go1.20.13 X:boringcrypto", Compiler:"gc", Platform:"linux/amd64"}

云提供商
Google Cloud Platform GKE
操作系统版本

# On Linux:
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

$ uname -a
Linux cs-779332008923-default 6.1.58+ #1 SMP PREEMPT_DYNAMIC Mon Jan 29 15:19:25 UTC 2024 x86_64 GNU/Linux

</details>

### Install tools

<details>

</details>

### Container runtime (CRI) and version (if applicable)

<details>

</details>

### Related plugins (CNI, CSI, ...) and versions (if applicable)

<details>

</details>
hpxqektj

hpxqektj1#

这个问题目前正在等待分类。
如果SIG或子项目确定这是一个相关的问题,他们将通过应用triage/accepted标签并提供进一步的指导来接受它。
组织成员可以通过在评论中写入/triage accepted来添加triage/accepted标签。
有关使用PR评论与我互动的说明,请查看here。如果您对我的行为有任何问题或建议,请针对kubernetes/test-infra仓库提出一个问题。

hujrc8aj

hujrc8aj4#

Kubernetes项目目前缺乏足够的贡献者来充分应对所有问题。
此机器人根据以下规则对未分类的问题进行分级处理:

  • lifecycle/stale应用后的90天不活动后,将应用lifecycle/stale
  • lifecycle/stale应用后的30天不活动后,将应用lifecycle/rotten
  • lifecycle/rotten应用后的30天不活动后,该问题将被关闭

您可以:

  • 将此问题标记为新鲜的/remove-lifecycle stale
  • 使用/close关闭此问题
  • 提供帮助,请使用Issue Triage

请将反馈发送至sig-contributor-experience@kubernetes/community
/lifecycle stale

sqyvllje

sqyvllje5#

/remove-lifecycle stale
As PR is still open

相关问题