Helm-чарт для генерации манифестов, который подходит для различных типов приложений.
Find a file
creativdex 1c2748add5
All checks were successful
Publish Helm Chart to Forgejo / publish (push) Successful in 19s
chore: replace manual Helm download with azure/setup-helm action in publish workflow for improved efficiency
2026-02-17 02:04:03 +07:00
.forgejo/workflows chore: replace manual Helm download with azure/setup-helm action in publish workflow for improved efficiency 2026-02-17 02:04:03 +07:00
templates chore: bump version to 1.0.1 and add persistence configuration options in values.yaml and deployment.yaml 2026-02-17 00:50:45 +07:00
.gitignore Init: начальная структура Helm чарта и конфигурация CI/CD 2025-12-20 19:16:48 +07:00
Chart.lock Init: начальная структура Helm чарта и конфигурация CI/CD 2025-12-20 19:16:48 +07:00
Chart.yaml chore: bump version to 1.0.1 and add persistence configuration options in values.yaml and deployment.yaml 2026-02-17 00:50:45 +07:00
README.md Init: начальная структура Helm чарта и конфигурация CI/CD 2025-12-20 19:16:48 +07:00
values.yaml chore: bump version to 1.0.1 and add persistence configuration options in values.yaml and deployment.yaml 2026-02-17 00:50:45 +07:00

Standard Helm Chart

Стандартный универсальный Helm чарт для развертывания приложений в Kubernetes с поддержкой PostgreSQL и расширенной настройкой переменных окружения.

Описание

Этот чарт предназначен для развертывания приложений с расширенной функциональностью:

  • Развертывание приложения с настраиваемым количеством реплик
  • Поддержка Service для доступа к приложению
  • Настройка Ingress для внешнего доступа с поддержкой TLS через cert-manager
  • Интеграция с PostgreSQL через зависимость (опционально)
  • Подключение существующих ConfigMaps и Secrets через envFrom
  • Поддержка предустановочных задач через scriptJob (migrations, init scripts)
  • Настройка ресурсов (CPU, память) для контейнеров
  • Поддержка приватных Docker registry через imagePullSecrets

Установка

# Базовая установка
helm install my-app .

# Установка с кастомными значениями
helm install my-app . -f values.yaml

# Установка с переопределением значений через командную строку
helm install my-app . \
  --set image.repository=my-app \
  --set image.tag=latest \
  --set service.port=8080

Конфигурация

Основные параметры

Параметр Описание Значение по умолчанию
replicaCount Количество реплик приложения 1
image.repository Docker образ приложения "" (заполняется CI)
image.tag Тег Docker образа "" (заполняется CI)
image.pullPolicy Политика загрузки образа IfNotPresent
container.port Порт контейнера 9000

Service

Параметр Описание Значение по умолчанию
service.type Тип сервиса ClusterIP
service.port Порт сервиса 9000

Ingress

Параметр Описание Значение по умолчанию
ingress.enabled Включить Ingress false
ingress.className Ingress Controller класс nginx
ingress.host Хост для Ingress ""
ingress.proxyBodySize Максимальный размер тела запроса 20m
ingress.tls.enabled Включить TLS false
ingress.tls.clusterIssuer ClusterIssuer для cert-manager letsencrypt-prod
ingress.tls.secretName Имя Secret для TLS "" (автогенерируется)

Переменные окружения (envFrom)

Параметр Описание Значение по умолчанию
includeVariables.enabled Включить подключение существующих ConfigMaps и Secrets false
includeVariables.secrets Список существующих Secrets для подключения через envFrom []
includeVariables.configMaps Список существующих ConfigMaps для подключения через envFrom []

Примечание: Чарт подключает существующие ConfigMaps и Secrets через envFrom. Убедитесь, что эти ресурсы созданы в кластере перед установкой чарта.

Script Job

Параметр Описание Значение по умолчанию
scriptJob.enabled Включить предустановочный Job false
scriptJob.command Команда для выполнения ["/bin/sh", "-c", "echo 'Script job completed'"]
scriptJob.resources Ресурсы для Job См. values.yaml
scriptJob.backoffLimit Максимальное количество повторных попыток 3
scriptJob.activeDeadlineSeconds Максимальное время выполнения (сек) 600

PostgreSQL

Параметр Описание Значение по умолчанию
postgres.enabled Включить PostgreSQL (как зависимость) false
postgres.auth.username Имя пользователя БД app
postgres.auth.password Пароль пользователя app
postgres.auth.database Имя базы данных app
postgres.primary.persistence.enabled Включить постоянное хранилище true
postgres.primary.persistence.size Размер хранилища 8Gi

Дополнительные параметры

Параметр Описание Значение по умолчанию
registry.pullSecretName Имя Secret для доступа к registry gitlab-registry-ro
resources Ограничения ресурсов для контейнера (requests/limits для CPU и памяти) {}

Примеры использования

Простое веб-приложение

# values.yaml
replicaCount: 2

image:
  repository: registry.example.com/myapp
  tag: "v1.0.0"
  pullPolicy: IfNotPresent

container:
  port: 8080

service:
  type: ClusterIP
  port: 8080

