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 — для быстрого отката при проблемах.

    Иконка глаза1 468

    Комментарии

    0

    Постройте личный план изучения HTML и CSS - полный курс по вёрстке с нуля до уровня Middle — бесплатно!

    HTML и CSS - полный курс по вёрстке с нуля — часть карты развития Frontend, Mobile

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

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

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

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

    CSS Flexbox

    Антон Ларичев
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    бесплатно
    Подробнее
    изображение курса

    Основы JavaScript

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

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

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

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

    Картинка поста Git флоу для команды разработчиков: гайд по веткам и релизам
    Иконка аватараАнтон
    Иконка календаря30 сентября 2026
    gitgit-flowкомандная работа+ 2middleИконка уровня middle

    Git флоу для команды разработчиков: гайд по веткам и релизам

    Git флоу для команды разработчиков: разбираем Git Flow, GitHub Flow и trunk-based development — как выбрать модель веток и избежать конфликтов при совместной работе.

    Иконка чипа0
    Иконка глаза168
    Иконка комментариев0
    Иконка аватараАнтон
    Иконка календаря01 октября 2026
    AI-инструментыDevOpsразработка+ 2middleИконка уровня middle

    Gemini CLI в России: как установить и настроить

    Установить Gemini CLI из России можно без VPN и без ухищрений — это обычный npm-пакет, он скачивается и запускается на любой машине. Упирается всё на следующем шаге: 18 июня 2026 года Google перестал обслуживать запросы Gemini CLI для бесплатных аккаунтов и подписчиков Google AI Pro и Ultra, а единственный оставшийся путь — вход по API-ключу — требует биллинга в регионе, где Россия не числится. Ниже разбираем, как агент ставится, как устроены три способа входа, почему ни один из них не доводи...

    Иконка чипа0
    Иконка глаза234
    Иконка комментариев0
    Иконка аватараАнтон
    Иконка календаря29 сентября 2026
    AI-инструментыClaude CodeDevOps+ 2middleИконка уровня middle

    Бесплатный аналог Cursor и Claude Code в России

    Короткий ответ: бесплатных аналогов много, и почти все они ставятся в России без ухищрений — Cline, Kilo Code, OpenCode, Qwen Code, Codex CLI распространяются с открытым исходным кодом, и за сам инструмент никто денег не берёт. Проблема в другом: своей модели у них нет. Платите вы не за агента, а за модель, к которой он ходит, и блокируется из России именно доступ к модели. Поэтому вопрос «чем заменить Cursor и Claude Code» почти всегда оказывается другим вопросом — где взять доступ к сильной модели без зарубежной карты. Ниже разберём, что из бесплатного реально работает, где оно упирается в потолок, и во сколько обходится не искать замену вообще. {{IMAGE_1}} alt: Схема: бесплатные клиенты-агенты Cline, Kilo Code, OpenCode, Qwen Code и платный доступ к модели за ними prompt: Flat vector diagram on dark background, two clearly separated zones. Left zone labeled "free" contains five small rounded cards representing code editor agents with terminal and sidebar icons. Right zone labeled "paid" contains a single large cloud icon representing an AI model, with a lock badge. Arrows go from all five cards to the single cloud. Purple and violet accent colors, thin white lines, no text labels, clean minimal tech illustration, 16:9

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