pod имеет несвязанные PersistentVolumeClaims

88

Когда я отправляю свои развертывания, по какой-то причине я получаю ошибку на своих модулях:

pod имеет несвязанные PersistentVolumeClaims

Вот мой YAML ниже:

Это работает локально, а не в каком-либо облачном решении.

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.16.0 ()
  creationTimestamp: null
  labels:
    io.kompose.service: ckan
  name: ckan
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: ckan
    spec:
      containers:
        image: slckan/docker_ckan
        name: ckan
        ports:
        - containerPort: 5000
        resources: {}
        volumeMounts:
            - name: ckan-home
              mountPath: /usr/lib/ckan/
              subPath: ckan
      volumes:
      - name: ckan-home
        persistentVolumeClaim:
          claimName: ckan-pv-home-claim
      restartPolicy: Always
status: {}

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: ckan-pv-home-claim
  labels:
    io.kompose.service: ckan
spec:
  storageClassName: ckan-home-sc
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
  volumeMode: Filesystem
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: ckan-home-sc
provisioner: kubernetes.io/no-provisioner
mountOptions:
  - dir_mode=0755
  - file_mode=0755
  - uid=1000
  - gid=1000
soniccool
источник

Ответы:

90

Вы должны определить PersistentVolume, предоставляющий дисковое пространство для использования PersistentVolumeClaim .

При использовании storageClassKubernetes будет включать «Dynamic Volume Provisioning», который не работает с локальной файловой системой.


Чтобы решить вашу проблему:

  • Предоставьте PersistentVolume, удовлетворяющий ограничениям требования (размер> = 100Mi)
  • Удалите storageClassстроку из PersistentVolumeClaim
  • Удалите StorageClass из кластера

Как эти части играют вместе?

При создании описания состояния развертывания обычно известно, какой тип (объем, скорость, ...) хранилища потребуется этому приложению.
Чтобы сделать развертывание универсальным, вы хотели бы избежать жесткой зависимости от хранилища. Объемная абстракция Kubernetes позволяет вам предоставлять и использовать хранилище стандартизованным способом.

PersistentVolumeClaim используется для обеспечения хранения-ограничения наряду с развертыванием приложения.

В PersistentVolume предложения для Кластера объем-экземпляры готовых к употреблению (» bound«). Один PersistentVolume будет привязан к одному требованию. Но поскольку несколько экземпляров этого утверждения могут выполняться на нескольких узлах, к этому тому могут обращаться несколько узлов.

PersistentVolume без Класс складирования считается статичным .

«Dynamic Volume Provisioning» наряду с более Класс складирования позволяет кластеру предоставление PersistentVolumes по требованию. Для того, чтобы это работало, данный провайдер хранилища должен поддерживать подготовку - это позволяет кластеру запрашивать предоставление «нового» PersistentVolume, когда появляется неудовлетворенный PersistentVolumeClaim .


Пример PersistentVolume

Чтобы узнать, как указать вещи, вам лучше всего взглянуть на API для вашей версии Kubernetes , поэтому следующий пример построен из Справочника по API K8S 1.17 :

apiVersion: v1
kind: PersistentVolume
metadata:
  name: ckan-pv-home
  labels:
    type: local
spec:
  capacity:
    storage: 100Mi
  hostPath:
    path: "/mnt/data/ckan"

PersistentVolumeSpec позволяет определить несколько атрибутов. Я выбрал hostPathтом, который отображает локальный каталог как содержимое тома. Емкость позволяет планировщику ресурсов распознавать этот том как применимый с точки зрения потребностей в ресурсах.


Дополнительные ресурсы:

Флориан Нойманн
источник
3
Вы не можете удалить StorageClass, достаточно просто заменить значение имени класса хранилища на пустую строку, например StorageClass: ""
mrvol
Как следует определять PersistentVolume?
Виктор Зуанацци
1
@VictorZuanazzi хороший вопрос - кажется, документы немного изменились, я добавил пример. Вначале копаться в API довольно сложно. Фортунатли часто встречаются перекрестные ссылки из документации по API на руководства и наоборот. Надеюсь, это поможет вам продолжить.
Флориан Нойманн,