ingress:
  enabled: true
  className: nginx
  host: myapp.example.com
  proxyBodySize: "20m"
  tls:
    enabled: true
    clusterIssuer: letsencrypt-prod

# Опционально: настройка ресурсов
resources:
  requests:
    memory: "128Mi"
    cpu: "100m"
  limits:
    memory: "256Mi"
    cpu: "200m"

Приложение с PostgreSQL и переменными окружения

# values.yaml
replicaCount: 2

image:
  repository: registry.example.com/myapp
  tag: "v1.0.0"

container:
  port: 9000

service:
  port: 9000

# Подключение существующих ConfigMaps и Secrets
includeVariables:
  enabled: true
  secrets:
    - app-secrets
    - postgres-credentials
  configMaps:
    - app-config

# Настройка ресурсов
resources:
  requests:
    memory: "256Mi"
    cpu: "200m"
  limits:
    memory: "512Mi"
    cpu: "500m"

postgres:
  enabled: true
  auth:
    username: app
    password: "secure-password"
    database: myappdb
  primary:
    persistence:
      enabled: true
      size: 10Gi

scriptJob:
  enabled: true
  command:
    - "/bin/sh"
    - "-c"
    - "python manage.py migrate"
  resources:
    requests:
      memory: "256Mi"
      cpu: "200m"
    limits:
      memory: "512Mi"
      cpu: "500m"

Создание ConfigMap и Secret перед установкой:

# Создание ConfigMap
kubectl create configmap app-config \
  --from-literal=NODE_ENV=production \
  --from-literal=API_URL=https://api.example.com \
  --from-literal=LOG_LEVEL=info

# Создание Secret
kubectl create secret generic app-secrets \
  --from-literal=DATABASE_URL=postgresql://app:password@postgres-service:5432/myappdb \
  --from-literal=JWT_SECRET=your-secret-key-here

С подключением существующих Secrets и ConfigMaps

# values.yaml
image:
  repository: registry.example.com/myapp
  tag: "v1.0.0"

# Подключение существующих ресурсов через envFrom
includeVariables:
  enabled: true
  secrets:
    - shared-secrets
    - postgres-credentials
  configMaps:
    - shared-config
    - app-config

# Настройка ресурсов для контейнера
resources:
  requests:
    memory: "256Mi"
    cpu: "200m"
  limits:
    memory: "512Mi"
    cpu: "500m"

Установка с подключением существующих ресурсов

# Сначала создайте ConfigMap и Secret в кластере
kubectl create configmap app-config \
  --from-literal=NODE_ENV=production \
  --from-literal=API_URL=https://api.example.com

kubectl create secret generic app-secrets \
  --from-literal=DATABASE_URL=postgresql://... \
  --from-literal=JWT_SECRET=secret-value

# Установка с подключением существующих ресурсов
helm install my-app . \
  --set image.repository=registry.example.com/myapp \
  --set image.tag=v1.0.0 \
  --set includeVariables.enabled=true \
  --set includeVariables.secrets[0]=app-secrets \
  --set includeVariables.configMaps[0]=app-config \
  --set ingress.enabled=true \
  --set ingress.host=myapp.example.com \
  --set ingress.tls.enabled=true

Управление релизом

# Проверка статуса
helm status my-app

# Просмотр истории релизов
helm history my-app

# Обновление релиза
helm upgrade my-app . -f values.yaml

# Откат к предыдущей версии
helm rollback my-app 1

# Удаление релиза
helm uninstall my-app

Отладка

# Рендер шаблонов без установки
helm template my-app . -f values.yaml

# Проверка корректности чарта
helm lint .

# Dry-run установки
helm install my-app . --dry-run --debug

Особенности

ScriptJob для миграций и предустановочных задач

ScriptJob выполняется перед установкой/обновлением через Helm hooks и предназначен для:

  • Выполнения миграций базы данных
  • Инициализационных скриптов
  • Предварительной настройки приложения

Job автоматически удаляется после успешного выполнения благодаря hook-delete-policy.

Поддержка приватных Docker registry

Чарт автоматически добавляет imagePullSecrets для доступа к приватным реестрам Docker (например, GitLab Registry). По умолчанию используется gitlab-registry-ro. ImagePullSecrets также применяются к scriptJob для доступа к образам из приватных реестров.

Настройка ресурсов

Чарт поддерживает настройку ограничений ресурсов (CPU и память) для основного контейнера приложения через параметр resources. Это позволяет контролировать использование ресурсов и обеспечивать стабильную работу приложения в кластере.

Требования

  • Kubernetes 1.19+
  • Helm 3.0+
  • При использовании Ingress: установленный Ingress Controller (nginx)
  • При использовании TLS: установленный cert-manager с настроенным ClusterIssuer
  • При использовании PostgreSQL: зависимость postgresql устанавливается автоматически при postgres.enabled=true
  • Доступ к приватному Docker registry (если используется): создан Secret для imagePullSecrets
  • При использовании includeVariables: ConfigMaps и Secrets должны быть созданы в кластере перед установкой чарта

Поддержка

Для вопросов и предложений создавайте issues в репозитории.