Используйте эфемерные тома в кластере K8S

У меня есть кластер k8s, созданный с помощью Kube-spray. Подготовка тома поддерживается с помощью Rook. До сих пор я использовал постоянные тома.

Приложение развертывается с помощью штурвала. Релиз руля обновляется несколько раз для тестовых целей. Я хочу, чтобы модули использовали новый объем каждый раз, когда я обновляю диаграмму. Я не хочу, чтобы модуль использовал старые данные после обновления руля.

Как я могу этого добиться? Как использовать эфемерные объемы?

Уже пробовали удалить PV перед обновлением руля.

2 ответа

Решение

Один из приемов, который мы могли бы попробовать с временным объемом:

  1. Установите диаграмму с объемами emptyDir вместо pv или pvc.
  2. Запустите тесты с этими развертываниями. Это внесет изменения в содержимое тома.
  3. Удалите поды, использующие тома emptyDir. Это также удалит текущие данные тома. Поды будут созданы автоматически.
  4. Сделайте helm upgrade.

helm upgradeпостарается сохранить как можно большую часть существующей инфраструктуры. Если у вас уже есть PersistentVolumeClaim с именемmyapp-pvc, и ты бежишь helm upgrade, он заметит, что PVC уже существует, и оставит его нетронутым. Я думаю, что это происходит на уровне Helm, но даже если Helm загрузит идентичное описание PVC в Kubernetes, это все равно не приведет к изменениям.

Тупой подход - бежать helm del --purge существующей установки, дождитесь полной очистки PVC, а затем helm install заново.

Другой возможный подход - закодировать какое-то уникальное или случайное значение в имени PVC. Хитрость в том, что вам нужно, чтобы одно и то же значение использовалось для всех его применений в одной и той же установке диаграммы, но при обновлении диаграммы оно должно отличаться. Вы можете использовать комбинацию метаданных диаграммы, чтобы предоставить это

{{- define "myapp.pvc.name" -}}
{{ .Release.Name }}-{{ .Chart.Name }}-pvc
{{- if .Values.destroyPersistentState -}}
-{{ .Release.Revision }}
{{- end -}}
{{- end -}}
Другие вопросы по тегам