永久数量与声明不匹配

时间:2019-04-19 23:46:00

标签: kubernetes persistent-volumes persistent-volume-claims

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

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

由于未知原因,他们没有比赛。我在做什么错了?

3 个答案:

答案 0 :(得分:1)

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

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

此外,如果您在PVC中指定storageClassName,则PVC也将绑定到与该规范匹配的PV(尽管如果存在以下情况,它不保证将其绑定到“ vol1” PV)该存储类别的PV大于1。

希望这会有所帮助!

答案 1 :(得分:1)

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

  

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

这是针对Kubernetes 1.10的。在Kubernetes 1.14中,本地持久卷成为GA。

您发布了一个要求该用户的答案。只是为了澄清您的用户意思是诸如吊舱,部署,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中对此进行了描述。

希望这可以清除一切。

答案 2 :(得分:0)

我知道了。我只需要一个用户。只要有用户,一切都可以正常运行。