我们在 K8s 上运行的平台有不同的组件。我们需要在其中两个组件(comp-A 和 comp-B)之间共享存储,但我们错误地为此定义了 PV 和 PVC ReadWriteOnce
,即使这两个组件在不同的节点上运行,一切正常,我们能够从两个组件读取和写入存储。
根据 K8s 文档,ReadWriteOnce
可以挂载到一个节点,我们必须使用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: …
Run Code Online (Sandbox Code Playgroud) 我有一个三节点 GCE 集群和一个带有三个副本的单 pod GKE 部署。我像这样创建了 PV 和 PVC:
# Create a persistent volume for web content
apiVersion: v1
kind: PersistentVolume
metadata:
name: nginx-content
labels:
type: local
spec:
capacity:
storage: 5Gi
accessModes:
- ReadOnlyMany
hostPath:
path: "/usr/share/nginx/html"
--
# Request a persistent volume for web content
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nginx-content-claim
annotations:
volume.alpha.kubernetes.io/storage-class: default
spec:
accessModes: [ReadOnlyMany]
resources:
requests:
storage: 5Gi
Run Code Online (Sandbox Code Playgroud)
它们在容器规范中被引用,如下所示:
spec:
containers:
- image: launcher.gcr.io/google/nginx1
name: nginx-container
volumeMounts:
- name: nginx-content
mountPath: /usr/share/nginx/html
ports:
- containerPort: …
Run Code Online (Sandbox Code Playgroud) google-cloud-platform kubernetes google-kubernetes-engine persistent-volumes persistent-volume-claims
kubernetes ×2