PurpleSchool — курсы программирования онлайн
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развития
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • Карьерные пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
    • Backend разработчик Python
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • PurpleSchool — курсы программирования онлайн
    • Сообщество
    • PurpleПлюс
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    Helm-чарты для Kubernetes: пошаговый гайд по деплою

    Helm-чарты для Kubernetes: пошаговый гайд по деплою

    Аватар автора Helm-чарты для Kubernetes: пошаговый гайд по деплою

    Антон Ларичев

    Иконка календаря06 апреля 2026
    kubernetesdevopshelmmiddleИконка уровня middle
    Картинка поста Helm-чарты для Kubernetes: пошаговый гайд по деплою

    Введение

    Helm chart для Kubernetes — это стандартный способ упаковки и деплоя приложений в кластер. Вместо того чтобы вручную писать десятки YAML-манифестов для каждого окружения, вы описываете приложение один раз в виде чарта и разворачиваете его одной командой.

    Helm выступает пакетным менеджером для Kubernetes, как npm для Node.js или pip для Python. Он берет на себя шаблонизацию манифестов, управление зависимостями и версионирование релизов. В этой статье разберем создание Helm chart с нуля и пройдем весь путь от инициализации до деплоя приложения в Kubernetes.

    Структура Helm чарта и его компоненты

    Создание Helm chart начинается с команды, которая генерирует базовую структуру:

    # Создаем новый чарт для нашего приложения
    helm create myapp
    

    Команда создаст директорию со следующей структурой:

    myapp/
      Chart.yaml          # Метаданные чарта
      values.yaml         # Параметры по умолчанию
      templates/          # Шаблоны манифестов
        deployment.yaml
        service.yaml
        ingress.yaml
        _helpers.tpl      # Вспомогательные шаблоны
        NOTES.txt         # Сообщение после установки
      charts/             # Зависимости (субчарты)
    

    Файл Chart.yaml содержит метаданные чарта:

    apiVersion: v2
    name: myapp
    description: Helm chart для деплоя веб-приложения
    type: application
    version: 0.1.0        # Версия чарта
    appVersion: "1.0.0"   # Версия приложения
    

    Поле version обновляется при каждом изменении чарта, а appVersion отражает версию самого приложения. Это разделение позволяет обновлять конфигурацию деплоя независимо от кода приложения.

    Настройка values.yaml для параметризации деплоя

    Файл values.yaml — это центральное место для настройки параметров чарта. Все значения из этого файла доступны в шаблонах через объект .Values:

    # values.yaml — параметры по умолчанию
    replicaCount: 2
    
    image:
      repository: myregistry/myapp
      tag: "1.0.0"
      pullPolicy: IfNotPresent
    
    service:
      type: ClusterIP
      port: 80
      targetPort: 3000
    
    resources:
      limits:
        cpu: 500m
        memory: 256Mi
      requests:
        cpu: 100m
        memory: 128Mi
    
    env:
      NODE_ENV: production
      LOG_LEVEL: info
    
    ingress:
      enabled: true
      host: myapp.example.com
    

    Для разных окружений создаются отдельные файлы значений. Например, values-staging.yaml переопределяет только нужные параметры:

    # values-staging.yaml — переопределения для staging
    replicaCount: 1
    
    image:
      tag: "1.0.0-rc.1"
    
    env:
      NODE_ENV: staging
      LOG_LEVEL: debug
    
    ingress:
      host: staging.myapp.example.com
    

    Как создать шаблоны deployment и service

    Шаблоны в директории templates/ используют синтаксис Go templates. Файл deployment.yaml описывает основной ресурс:

    # templates/deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: {{ include "myapp.fullname" . }}
      labels:
        {{- include "myapp.labels" . | nindent 4 }}
    spec:
      replicas: {{ .Values.replicaCount }}
      selector:
        matchLabels:
          {{- include "myapp.selectorLabels" . | nindent 6 }}
      template:
        metadata:
          labels:
            {{- include "myapp.selectorLabels" . | nindent 8 }}
        spec:
          containers:
            - name: {{ .Chart.Name }}
              image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
              imagePullPolicy: {{ .Values.image.pullPolicy }}
              ports:
                - containerPort: {{ .Values.service.targetPort }}
              env:
                {{- range $key, $value := .Values.env }}
                - name: {{ $key }}
                  value: {{ $value | quote }}
                {{- end }}
              resources:
                {{- toYaml .Values.resources | nindent 12 }}
    

    Шаблон service связывает pod с сетью кластера:

    # templates/service.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: {{ include "myapp.fullname" . }}
    spec:
      type: {{ .Values.service.type }}
      ports:
        - port: {{ .Values.service.port }}
          targetPort: {{ .Values.service.targetPort }}
          protocol: TCP
      selector:
        {{- include "myapp.selectorLabels" . | nindent 4 }}
    

    Обратите внимание на функцию include — она подставляет именованные шаблоны из _helpers.tpl, что избавляет от дублирования меток и имен.

    Деплой приложения в Kubernetes с Helm

    Перед установкой полезно проверить, какие манифесты сгенерирует Helm:

    # Рендерим шаблоны без установки
    helm template myapp ./myapp --values values-staging.yaml
    

    Проверяем валидность чарта:

    # Валидация чарта
    helm lint ./myapp
    

    Устанавливаем приложение в кластер:

    # Первый деплой приложения
    helm install myapp ./myapp \
      --namespace myapp-ns \
      --create-namespace \
      --values values-staging.yaml
    

    Для обновления существующего релиза используйте helm upgrade:

    # Обновление релиза с новыми параметрами
    helm upgrade myapp ./myapp \
      --namespace myapp-ns \
      --values values-staging.yaml \
      --set image.tag="1.1.0"
    

    Флаг --set позволяет переопределить отдельные значения без изменения файлов. Это удобно для CI/CD пайплайнов, где тег образа подставляется динамически.

    Как откатить неудачный релиз

    Helm хранит историю релизов, что позволяет быстро выполнить rollback:

    # Просмотр истории релизов
    helm history myapp --namespace myapp-ns
    
    # Откат к предыдущей версии
    helm rollback myapp 1 --namespace myapp-ns
    

    Частые ошибки при работе с Helm

    Первая ошибка — хардкод значений в шаблонах вместо использования values.yaml. Это лишает чарт гибкости и вынуждает менять шаблоны для каждого окружения.

    Вторая проблема — отсутствие ресурсных лимитов. Без указания resources.limits и resources.requests планировщик Kubernetes не может корректно распределить pod по нодам кластера.

    Третья ошибка — игнорирование команды helm lint перед деплоем. Линтер находит синтаксические ошибки в шаблонах до того, как они попадут в кластер.

    Четвертая проблема — хранение секретов в values.yaml. Пароли и токены должны передаваться через Kubernetes Secrets или внешние системы управления секретами, а не храниться в репозитории.

    Заключение

    Helm chart для Kubernetes значительно упрощает деплой приложений, превращая набор YAML-манифестов в переиспользуемый пакет с параметризацией. Создание чарта с правильной структурой, гибким values.yaml и чистыми шаблонами позволяет разворачивать приложение в любом окружении одной командой helm install. Используйте helm lint и helm template для проверки перед деплоем, а helm rollback — для быстрого отката при проблемах.

    Иконка глаза7

    Комментарии

    0

    Постройте личный план изучения React state менеджер Zustand до уровня Middle — бесплатно!

    React state менеджер Zustand — часть карты развития Frontend

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    Vue 3 и Pinia

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    Next.js - с нуля

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.7
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    Feature-Sliced Design

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.5
    3 999 ₽ 6 990 ₽
    Подробнее

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

    Картинка поста GitHub Actions: CI/CD пайплайн для Node.js проекта
    Иконка аватараАнтон
    Иконка календаря05 апреля 2026
    github-actionsnode.jsdevopsmiddleИконка уровня middle

    GitHub Actions: CI/CD пайплайн для Node.js проекта

    Настраиваем CI/CD пайплайн в GitHub Actions для Node.js: автоматический линтинг с ESLint, запуск тестов Jest, кэширование зависимостей и деплой на сервер через SSH.

    Иконка чипа0
    Иконка глаза60
    Иконка комментариев0
    Картинка поста Docker Compose для разработки: собираем окружение с базой, кешем и очередью за 10 минут
    Иконка аватараАнтон
    Иконка календаря04 апреля 2026
    dockerdevopsmiddleИконка уровня middle

    Docker Compose для разработки: собираем окружение с базой, кешем и очередью за 10 минут

    Docker Compose для разработки позволяет за 10 минут собрать полное окружение с PostgreSQL, Redis и RabbitMQ. Разбираем настройку сервисов, volumes, health checks и переменные окружения.

    Иконка чипа0
    Иконка глаза101
    Иконка комментариев0
    Картинка поста Graceful shutdown, health checks и zero-downtime deploy: чек-лист для продакшна
    Иконка аватараАнтон
    Иконка календаря03 апреля 2026
    devopsnode.jsdockerseniorИконка уровня senior

    Graceful shutdown, health checks и zero-downtime deploy: чек-лист для продакшна

    Graceful shutdown в Node.js, настройка health checks для Docker и Kubernetes, и полный чек-лист zero-downtime deploy для продакшна без потери запросов.

    Иконка чипа0
    Иконка глаза93
    Иконка комментариев0
    Иконка чипа0