Развернуть с помощью Helm

Gramax Open Source Helm Chart

Helm-чарт для развёртывания Gramax DocPortal в Kubernetes.

Чарт поднимает:

  • Deployment с контейнером docker.io/gramax/docportal

  • Service для доступа к приложению

  • Secret для пароля администратора и токена auto-pull, если не используются внешние секреты

  • PersistentVolumeClaim для каталога /app/data, если включено persistence

  • Ingress, если он включён в values

  • HorizontalPodAutoscaler, если включён autoscaling

Что важно знать заранее

  • В чарте нет отдельного values.yaml, пример конфигурации лежит в .

  • По умолчанию приложение запускается на порту 80.

  • Данные приложения сохраняются в /app/data.

  • Для production лучше передавать пароль администратора и токен auto-pull через существующие Kubernetes secrets, а не хранить их открытым текстом в values-файле.

Быстрый старт

1. Добавить Helm-репозиторий

helm repo add gramax https://s3.ics-it.ru/public/docreader/helm/ helm repo update

Проверить, что Helm видит чарт:

helm search repo gramax/gramax-open-source-server-in-k8s --versions

2. Скачать чарт на компьютер

helm pull gramax/gramax-open-source-server-in-k8s --untar

После распаковки Helm создаст каталог с именем чарта. Перейдите в него:

cd gramax-open-source-server-in-k8s

Дальше команды предполагают, что вы находитесь в каталоге скачанного чарта.

3. Создать namespace

kubectl create namespace gramax

4. Создать secret с паролем администратора

Рекомендуемый вариант:

kubectl -n gramax create secret generic gramax-auth \ --from-literal=admin-password='StrongPasswordHere'

Если нужен AUTO_PULL_TOKEN, можно либо создать отдельный secret, либо добавить ключ в этот же:

kubectl -n gramax create secret generic gramax-auth \ --from-literal=admin-password='StrongPasswordHere' \ --from-literal=auto-pull-token='YourAutoPullToken'

5. Подготовить values-файл

Пример минимального production-профиля:

replicaCount: 1 image: repository: docker.io/gramax/docportal tag: latest pullPolicy: IfNotPresent service: type: ClusterIP port: 80 admin: login: admin existingSecret: gramax-auth existingSecretKeys: password: admin-password autoPull: existingSecret: gramax-auth existingSecretKeys: token: auto-pull-token interval: "" ingress: enabled: true className: nginx annotations: {} hosts: - host: gramax.example.com paths: - path: / pathType: Prefix tls: [] persistence: enabled: true size: 10Gi storageClass: "" accessModes: - ReadWriteOnce resources: requests: cpu: 100m memory: 256Mi limits: cpu: 500m memory: 512Mi

Например, сохраните его как values.prod.yaml.

6. Установить или обновить релиз

helm upgrade --install gramax . \ --namespace gramax \ --create-namespace \ -f values.prod.yaml

7. Проверить состояние

kubectl -n gramax get pods,svc,ingress,pvc helm -n gramax status gramax

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

Ниже перечислены параметры, которые обычно нужно трогать в первую очередь.

Параметр

По умолчанию

Что делает

replicaCount

1

Количество реплик Deployment, если HPA выключен.

image.repository

docker.io/gramax/docportal

Docker-образ приложения.

image.tag

latest

Тег образа. Для production лучше фиксировать конкретную версию.

image.pullPolicy

IfNotPresent

Политика скачивания образа.

service.type

ClusterIP

Тип Kubernetes Service: ClusterIP, NodePort, LoadBalancer.

service.port

80

Порт сервиса и контейнера.

admin.login

admin

Логин администратора, передаётся в ADMIN_LOGIN.

admin.password

password

Пароль администратора, если не используется внешний secret.

admin.existingSecret

""

Имя существующего secret с паролем администратора.

admin.existingSecretKeys.password

admin-password

Ключ внутри secret, из которого читается пароль администратора.

autoPull.token

""

Токен для AUTO_PULL_TOKEN, если не используется внешний secret.

autoPull.interval

""

Значение для AUTO_PULL_INTERVAL.

autoPull.existingSecret

""

Имя существующего secret с токеном auto-pull.

autoPull.existingSecretKeys.token

auto-pull-token

Ключ внутри secret с токеном auto-pull.

ingress.enabled

false

Включает создание Ingress.

ingress.className

""

Класс ingress-контроллера, например nginx.

ingress.hosts

gramax.local

Список hostname и путей, через которые будет доступно приложение.

ingress.tls

[]

TLS-секции для ingress.

persistence.enabled

true

Включает постоянное хранилище для /app/data.

persistence.size

1Gi

Размер PVC.

persistence.storageClass

""

StorageClass для PVC.

persistence.existingClaim

""

Использование уже существующего PVC вместо создания нового.

persistence.hostPath

""

Прямой hostPath; обычно подходит только для single-node или dev-стендов.

resources

{}

Requests и limits контейнера.

autoscaling.enabled

false

Включает HorizontalPodAutoscaler.

autoscaling.minReplicas

1

Минимум реплик для HPA.

autoscaling.maxReplicas

3

Максимум реплик для HPA.

autoscaling.targetCPUUtilizationPercentage

80

Целевая утилизация CPU для HPA.

env

[]

Дополнительные переменные окружения.

envFrom

[]

Подключение переменных окружения из ConfigMap/Secret целиком.

nodeSelector

{}

Привязка pod к нодам по labels.

tolerations

[]

Tolerations для запуска на tainted nodes.

affinity

{}

Affinity/anti-affinity правила.

Практические сценарии

Минимальная установка для теста

Можно обойтись вообще без ingress и с паролем в values-файле:

admin: login: admin password: ChangeMe ingress: enabled: false

Установка:

helm upgrade --install gramax . -n gramax --create-namespace -f values.test.yaml

Установка с существующим PVC

Если PVC уже создан заранее:

persistence: enabled: true existingClaim: gramax-data

Установка без постоянного хранилища

Подходит только для временных стендов:

persistence: enabled: false

В этом режиме данные приложения будут потеряны после пересоздания pod.

Рекомендации для production

  • Используйте admin.existingSecret вместо admin.password.

  • Фиксируйте image.tag, а не оставляйте latest.

  • Задавайте resources.requests и resources.limits.

  • Включайте ingress только после настройки DNS и, при необходимости, TLS.

  • Не используйте persistence.hostPath, если у вас не single-node кластер и не локальная разработка.

  • Если включаете autoscaling.enabled: true, помните, что replicaCount в этом случае не используется.

Полезные команды

Показать итоговый манифест:

helm template gramax . -f values.prod.yaml

Проверить чарт:

helm lint . -f values.prod.yaml

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

helm -n gramax get values gramax