【发布时间】:2020-12-04 07:53:43
【问题描述】:
我们在 K8s 上运行的平台具有不同的组件。我们需要在其中两个组件(comp-A 和 comp-B)之间共享存储,但我们错误地将 PV 和 PVC 定义为 ReadWriteOnce,即使这两个组件在不同节点上运行,一切正常我们能够从这两个组件读取和写入存储。
根据 K8s 文档,ReadWriteOnce 可以挂载到一个节点,我们必须使用 ReadWriteMany:
- ReadWriteOnce -- 卷可以由单个节点以读写方式挂载
- ReadOnlyMany -- 卷可由多个节点以只读方式挂载
- ReadWriteMany -- 卷可以被许多节点以读写方式挂载"
所以我想知道为什么一切正常,而它不应该?
更多信息: 我们使用 NFS 进行存储,我们没有使用动态配置,下面是我们如何定义 pv 和 pvc(我们使用 helm):
- apiVersion: v1
kind: PersistentVolume
metadata:
name: gstreamer-{{ .Release.Namespace }}
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
mountOptions:
- hard
- nfsvers=4.1
nfs:
server: {{ .Values.global.nfsserver }}
path: /var/nfs/general/gstreamer-{{ .Release.Namespace }}
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gstreamer-claim
namespace: {{ .Release.Namespace }}
spec:
volumeName: gstreamer-{{ .Release.Namespace }}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
更新
一些 kubectl 命令的输出:
$ kubectl get -n 149 pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
gstreamer-claim Bound gstreamer-149 10Gi RWO 177d
$ kubectl get -n 149 pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
gstreamer-149 10Gi RWO Recycle Bound 149/gstreamer-claim 177d
我认为它会以某种方式处理它,因为 pod 唯一需要做的就是连接到该 IP。
【问题讨论】:
-
你使用哪个 csi?
-
我们没有使用任何 csi。我复制了我们所做的(yaml)
-
kubectl get pvc 和 kubectl get pv 是什么意思?
-
虽然 Kubernetes 文档另有建议,但尚不清楚 NFS 卷 accessModes 是否真正得到尊重 - 请参阅 stackoverflow.com/questions/40524103/…
-
是本地环境(kubeadm、minikube)还是使用云环境?
标签: kubernetes kubernetes-pod persistent-volumes kubernetes-pvc