Успешно выполнено создание постоянного объема с несуществующим классом хранения

#kubernetes

#kubernetes

Вопрос:

Я создаю следующий PersistentVolume

 ▶ cat mypv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: myvolume
  labels:
    type: local
spec:
  storageClassName: normal
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
    - ReadWriteMany
  hostPath:
    path: "/etc/foo"
 

Однако после создания

 ▶ k create -f mypv.yaml
persistentvolume/myvolume created
 

Я понял, что нет normal StorageClass доступных.

 ▶ k get sc
NAME                 PROVISIONER                RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
standard (default)   k8s.io/minikube-hostpath   Delete          Immediate           false                  8d
 

Итак, как получилось PersistentVolume , что создание с несуществующим классом хранения завершилось успешно?

Ответ №1:

Обратите внимание, что класс хранилища вызывается, когда том необходимо подготовить динамически. Он хорошо работает с облачными провайдерами, такими как GCD, AWS, Azure.

С другой стороны, тома hostPath подготавливаются статически. Класс хранилища игнорируется в этих определениях PV. Следовательно, в вашем случае pv был создан без ошибок. pv привязан к хранилищу на хост-компьютере.

Перейдите по ссылке ниже для получения справки -> https://docs.openshift.com/container-platform/4.2/storage/persistent_storage/persistent-storage-hostpath.html

Ответ №2:

В hostPath случае storageClassName , если на самом деле не игнорируется.
Он по-прежнему используется для привязки к ПВХ.

В файле конфигурации указано, что том находится в /mnt/data на узле кластера. <…>
Он определяет руководство по именованию класса StorageClass для PersistentVolume, которое будет использоваться для привязки запросов PersistentVolumeClaim к этому PersistentVolume.

https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/#create-a-persistentvolume

А также он может быть использован для динамической подготовки, в случае, если кластер предоставляет dynamic provisioner для hostPath (как это делает Minikube).

Ответ №3:

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