Повторно используйте PersistentVolume после переустановки развертывания руля

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

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

2 ответа

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

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

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

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

Наборы с отслеживанием состояния используют постоянное именование модуля и поддерживают создание pvc для модуля, также с постоянным именем. Эти 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
Другие вопросы по тегам