持久量与声明不匹配

问题描述 投票:0回答:3

我创建了一个简单的本地存储卷。像这样的东西:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: vol1
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    path: /srv/volumes/vol1
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - my-node

我创造了一个主张:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage:1Gi

由于未知原因,他们没有得到匹配。我究竟做错了什么?

kubernetes persistent-volumes persistent-volume-claims
3个回答
1
投票

您应该在PVC中指定volumeName以将其专门绑定到您刚刚创建的PV,如下所示:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  volumeName: "vol1"
  resources:
    requests:
      storage:1Gi

此外,如果您在PVC中指定storageClassName,您的PVC也将绑定到符合该规范的PV(但如果该存储的PV超过1,则不保证它将绑定到您的“vol1”PV类)。

希望这可以帮助!


1
投票

关于本地存储,值得注意的是:

使用本地存储将您的应用程序绑定到该特定节点,使您的应用程序更难以安排。如果该节点或本地卷遇到故障并且无法访问,则该窗格也将变得不可访问。此外,许多云提供商不为本地存储提供广泛的数据持久性保证,因此您可能会在某些情况下丢失所有数据。

这是为了Kubernetes 1.10。在Kubernetes 1.14当地的持续量成为GA。

您发布了一个用户需要的答案。只是为了澄清用户的意思是消费者,如pod,部署,statefullset等。因此,仅使用简单的pod定义将使您的PV绑定:

kind: Pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
    - name: myfrontend
      image: nginx
      volumeMounts:
      - mountPath: "/var/www/html"
        name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: myclaim

现在,当你删除pod并尝试运行另一个pod时会发生问题。在这种情况下,如果您或其他人寻求解决方案,则已在此GitHub issue中进行了描述。

希望这可以解决问题。


0
投票

我想到了。我只需要一个用户。只要我有一个用户,一切都很完美。

© www.soinside.com 2019 - 2024. All rights reserved.