Заявка на постоянный том, не требующая тома

У меня есть претензия на постоянный том

$ kubectl get pvc -ngitlab-managed-apps
NAME                           STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
prometheus-prometheus-server   Pending                                                     0s


$ kubectl describe pvc prometheus-prometheus-server -ngitlab-managed-apps
Name:          prometheus-prometheus-server
Namespace:     gitlab-managed-apps
StorageClass:  
Status:        Pending
Volume:        
Labels:        app=prometheus
               chart=prometheus-9.5.2
               component=server
               heritage=Tiller
               release=prometheus
Annotations:   <none>
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      
Access Modes:  
VolumeMode:    Filesystem
Mounted By:    prometheus-prometheus-server-78bdf8f5b7-pkvcr
Events:
  Type    Reason         Age                From                         Message
  ----    ------         ----               ----                         -------
  Normal  FailedBinding  14s (x5 over 60s)  persistentvolume-controller  no persistent volumes available for this claim and no storage class is set

И я создал этот постоянный том

$ kubectl get pv
NAME                           CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                                              STORAGECLASS   REASON   AGE
prometheus-prometheus-server   8Gi        RWO            Retain           Released   gitlab-managed-apps/prometheus-prometheus-server   manual                  17m

$ kubectl describe pv prometheus-prometheus-server
Name:            prometheus-prometheus-server
Labels:          type=local
Annotations:     kubectl.kubernetes.io/last-applied-configuration:
                   {"apiVersion":"v1","kind":"PersistentVolume","metadata":{"annotations":{},"labels":{"type":"local"},"name":"prometheus-prometheus-server"}...
                 pv.kubernetes.io/bound-by-controller: yes
Finalizers:      [kubernetes.io/pv-protection]
StorageClass:    manual
Status:          Released
Claim:           gitlab-managed-apps/prometheus-prometheus-server
Reclaim Policy:  Retain
Access Modes:    RWO
VolumeMode:      Filesystem
Capacity:        8Gi
Node Affinity:   <none>
Message:         
Source:
    Type:          HostPath (bare host directory volume)
    Path:          /var/prometheus-server
    HostPathType:  
Events:            <none>

Почему в претензии не заявлен объем? Есть ли еще что-нибудь, что должно совпадать, кроме названия? Есть ли какие-нибудь журналы, в которых я должен заглянуть? На данный момент я не вижу доступных постоянных томов для этого утверждения, и класс хранилища не установлен.


person CyberProdigy    schedule 23.08.2020    source источник
comment
Вы поняли свою проблему? Я обновил свой ответ. Сообщите мне, если это не решит вашу проблему.   -  person Kamol Hasan    schedule 24.08.2020


Ответы (1)


Чтобы понять сообщение об ошибке, вам необходимо понять, как static и динамическая подготовка.

Когда ни один из статических PV, созданных администратором, не соответствует PersistentVolumeClaim пользователя, кластер может попытаться динамически подготовить том, особенно для PVC. Эта подготовка основана на StorageClasses.

После создания PersistentVolumeClaim плоскость управления Kubernetes ищет PersistentVolume, удовлетворяющий требованиям утверждения. Если плоскость управления находит подходящий PersistentVolume с тем же StorageClass, она привязывает заявку к тому.

В вашей ошибке говорится, что ваш PVC не нашел подходящего PV, и вы также не упомянули имя storageClass.

У вашего PV есть StorageClass: manual, но у вашего PVC нет storageClass (StorageClass: ""). Добавление StorageClass: manual в ваш PVC должно решить вашу проблему.

Вам необходимо выбрать один из следующих вариантов подготовки.

Статическая подготовка:

  • создать PV
  • создать PVC с помощью селектора меток, чтобы он мог найти PV с упомянутыми метками.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim
spec:
  selector: # <----- here
    matchLabels:
      release: "stable"
... ...
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim
  label: # <---- here
    release: "stable"

Динамическая синхронизация:

  • создать storageClass с указанным поставщиком
  • создать PVC с указанным именем storageClass

Or

  • создайте как PV, так и PVC с тем же упомянутым именем storageClass.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: slow
provisioner: some-provisioner 
... ... ...
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim
spec:
  storageClassName: slow # <---- here
... ... ...

Это краткое описание. Дополнительные сведения см. В официальном документе.

person Kamol Hasan    schedule 24.08.2020