Kubernetes PersistentVolumes访问模式



根据K8S官方文件:

访问模式为:

ReadWriteOnce–卷可以通过单节点以读写方式安装

ReadOnlyMany–卷可以由许多节点以只读方式装入

ReadWriteMany–卷可以通过许多节点以读写方式安装

我创建了一个具有RWO访问模式的持久卷。我已经应用了PVC:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: readwriteonce-test
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
storageClassName: ""

和部署:

apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: test-deployment
spec:
selector:
matchLabels:
app: test-deployment
replicas: 3
template:
metadata:
labels:
app: test-deployment
spec:
containers:
- name: test-pod
image: "gcr.io/google_containers/busybox:1.24"
command:
- "/bin/sh"
args:
- "-c"
- "rm -R /data/*; while :; do ls /data/; name=$(date '+%s'); echo "some data in file ${name}" >> "/data/${name}.txt" ; sleep 10; cat "/data/${name}.txt"; done"
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /data
name: test-volume
restartPolicy: Always
volumes:
- name: test-volume
persistentVolumeClaim:
claimName: readwriteonce-test

PeristentVolume:

Name:            readwriteonce-test
Labels:          volume-name=readwriteonce-test
Annotations:     kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"PersistentVolume","metadata":{"annotations":{},"labels":{"volume-name":"readwriteonce-test"},"name":"readwriteo...
Finalizers:      [kubernetes.io/pv-protection]
StorageClass:    
Status:          Bound
Claim:           ***/readwriteonce-test
Reclaim Policy:  Retain
Access Modes:    RWO
VolumeMode:      Filesystem
Capacity:        8Gi
Node Affinity:   <none>
Message:         
Source:
Type:      NFS (an NFS mount that lasts the lifetime of a pod)
Server:    ***.efs.eu-west-1.amazonaws.com
Path:      /readwriteonce-test
ReadOnly:  false
Events:        <none>

问题是:

有人能解释一下为什么这样的配置没有错误吗?正如您所看到的,每个吊舱都安装在不同的节点上。每个pod都可以看到其他pod创建的文件。

屏幕截图

我只能确认,当使用基于EFS的持久卷(使用PVC请求规范accessModes: ReadOnlyMany动态创建(时,我在测试EKS集群上与您共享相同的观察结果。

如下所示,我可以从两个不同的Pod同时写入同一个文件,计划在不同的节点上:

Hello from test-deployment-6f954f9f67-ljghs at 1583239308 on ip-192-168-68-xyz.us-west-2.compute.internal node
Hello from test-deployment-6f954f9f67-bl99s at 1583239308 on ip-192-168-49-abc.us-west-2.compute.internal node

相反,我更希望类似的行为,比如在其他PV类型支持所有类型的访问模式(RWO、RWX、ROX(的情况下:

Warning  FailedAttachVolume  103s  attachdetach-controller  Multi-Attach error for volume "pvc-badb4724-5d5a-11ea-8395-42010aa80131"
Multi-Attach error for volume "pvc-badb4724-5d5a-11ea-8395-42010aa80131" Volume is already used by pod(s) test-deployment-xyz-...

*当调度器试图使用相同PV调度Pod的第二个副本时发生。

我认为这是基于NFS的存储的本质,它是EFS提供者的底层存储类型。

似乎我们并不是唯一一个在理解官方文档方面有问题的人,请查看这些开放的github问题:#18714,#60903。

最新更新