Я настроил самоуправляемый кластер kubernetes вместе с longhorn в качестве распределенного хранилища. Установка была довольно простой.
Я создал такой класс хранения, как этот:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: longhorn
annotations:
# make this class the default storage class
storageclass.kubernetes.io/is-default-class: "true"
provisioner: driver.longhorn.io
reclaimPolicy: Retain
allowVolumeExpansion: true
parameters:
numberOfReplicas: "3"
staleReplicaTimeout: "2880" # 48 hours in minutes
fromBackup: ""
Я могу создать и привязать новый том PersistenceVolume к своему модулю (например, postgres сервер), теперь легко определяя PersistenceVolumeClaim:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: appdata
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 2Gi
Теперь, после развертывания моего модуля, я вижу, что PV создан (и, конечно, он работает)
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-803d3061-457c-4023-9864-636c7a3f626a 2Gi RWO Retain Bound default/dbdata longhorn 10d
Когда я удаляю свой postgreSQL модуль моего PV все еще существует благодаря политике «Сохранить». Но когда я снова восстанавливаю свой модуль, создается новый том PersistenceVolume. Так что теперь у меня есть два:
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-803d3061-457c-4023-9864-636c7a3f626a 2Gi RWO Retain Released default/dbdata longhorn 10d
pvc-9385b1ad-4c06-4bf2-b595-db6681334c3d 2Gi RWO Retain Bound default/dbdata longhorn 10d
Что я не понял до сих пор - и это мой вопрос - как я могу создать / запросить PersistenceVolume с пользовательским именем (без случайного UUID). И как я могу сказать своему POD повторно использовать этот PV? Или спросили другой путь: как я могу сказать Longhorn создать объект PersistenceVolume с заданным именем, а не со случайным UUID?