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

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

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развитияВопросы для собеседований
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • PurpleSchool — курсы программирования онлайн
    • AI для кодаНовое
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • 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 — для быстрого отката при проблемах.

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

    Комментарии

    0

    Постройте личный план изучения JavaScript с нуля - основы языка и практика для начинающих до уровня Middle — бесплатно!

    JavaScript с нуля - основы языка и практика для начинающих — часть карты развития Frontend, Backend, Mobile

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

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

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

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

    Продвинутый JavaScript

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

    TypeScript с нуля

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

    Neovim

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

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

    Картинка поста Kubernetes простыми словами: первые шаги для разработчика
    Иконка аватараАнтон
    Иконка календаря04 июля 2026
    kubernetesdevopsdocker+ 3juniorИконка уровня junior

    Kubernetes простыми словами: первые шаги для разработчика

    Kubernetes — система оркестрации контейнеров, которая автоматизирует деплой и масштабирование приложений. Разбираем ключевые концепции на практических примерах.

    Иконка чипа0
    Иконка глаза46
    Иконка комментариев0
    Картинка поста Nginx как reverse proxy для Node.js: настройка за 30 минут
    Иконка аватараАнтон
    Иконка календаря17 июня 2026
    nginxnodejsdevops+ 2middleИконка уровня middle

    Nginx как reverse proxy для Node.js: настройка за 30 минут

    Nginx как reverse proxy для Node.js: пошаговая настройка, SSL, балансировка нагрузки, кэширование статики и WebSocket за 30 минут.

    Иконка чипа0
    Иконка глаза710
    Иконка комментариев0
    Картинка поста Индексы в PostgreSQL: типы, применение и подводные камни
    Иконка аватараАнтон
    Иконка календаря05 июля 2026
    PostgreSQLбазы данныхиндексы+ 3middleИконка уровня middle

    Индексы в PostgreSQL: типы, применение и подводные камни

    Разбираем все типы индексов PostgreSQL: B-Tree, Hash, GIN, GiST, BRIN. Когда и какой индекс выбрать, чтобы ускорить запросы и не замедлить запись.

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