Для чего нужны Helm чарты
Что проверяют
Понимаете ли вы, какую проблему решает Helm, а не только знаете helm install. Для Java-разработчика это вопрос о том, как ваш сервис попадает в кластер и чем различаются окружения. Следом часто спрашивают, как откатить неудачный релиз и что при этом не откатится.
Как отвечать
Helm это пакетный менеджер для Kubernetes. Чарт это шаблон набора манифестов, релиз это установленный экземпляр чарта с конкретными значениями.
- шаблонизация: вместо трёх копий YAML для dev, stage и prod один набор шаблонов в
templates/на Go templates со Sprig-функциями и разные файлы значений. ВChart.yamlметаданные (versionчарта отдельно отappVersion), вvalues.yamlпараметры по умолчанию, общие куски в_helpers.tpl, проверка значений вvalues.schema.json; - релизы и история:
helm upgrade --installставит или обновляет,helm historyпоказывает ревизии,helm rollbackвозвращает прежнюю. История хранится в кластере, по умолчанию в секретах неймспейса релиза; серверного Tiller нет с Helm 3; - зависимости: сабчарты в
dependenciesуChart.yaml, публикация в OCI-реестр рядом с образами; - отладка:
helm templateиhelm lintпоказывают итоговые манифесты до выката.
Привяжите к Java-сервису: в values выносят образ и тег, resources вместе с -XX:MaxRAMPercentage, чтобы JVM считала от лимита контейнера, SPRING_PROFILES_ACTIVE, пробы на /actuator/health/liveness и /actuator/health/readiness, application.yaml в ConfigMap. Аннотация с sha256sum от ConfigMap в шаблоне пода перезапускает поды при смене конфига. Альтернатива для простых случаев: Kustomize, он патчит обычный YAML и встроен в kubectl.
Где спотыкаются
Кладут пароли в values.yaml в репозиторий. Секреты берут из хранилища через External Secrets или Vault либо шифруют SOPS.
Считают helm rollback полным откатом. Схему базы, изменённую Flyway или Liquibase, он не вернёт, поэтому миграции делают обратно совместимыми.
Не знают, что при смене одного ConfigMap Deployment не меняется и поды не перезапускаются, и долго ищут, почему настройка не применилась.