Helm удаляет StorageClass, но сохраняет заявки на постоянные тома

Я использую helm для развертывания StatefulSet, ниже yaml

---
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
  name: {{ .Values.database.mongo.storageClassName }}
  labels:
    for: for-mongo-statefulset
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-ssd
reclaimPolicy: Retain
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: mongo
spec:
  serviceName: {{ .Values.database.mongo.serviceName }}
  replicas: {{ .Values.database.mongo.replicas }}
  template:
    metadata:
      labels:
        role: mongo
        environment: prod
    spec:
      serviceAccountName: {{ .Values.serviceAccount }}
      terminationGracePeriodSeconds: 10
      containers:
        - name: mongo
          image: mongo
          command:
            - mongod
            - "--bind_ip"
            - 0.0.0.0
            - "--replSet"
            - {{ .Values.database.mongo.replicaSet }}
            - "--smallfiles"
            - "--noprealloc"
          ports:
            - containerPort: {{ .Values.database.mongo.port }}
          volumeMounts:
            - name: {{ .Values.database.mongo.storageName }}
              mountPath: /data/db
        - name: mongo-sidecar
          image: cvallance/mongo-k8s-sidecar
          env:
            - name: MONGO_SIDECAR_POD_LABELS
              value: "role=mongo,environment=prod"
            - name: KUBERNETES_MONGO_SERVICE_NAME
              value: {{ .Values.database.mongo.serviceName }}
  volumeClaimTemplates:
  - metadata:
      name: {{ .Values.database.mongo.storageName }}
    spec:
      storageClassName: {{ .Values.database.mongo.storageClassName }}
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 100Gi

На helm install . -n release-name он создает StorageClass, PersistentVolume & PersistentVolumeClaim.

Если я удалю релиз helm delete release-name --purge, он сохранит pv и pvc, и это нормально. Но он удаляет StorageClass, хотя я указал reclaimPolicy: Retain в sc.

Это ожидаемое поведение?

Версия Helm

Client: v2.10.0+g9ad53aa
Server: v2.10.0+g9ad53aa

Версия Kubernetes

Client Version: v1.11.1
Server Version: v1.9.7-gke.5

Обновить

Я предположил, что reclaimPolicy предназначен как для StorageClass, так и для PV / PVC. Спасибо @Pablo за то, что я прояснил мое понимание относительно reclaimPolicy

Политика возврата

Для постоянных томов, динамически создаваемых классом хранилища, политика возврата будет указана в поле reclaimPolicy класса, которое может иметь значение «Удалить» или «Сохранить». Если при создании объекта StorageClass не указано reclaimPolicy, по умолчанию он будет удален.

Есть ли что-нибудь похожее на reclaimPolicy, которое укажет helm / kubernetes не удалять StorageClass при выполнении helm delete release-name --purge?


person Yogesh    schedule 10.09.2018    source источник


Ответы (3)


Политика возврата, указанная в объекте StorageClass, используется для постоянных томов, а не для самого класса хранилища. Это означает, что pvs и pvcs, созданные с использованием этого класса хранилища, унаследуют политику возврата, установленную в классе хранилища.

Дополнительную информацию об этом можно найти здесь: https://kubernetes.io/docs/concepts/storage/storage-classes/

person Pablo Marti Cordero    schedule 10.09.2018

Попробуйте установить Удалить в StorageClass reclaimPolicy

https://kubernetes.io/docs/concepts/storage/storage-classes/#reclaim-policy

kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
  name: {{ .Values.database.mongo.storageClassName }}
  labels:
    for: for-mongo-statefulset
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-ssd
reclaimPolicy: Delete
person Alberto Fojo    schedule 25.09.2020

Аннотация "helm.sh/resource-policy": keep указывает Тиллеру пропустить этот ресурс во время helm delete операции. Однако этот ресурс становится бесхозным. Хельм больше не будет управлять этим никак. Это может привести к проблемам при использовании helm install —replace в выпуске, который уже был удален, но сохранил ресурсы.

Чтобы явно отказаться от удаления ресурсов, например, при переопределении аннотаций диаграммы по умолчанию, установите значение аннотации политики ресурсов на delete.

person Vikas Rathore    schedule 25.09.2020