Как я могу сохранить объем постоянства в Longhorn - PullRequest
0 голосов
/ 01 апреля 2020

Я настроил самоуправляемый кластер 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?

1 Ответ

1 голос
/ 02 апреля 2020

Когда вы удаляете PV C, соответствующий PV становится освобожденным. Этот PV обычно содержит конфиденциальные данные, и поэтому нет возможности связываться с ним, даже если это PV C с тем же именем и в том же пространстве имен, что и предыдущий - кто знает кто пытается украсть данные!

Здесь требуется вмешательство администратора. Есть два варианта:

  1. Сделать PV доступным для всех - удалите PV.Spec.ClaimRef. Этот PV может быть привязан к любому PV C (при условии, что емкость, режим доступа и селекторы совпадают)
  2. Сделать PV доступным для определенного c PV C - предварительно заполнить PV.Spec.ClaimRef указатель на PV C. Оставьте PV.Spec.ClaimRef и пустой UID, так как PV C не требуется в данный момент, и вы не знаете UID PV C. Этот PV может быть привязан только к указанному PV C.

Если вы сосредоточены на динамическом обеспечении обычно pv c имеет имя stati c, потому что вы создайте его вручную, затем сгенерируйте pv на основе информации в заявке.

Посмотрите здесь: reusing-persistent-volume .

Дайте мне знать, если это помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...