#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
... ... ...
Это краткое описание, пожалуйста, посетите официальный документ для получения более подробной информации.