Index
Эта директория содержит Helm-чарты для деплоя сервисов платформы AIOps через helmfile.
Вся общая логика вынесена в библиотечный чарт charts/base-service (единый стандарт деплоя для микросервисов).
Как устроена конфигурация
Каждый релиз собирается из слоёв (в порядке приоритета — последний переопределяет первый):
1) Helmfile defaults (helmfile.yaml)
- namespace: <env>-<release>
- createNamespace: true, wait: true, timeout: 600
2) Environment values (envs/<env>.yaml)
Глобальные константы окружения: global.domain, namespaces инфраструктуры, флаги мониторинга.
3) Service base values (services/<service>/values.yaml)
Настройки конкретного сервиса, общие для всех окружений.
4) Service environment values (services/<service>/values-<env>.yaml)
Переопределения для конкретного окружения (реплики, ресурсы).
Base-service: контракт
base-service — library chart, который генерирует типовые ресурсы (Deployment/Service/HPA/PDB/NetworkPolicy/ServiceMonitor/PrometheusRule/RBAC/Ingress).
Компоненты
Один релиз может иметь несколько компонентов (например: api, worker):
- Имя ресурсов:
api→<release>(основной компонент)-
другие →
<release>-<component> -
Порты и видимость: По умолчанию все порты компонента публикуются в Service. Чтобы скрыть служебный порт (например,
admin) от внутреннего трафика кластера, используйтеexposeViaService: false.
1 2 3 4 5 | |
Компонент без ports не получает Service/Ingress и по умолчанию изолирован.
Надежность и жизненный цикл (Reliability)
base-service предоставляет инструменты для обеспечения High Availability и плавного деплоя:
- Graceful Shutdown: Используйте
lifecycle.preStopиterminationGracePeriodSecondsдля корректного завершения соединений (draining). - Topology Spread: Чтобы реплики не оказывались на одной ноде, используйте
topologySpreadConstraints.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
ConfigMaps
Вы можете генерировать ConfigMaps прямо из values.yaml релиза. Все значения поддерживают Helm-шаблонизацию через tpl.
1 2 3 4 5 6 | |
Vault (bank-vaults)
Секреты подхватываются автоматически из Vault:
secret/aiops/services/<env>/<release>/<component>
1 2 3 4 | |
Monitoring (Prometheus Operator)
ServiceMonitorсоздаётся автоматически для каждого компонента с портомmetricsPort(по умолчаниюmetrics).- Metrics Service (Option A): Если порт метрик не должен быть в основном Service, включите
metricsService. Это создаст отдельный<release>-metricsсервис. - Job Label: Метка
jobв Prometheus будет иметь вид{{ .Release.Name }}-{{ .Component }}.
1 2 3 4 5 6 7 8 | |
Logging (fluent-bit)
Глобально включается через envs/<env>.yaml:
1 2 3 | |
Можно переопределять на уровне компонента:
1 2 3 4 5 | |
NetworkPolicy (Zero Trust)
Если networkPolicy.enabled: true, генерируется изолирующая политика:
- Ingress: разрешен только от
ingress-nginx(на порты сexposeViaIngress: trueилиhttp/https). - Monitoring: разрешен только для Prometheus на
metricsPort. - Egress:
- DNS (kube-system)
- Vault
- Kube API: включите
allowKubeAPI: true. Список разрешенных IP берется изglobal.kubeAPICIDRs. - Custom Rules: правила
toNamespaces,toPods,toCIDRs.
1 2 3 4 5 6 7 8 9 | |
RBAC
RBAC включается флагом rbac.enabled. Поддерживается два режима:
1. Role (по умолчанию) — права внутри namespace.
2. ClusterRole (clusterWide: true) — права на уровне кластера (нужно для доступа к nodes, namespaces).
1 2 3 4 5 6 7 8 9 10 11 | |
IDE Support
В charts/base-service есть файл values.schema.json. Он обеспечивает:
* Автодополнение полей в VS Code/Cursor.
* Валидацию типов (boolean, integer, enum).
* Подсказки по обязательным полям.
Релизы (helmfile)
Список релизов определён в helmfile.yaml. Для каждого окружения используется:
services/<svc>/values.yamlservices/<svc>/values-<env>.yamlenvs/<env>.yaml
Запуск:
1 2 3 | |
Troubleshooting
NetworkPolicy Issues
Если сервис не может достучаться до базы или другого сервиса при включенном networkPolicy.enabled: true:
1. Проверьте логи пода на наличие ошибок таймаута.
2. Проверьте NetworkPolicy в namespace сервиса: kubectl get netpol -n <namespace>.
3. Убедитесь, что egress правила явно разрешают доступ к целевому namespace и порту.
4. Помните, что defaultEgressDeny: true блокирует все, что не разрешено явно (включая доступ в интернет).
Vault Injection Failures
Если секреты не прокидываются в переменные окружения:
1. Проверьте аннотации пода: kubectl describe pod <pod-name>.
2. Убедитесь, что vault.role соответствует роли, созданной в Vault для этого сервиса.
3. Проверьте путь в Vault: по умолчанию используется secret/aiops/services/<env>/<release>/<component>.
4. Проверьте логи vault-agent (если используется sidecar) или системные события.
HPA / VPA Conflicts
Библиотечный чарт запрещает одновременное включение HPA и VPA для одного компонента. Если вы видите ошибку fail при рендеринге — выберите один механизм масштабирования.
Rollback Strategy
Для отката изменений используйте стандартные команды Helm через helmfile:
1 2 3 4 5 | |
Рекомендуется всегда делать helmfile apply с флагом --interactive или сначала запускать helmfile diff для проверки планируемых изменений.