在同一个节点上以相同的路径创建多个本地持久卷可以正常工作

在同一个节点上以相同的路径创建多个本地持久卷可以正常工作

在 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 之间共享文件,这是实现此目的的一种方法。

相关内容