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
  • AI для кодаНовое
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

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

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

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

    Комментарии

    0

    Постройте личный план изучения Feature-Sliced Design до уровня Middle — бесплатно!

    Feature-Sliced Design — часть карты развития Frontend

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

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

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

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

    Angular

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

    Vue 3 и Pinia

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

    Nuxt

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

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

    Картинка поста Как AI меняет code review: инструменты и практики для команды
    Иконка аватараАнтон
    Иконка календаря18 апреля 2026
    aidevopstestingmiddleИконка уровня middle

    Как AI меняет code review: инструменты и практики для команды

    AI code review в 2026 году сокращает время проверки кода на 40-60%. Разбираем лучшие инструменты — CodeRabbit, PR-Agent, Claude Code Review — и пошаговый план внедрения в команде.

    Иконка чипа0
    Иконка глаза479
    Иконка комментариев0
    Картинка поста Деплой Node.js на VPS за 30 минут: пошаговое руководство
    Иконка аватараАнтон
    Иконка календаря21 мая 2026
    Node.jsVPSDevOps+ 3middleИконка уровня middle

    Деплой Node.js на VPS за 30 минут: пошаговое руководство

    Деплой Node.js на VPS за 30 минут: настройка сервера, PM2, Nginx и SSL. Пошаговая инструкция от подключения по SSH до запуска приложения в продакшене.

    Иконка чипа0
    Иконка глаза32
    Иконка комментариев0
    Картинка поста PostgreSQL для начинающих: создаём базу и пишем первые запросы
    Иконка аватараАнтон
    Иконка календаря20 мая 2026
    PostgreSQLSQLБазы данныхjuniorИконка уровня junior

    PostgreSQL для начинающих: создаём базу и пишем первые запросы

    PostgreSQL для начинающих: пошаговое руководство по созданию базы данных, таблиц и написанию первых SQL-запросов с примерами.

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