← Назад к вопросам

В чем разница между app version и chart version в Helm?

1.3 Junior🔥 131 комментариев
#Kubernetes

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между App Version и Chart Version в Helm

В Helm, Chart Version и App Version — это два отдельных, но взаимосвязанных понятия, которые играют разные роли в управлении жизненным циклом приложений. Понимание их различий критически важно для корректного управления зависимостями, версионированием и развертываниями в Kubernetes.

Chart Version (Версия Чарта)

Chart Version — это версия самого Helm-чарта, то есть версия упаковки или шаблона развертывания. Она указывается в файле Chart.yaml в поле version. Эта версия следует семантическому версионированию (SemVer) и увеличивается при любых изменениях в самом чарте: шаблонах (templates/), значениях по умолчанию (values.yaml), зависимостях, документации и т.д.

  • Назначение: Управление изменениями в конфигурации развертывания.
  • Изменяется при: Обновлении шаблонов Kubernetes манифестов, добавлении новых фич чарта, изменении структуры values.yaml, обновлении зависимостей (Chart.yaml), исправлении ошибок в логике шаблонов.
  • Пример в Chart.yaml:
    apiVersion: v2
    name: my-awesome-app
    description: A Helm chart for Kubernetes
    type: application
    version: 1.5.3 # <-- Chart Version
    appVersion: 2.8.1 # <-- App Version
    

App Version (Версия Приложения)

App Version — это версия самого приложения (контейнеризированного образа), которое разворачивается с помощью этого чарта. Она указывается в том же файле Chart.yaml в поле appVersion. Эта версия обычно соответствует тегу Docker-образа (image.tag), который будет использован в развертывании.

  • Назначение: Информационное указание на версию развертываемого ПО.
  • Изменяется при: Выпуске новой версии вашего приложения (например, обновлении с myapp:v2.7.0 на myapp:v2.8.0). Важно отметить, что изменение appVersion не обязательно должно сопровождаться изменением version чарта, и наоборот.
  • Связь с values.yaml: Поле appVersion часто используется как удобная ссылка, но реально используемый тег образа определяется в values.yaml (например, image.tag: "{{ .Chart.AppVersion }}" или явно заданное значение).

Ключевые различия в таблице

АспектChart VersionApp Version
Что версионируетШаблоны, конфигурации и инфраструктурный код чарта.Само приложение (Docker-образ), которое запускается внутри.
Где указываетсяПоле version в Chart.yaml.Поле appVersion в Chart.yaml.
Следует SemVerДа, строго. Патч (1.0.0 -> 1.0.1), минор (1.0.0 -> 1.1.0), мажор (1.0.0 -> 2.0.0).Не обязательно, но часто рекомендуется. Может быть любой строкой (v1.2, latest, sha-abc123).
Когда менятьПри изменении логики чарта (шаблонов, values, зависимостей).При готовности к развертыванию новой сборки приложения.
Влияние на HelmОпределяет, является ли обновление совместимым (минорная/патч-версия) или ломким (мажорная версия). Влияет на команды helm upgrade, helm rollback.Само по себе не влияет на логику Helm. Это метаданные.

Практический пример и важные нюансы

Представьте, что вы обновили библиотеку Helm-чартов для своего веб-приложения.

  1. Ситуация A: Вы выпустили новый функционал приложения (frontend:v3.0.0).
    *   Вы обновляете `appVersion: "3.0.0"` в `Chart.yaml`.
    *   **Chart Version может остаться прежней**, если конфигурация чарта не менялась.

  1. Ситуация B: Вам нужно добавить поддержку ConfigMap в чарт для существующей версии приложения (frontend:v2.8.1).
    *   `appVersion` остается `"2.8.1"`.
    *   **Chart Version должен быть увеличен** (например, с `1.5.2` до `1.6.0`), так как логика чарта изменилась.

Критически важно: Helm при выполнении helm install или helm upgrade смотрит именно на Chart Version. Если вы увеличили только appVersion в Chart.yaml, но не увеличили version, Helm не выполнит обновление, так как сочтет, что чарт не изменился. Для триггера обновления развертывания необходимо либо изменить version чарта, либо использовать флаг --force.

Рекомендуемая практика:

  • Всегда увеличивайте Chart Version при любом изменении в файлах чарта.
  • Используйте appVersion как информативный указатель, а реальный тег образа управляйте через values.yaml (или подставляйте через {{ .Chart.AppVersion }}).
  • В CI/CD пайплайне автоматизируйте инкремент version чарта при мерже в основную ветку, а appVersion связывайте с тегом Git или сборки Docker-образа.

Таким образом, Chart Version — это "версия рецепта", а App Version — "версия ингредиента". Можно поменять ингредиент (обновить образ), оставив рецепт старым, и наоборот — улучшить рецепт, используя те же ингредиенты. Helm как шеф-повар следит за изменениями именно в рецепте (чарте).

В чем разница между app version и chart version в Helm? | PrepBro