发生了什么?
我们知道 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>
5条答案
按热度按时间hpxqektj1#
这个问题目前正在等待分类。
如果SIG或子项目确定这是一个相关的问题,他们将通过应用
triage/accepted
标签并提供进一步的指导来接受它。组织成员可以通过在评论中写入
/triage accepted
来添加triage/accepted
标签。有关使用PR评论与我互动的说明,请查看here。如果您对我的行为有任何问题或建议,请针对kubernetes/test-infra仓库提出一个问题。
bweufnob2#
/sig storage
p5fdfcr13#
/assign
hujrc8aj4#
Kubernetes项目目前缺乏足够的贡献者来充分应对所有问题。
此机器人根据以下规则对未分类的问题进行分级处理:
lifecycle/stale
应用后的90天不活动后,将应用lifecycle/stale
lifecycle/stale
应用后的30天不活动后,将应用lifecycle/rotten
lifecycle/rotten
应用后的30天不活动后,该问题将被关闭您可以:
/remove-lifecycle stale
/close
关闭此问题请将反馈发送至sig-contributor-experience@kubernetes/community。
/lifecycle stale
sqyvllje5#
/remove-lifecycle stale
As PR is still open