【发布时间】:2021-10-14 01:45:33
【问题描述】:
我对名为 PV 和 PVC 的 Kubernetes 学习步骤非常坚持。
我在这里要做的是了解如何处理多个 pod 上的共享读写卷。
我在这里的理解是,除非配置了类似 NFS 的存储类,否则不能在 Pod 之间共享 PVC。
我仍然使用我的 hostPath 存储类,我尝试了以下方法(Docker Desktop 和 3 节点 microK8s 集群):
- 此
PVC具有动态主机路径配置
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-desktop
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Mi
- 在同一
PVC上使用 3 个复制的 pod 进行部署。
apiVersion: apps/v1
kind: Deployment
metadata:
name: busybox
spec:
replicas: 3
selector:
matchLabels:
app: busybox
template:
metadata:
labels:
app: busybox
spec:
containers:
- name: busybox
image: library/busybox:stable
command: ["/bin/sh"]
args:
["-c", 'while true; do echo "1: $(hostname)" >> /root/index.html; sleep 2; done;',]
volumeMounts:
- mountPath: /root
name: vol-desktop
volumes:
- name: vol-desktop
persistentVolumeClaim:
claimName: pvc-desktop
- 用于提供卷内容的 Nginx 服务器
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:stable
volumeMounts:
- mountPath: /usr/share/nginx/html
name: vol-desktop
ports:
- containerPort: 80
volumes:
- name: vol-desktop
persistentVolumeClaim:
claimName: pvc-desktop
按照我对文档的理解,这是不可能的,但实际上一切都运行得非常顺利,我的 Nginx 服务器很好地显示了最新的index.html 文件。
它实际上适用于单节点集群和多节点集群。
我在这里没有得到什么?为什么这个东西有效?
每个 pod 安装在启动时都是自己的主机路径卷吗?
hostPath 存储如何在多个节点之间工作?
编辑:对于多节点情况,已在每台机器的相同存储路径之间创建了一个网络文件夹,这就是所有内容都已成功复制的原因。我不明白在每个安装了PVC 的节点上创建了相同的主机路径。
对于有相同问题的任何人:安装此主机路径 PVC 的每个节点都将在 PV 路径上创建自己的文件夹。
因此,如果节点之间没有网络复制,只有同一节点的 pod 将共享同一文件夹。
这就是为什么不鼓励在多节点集群上使用它的原因,因为集群上 Pod 的位置不可预测。
谢谢!
【问题讨论】:
-
AFAIK,
RWO表示“来自单个节点的一个或多个 RW”而不是单个 pod。所以只要所有的 pod 都在同一个节点上,它们就可以访问数据 -
好吧@P....,但经过进一步测试,此设置也适用于多节点集群。感谢您的帮助
-
在您的“多节点”集群中,您的 pod 位于何处?它们是安排在单节点还是多节点上。尝试
kubectl get pod -owide看看那里的节点。 -
对于测试,在 3 个节点上复制了 15 个 pod: - 节点 1:5 个 pod - 节点 2:5 个 pod - 节点 3:5 个 pod
标签: kubernetes persistent-volumes persistent-storage persistent-volume-claims