📝 Kubernetes

Helm: пакетный менеджер Kubernetes

P
Автор
Pyland
📅
Опубликовано
30.06.2026
⏱️
Время чтения
3 мин
👁️
Просмотров
90
📊
Уровень
Статья
🐦 💼 ✈️

Развернуть приложение в K8s — это 5–10 YAML-файлов: Deployment, Service, Ingress, ConfigMap, Secret, HPA… Для каждого окружения (dev/staging/prod) файлы чуть разные. Helm решает эту проблему.

Что такое Helm и Chart

Helm — пакетный менеджер для Kubernetes. Как apt для Ubuntu или pip для Python.

Chart — пакет Helm. Содержит набор YAML-шаблонов с переменными и файл values.yaml со значениями по умолчанию. Одним helm install разворачивает всё приложение.

Release — установленный экземпляр Chart. Можно установить один Chart несколько раз с разными именами и значениями.

Chart (шаблон)  →  helm install  →  Release (запущенное приложение)

Установка Helm

# macOS
brew install helm

# Проверка
helm version
# version.BuildInfo{Version:"v3.14.0", ...}

helm install, upgrade, rollback, uninstall

Поиск и установка Chart

# Добавить репозиторий
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# Поиск chart
helm search repo postgresql
# NAME                    CHART VERSION  APP VERSION  DESCRIPTION
# bitnami/postgresql      13.2.0         16.1.0       PostgreSQL chart

# Информация о chart
helm show values bitnami/postgresql | head -50

# Установка
helm install my-postgres bitnami/postgresql \
  --namespace database \
  --create-namespace \
  --set auth.postgresPassword=mysecretpassword \
  --set primary.persistence.size=10Gi

# Список установленных releases
helm list -A
# NAME          NAMESPACE  REVISION  STATUS    CHART
# my-postgres   database   1         deployed  postgresql-13.2.0

Обновление

# Обновить values без смены версии chart
helm upgrade my-postgres bitnami/postgresql \
  --namespace database \
  --set auth.postgresPassword=newsecretpassword

# Обновить до новой версии chart
helm upgrade my-postgres bitnami/postgresql \
  --namespace database \
  --version 13.3.0

# Upgrade с откатом при ошибке
helm upgrade --install my-postgres bitnami/postgresql \
  --atomic \
  --timeout 5m

Откат и удаление

# История releases
helm history my-postgres -n database
# REVISION  STATUS     CHART               DESCRIPTION
# 1         superseded  postgresql-13.2.0   Install complete
# 2         deployed    postgresql-13.2.0   Upgrade complete

# Откат на предыдущую ревизию
helm rollback my-postgres -n database

# Откат на конкретную ревизию
helm rollback my-postgres 1 -n database

# Удаление (данные PVC сохраняются)
helm uninstall my-postgres -n database

values.yaml для параметризации

Главная сила Helm — параметризация через values.yaml. Один Chart, разные конфиги для разных окружений.

# values.yaml (значения по умолчанию)
replicaCount: 1
image:
  repository: my-app
  tag: "1.0.0"
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 80

ingress:
  enabled: false
  host: ""

resources:
  requests:
    cpu: 100m
    memory: 128Mi
  limits:
    cpu: 500m
    memory: 256Mi

env:
  LOG_LEVEL: info
  DATABASE_HOST: postgres-service
# values-prod.yaml (переопределения для production)
replicaCount: 3
image:
  tag: "1.5.2"

ingress:
  enabled: true
  host: api.example.com

resources:
  requests:
    cpu: 500m
    memory: 512Mi
  limits:
    cpu: 2000m
    memory: 1Gi

env:
  LOG_LEVEL: warning
# Установка с файлом values для prod
helm install my-app ./my-chart \
  -f values.yaml \
  -f values-prod.yaml

# Или через --set для точечных изменений
helm install my-app ./my-chart \
  -f values.yaml \
  --set image.tag=1.5.3

Популярные Charts

# nginx Ingress Controller
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx --create-namespace

# cert-manager (TLS-сертификаты)
helm repo add jetstack https://charts.jetstack.io
helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager --create-namespace \
  --set installCRDs=true

# Prometheus + Grafana (мониторинг)
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install kube-prometheus prometheus-community/kube-prometheus-stack \
  --namespace monitoring --create-namespace

Создание своего Chart

# Создать структуру chart
helm create my-app
my-app/
├── Chart.yaml          # метаданные chart
├── values.yaml         # значения по умолчанию
├── charts/             # зависимости (sub-charts)
└── templates/          # шаблоны YAML
    ├── deployment.yaml
    ├── service.yaml
    ├── ingress.yaml
    ├── _helpers.tpl    # вспомогательные шаблоны
    └── NOTES.txt       # сообщение после установки
# Chart.yaml
apiVersion: v2
name: my-app
description: A Helm chart for my application
type: application
version: 0.1.0       # версия chart
appVersion: "1.0.0"  # версия приложения
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "my-app.fullname" . }}
  labels:
    {{- include "my-app.labels" . | nindent 4 }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      {{- include "my-app.selectorLabels" . | nindent 6 }}
  template:
    metadata:
      labels:
        {{- include "my-app.selectorLabels" . | nindent 8 }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - containerPort: {{ .Values.service.port }}
          resources:
            {{- toYaml .Values.resources | nindent 12 }}
# Проверить шаблон перед установкой (dry-run)
helm template my-app ./my-app -f values-prod.yaml

# Установить с lint-проверкой
helm lint ./my-app
helm install my-app ./my-app --dry-run

# Реальная установка
helm install my-app ./my-app -f values-prod.yaml

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

Что такое ORM

ORM (Object-Relational Mapping) — технология, позволяющая работать с базой данных через объекты Python вместо SQL.

📅 30.06.2026 👁️ 131
📝

AI-агенты: ReAct loop и автономные действия

Чат-бот отвечает на вопросы. Агент — действует: вызывает инструменты, получает реальные данные и использует их...

📅 30.06.2026 👁️ 101
📝

Pydantic v2: валидация данных в Python

Pydantic — библиотека для валидации данных через аннотации типов. Версия 2 переписана на Rust и...

📅 30.06.2026 👁️ 85

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!