Утверждение о постоянном томе, не претендующее на объем

#kubernetes #gitlab #prometheus #persistent-volume-claims

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

Вопрос:

У меня есть это утверждение о постоянном томе

 $ 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>
  

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

Комментарии:

1. Вы разобрались со своей проблемой? Я обновил свой ответ. Дайте мне знать, если это не решит вашу проблему.

Ответ №1:

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

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

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

Ваша ошибка гласит: «Ваш 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"
  

Динамическая подготовка:

  • создайте класс хранилища с упомянутым provisioner
  • создайте PVC с указанным именем StorageClass

Или

  • создайте 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
... ... ...
  

Это краткое описание, пожалуйста, посетите официальный документ для получения более подробной информации.