在 2 个工作节点 Kubernetes 集群上使用 kind 进行设置测试时(https://kind.sigs.k8s.io/docs/user/quick-start),我想到这个但在其他地方找不到信息。
我在 /var/testpv 中的所有工作节点上创建了一个文件夹,并创建了以下 PV:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pg-pv
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
storageClassName: fast-disks
local:
path: /var/testpv
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- fvi-worker2
- fvi-worker
它工作得很好所以我创建了第二个:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pg-pv2
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
storageClassName: fast-disks
local:
path: /var/testpv
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- fvi-worker
- fvi-worker2
(相同,只是名称不同)
然后我使用这个存储类创建了 2 个 PVC:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: example-local-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: fast-disks
和
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: example-local-claim2
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: fast-disks
最后有两个 pod 使用这些 PVC:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: myfrontend
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: example-local-claim
和
apiVersion: v1
kind: Pod
metadata:
name: mypod2
spec:
containers:
- name: myfrontend
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: example-local-claim2
一切运行正常,我可以看到每个 pod 上创建的文件都进入正确的存储,每个 pod 位于不同的工作节点上。
但是,如果我尝试创建一个新的 PV、PVC 和 pod,则不会出现任何错误!
更糟糕的是,PV 是在同一位置创建的,所以我实际上可以看到 pod1 或 pod2(依赖)文件!
我本来以为 Kubernetes 会进行某种检查,以确保同一主机的 PV 确实存在,但显然并不存在。
我是不是漏掉了什么?我是不是做错了什么?或者在创建 PV 时真的需要非常小心吗?
感谢您的见解,
答案1
是的,它有效,因为这是使用本地 pv 时共享磁盘的唯一方法。这是预期的行为。在某些情况下,您可能希望在 pod 之间共享文件,这是实现此目的的一种方法。