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

«В чем разница между appVersion и version в Helm Chart?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Helm version (версия чарта) и appVersion (версия приложения) — это два разных понятия, которые часто путают.

version (Chart Version) — версия самого Helm-чарта (его структуры, шаблонов, зависимостей). Подчиняется SemVer (MAJOR.MINOR.PATCH). Изменяется при:

  • MAJOR: обратно несовместимые изменения в чарте
  • MINOR: новая функциональность обратно совместимая
  • PATCH: обратно совместимые багфиксы

appVersion (Application Version) — версия развертываемого приложения (Docker образа). Указывается для информации, Helm не использует ее для логики.

Пример Chart.yaml:

apiVersion: v2
name: my-application
description: A Helm chart for our microservice

# Chart version - меняется при изменении chart
version: 2.5.1  # ← Chart Version

# Application version - версия Docker образа
appVersion: 1.18.3-alpine  # ← App Version

dependencies:
  - name: redis
    version: 14.0.0
    repository: https://charts.bitnami.com/bitnami

Практические сценарии:

  1. Обновление только приложения:
    
    # Chart.yaml
    version: 2.5.1  # Не меняем
    appVersion: 1.18.4-alpine  # Меняем на новую версию образа

values.yaml

image: repository: myregistry/app tag: 1.18.4-alpine # Должен совпадать с appVersion


2. **Обновление чарта (добавили ConfigMap):**
```yaml
# Chart.yaml
version: 2.6.0  # MINOR увеличили
appVersion: 1.18.3-alpine  # Не меняли
  1. Работа с Helm CLI:
    
    # Установка с указанием версии чарта
    helm install my-app ./chart --version 2.5.1

Поиск в репозитории

helm search repo bitnami/nginx

NAME CHART VERSION APP VERSION

bitnami/nginx 13.2.10 1.21.6

Просмотр установленных релизов

helm list

NAME NAMESPACE REVISION STATUS CHART APP VERSION

my-app default 1 deployed my-app-2.5.1 1.18.3-alpine



**Важно:** При публикации в Helm-репозиторий (ChartMuseum, Harbor) индексируется только `version`. `appVersion` — чисто информационное поле. В CI/CD пайплайнах мы обычно автоматически увеличиваем `version` при изменениях в чарте, а `appVersion` берем из тега Docker образа.