Постоянный том не сопоставляется с утверждением

#kubernetes #persistent-volumes #persistent-volume-claims

#kubernetes #постоянные тома #постоянные утверждения тома

Вопрос:

Я создал простой локальный том хранилища. Что-то вроде этого:

 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
  

По неизвестной причине они не получают совпадений. Что я делаю не так?

Ответ №1:

О локальном хранилище стоит отметить, что:

Использование локального хранилища привязывает ваше приложение к этому конкретному узлу, усложняя планирование вашего приложения. Если этот узел или локальный том сталкивается со сбоем и становится недоступным, то этот модуль также становится недоступным. Кроме того, многие облачные провайдеры не предоставляют исчерпывающих гарантий надежности данных для локального хранилища, поэтому в определенных сценариях вы можете потерять все свои данные.

Это для Kubernetes 1.10. В Kubernetes 1.14 локальные постоянные тома стали GA.

Вы опубликовали ответ, что требуется пользователь. Просто чтобы уточнить, что пользователь, которого вы имели в виду, является потребителем, таким как pod, deployment, 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
  

Теперь проблема возникает, когда вы удаляете модуль и пытаетесь запустить другой. В этом случае, если вы или кто-то другой будете искать решение, оно было описано в этом выпуске GitHub .

Надеюсь, это прояснит ситуацию.

Ответ №2:

Вы должны указать volumeName в своем PVC, чтобы привязать его конкретно к PV, который вы только что создали как so:

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

Кроме того, если вы укажете storageClassName в своем PVC, ваш PVC также будет привязан к PV, соответствующему этой спецификации (хотя это не гарантирует, что он будет привязан к вашему PV «vol1», если для этого класса хранения имеется более 1 PV).

Надеюсь, это поможет!

Ответ №3:

Я понял это. Мне просто нужен был пользователь. Пока у меня был пользователь, все работало отлично.