Повторно используйте PersistentVolume после переустановки развертывания руля - PullRequest
0 голосов
/ 07 ноября 2018

Когда я helm delete <deploymentname> развертывание, его PV и PVC также удаляются. Как я могу избежать удаления реальных данных в PV и иметь возможность восстановить эти PV, когда я снова helm install <deploymentname>?

Я регулярно использую helm upgrade, но мне очень неудобно, если все, что требуется для удаления всех данных, - это удаление с помощью helm (даже без опции --purge он удаляет все PV)

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Предполагая, что вы используете класс хранения default, единственный способ избежать диаграммы Хелма для удаления используемых на нем PV / PVC - это заранее создать PVC, чтобы они не управлялись релизом Helm.

Единственное исключение - StatefulSets , которые по определению никогда не удаляют свои PVC, даже если они созданы релизом Helm

Другой вариант, если ваши диаграммы Хелма позволяют это, использует Storage-класс с reclaimPolicy: Retain, который позволит избежать удаления ваших PV, когда ваши развертывания, PVC-блоки наборов демонов отделены и удалены

0 голосов
/ 07 ноября 2018

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

Наборы с сохранением состояния используют постоянное именование модуля и поддерживают генерацию ПВХ на модуль, также с постоянным именем. Эти pvcs не удаляются, когда удаляются блоки / наборы с сохранением состояния, поэтому они остаются для повторного использования воссозданными наборами с сохранением состояния или ручным выпуском с удалением pvc (s).

Пример StatefulSet взят из https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/ прилагается ниже.

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx"
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi
...