Используйте эфемерные тома в кластере K8S
У меня есть кластер k8s, созданный с помощью Kube-spray. Подготовка тома поддерживается с помощью Rook. До сих пор я использовал постоянные тома.
Приложение развертывается с помощью штурвала. Релиз руля обновляется несколько раз для тестовых целей. Я хочу, чтобы модули использовали новый объем каждый раз, когда я обновляю диаграмму. Я не хочу, чтобы модуль использовал старые данные после обновления руля.
Как я могу этого добиться? Как использовать эфемерные объемы?
Уже пробовали удалить PV перед обновлением руля.
2 ответа
Один из приемов, который мы могли бы попробовать с временным объемом:
- Установите диаграмму с объемами emptyDir вместо pv или pvc.
- Запустите тесты с этими развертываниями. Это внесет изменения в содержимое тома.
- Удалите поды, использующие тома emptyDir. Это также удалит текущие данные тома. Поды будут созданы автоматически.
- Сделайте
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 -}}