iac/apps/processing/aero/kustomization.yaml
emelinda c7c194feaa Processing в контуре aero: api и engine-low
Развёрнут частично, и это осознанно:
  * engine удалён — в base у него replicaCount 0, то есть он выключен и там,
    а образ прибит к тегу с опечаткой в имени (workflows-endigne_prod);
  * frontend удалён — адреса бэкендов зашиты в образ на этапе сборки через
    __BUILD_ENV__, и ни один готовый профиль не смотрит на домен контура.
    Подключать его имеет смысл только вместе с пересборкой образа.

Отключены смежные сервисы, которых в контуре нет: documentations (PDM,
filestream), resources, bim-api, workspace, issues, comparisons, mailgun,
SMTP. Оставлен только S3. Вместе с флагом ENABLE_SMTP убрана аннотация
инжекции secrets/vault/common/smtp_auth — секрета нет, и vault-agent-init
оставил бы под в Init:Error, не дойдя до флага.

S3 приезжает из Vault отдельным файлом: приложение читает по пути из
S3_SERVICE_ACCOUNT целый JSON, а не пару переменных. Набор ключей повторяет
engine/yc-s3-service-account.json из compose-стека, который так же смотрел
в MinIO.

Планирование подов задач: engine работает kubernetes-исполнителем и сам
создаёт Job'ы, подставляя им nodeSelector dedicated=processing. Выделенных
нод в контуре нет, поды висли бы в Pending — как это уже было у postgresql.
ENABLE_TOLERATION и DEFAULT_NODE_SELECTOR_* сняты.

Заодно у celery поправлены четыре адреса на wb.sarex.io — чужой контур,
недостижимый из aero. У backend те же переменные уже вели внутрь кластера;
при WORKFLOWS_USE=1 расхождение давало бы зависания вместо явной ошибки.

Патчи адресуются по индексу env, поэтому перед каждым replace стоит op: test
на имя переменной: смена порядка в base уронит сборку явно, а не перезапишет
соседнее значение.
2026-08-08 20:51:02 +03:00

206 lines
9.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: processing
resources:
- ../base
patches:
# --- Состав: только api и engine-low ---------------------------------------
# engine удалён: в base у него replicaCount 0, то есть он и там выключен, а
# образ прибит к тегу с опечаткой в имени (workflows-endigne_prod). Рабочий
# обработчик — engine-low, он же на более свежем образе contour_*.
- target: {kind: HelmRelease, name: engine}
patch: |
$patch: delete
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: engine
namespace: processing
# frontend удалён: адреса бэкендов зашиты в образ на этапе сборки через
# __BUILD_ENV__, и ни один из готовых профилей не смотрит на домен контура.
# Подключать его имеет смысл только вместе с пересборкой образа под aero.
- target: {kind: HelmRelease, name: frontend}
patch: |
$patch: delete
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: frontend
namespace: processing
# --- workflows-api ----------------------------------------------------------
- target: {kind: HelmRelease, name: workflows-api}
patch: |
# S3 приезжает из Vault отдельным ФАЙЛОМ, а не парой переменных:
# приложение читает по этому пути целый JSON. В base путь ведёт в
# /etc/sarex/yc-s3/, куда в контуре ничего не смонтировано.
- op: test
path: /spec/values/services/backend/envs/3/name
value: S3_SERVICE_ACCOUNT
- op: replace
path: /spec/values/services/backend/envs/3/value/_default
value: /vault/secrets/processing-s3
- op: add
path: /spec/values/services/backend/podAnnotations/_default/vault.hashicorp.com~1agent-inject-secret-processing-s3
value: secrets/data/minio/apps/processing
- op: add
path: /spec/values/services/backend/podAnnotations/_default/vault.hashicorp.com~1agent-inject-template-processing-s3
value: |-
{{- with secret "secrets/data/minio/apps/processing" -}}
{
"host": "{{ index .Data.data "host" }}",
"bucket": "{{ index .Data.data "bucket" }}",
"access_key_id": "{{ index .Data.data "access_key_id" }}",
"secret_access_key": "{{ index .Data.data "secret_access_key" }}",
"region": "{{ index .Data.data "region" }}",
"verify": false
}
{{- end -}}
# --- engine-low -------------------------------------------------------------
# Патчи адресуются по индексу, поэтому перед каждым replace идёт op: test на
# имя переменной. Если в base порядок envs изменится, сборка упадёт явно,
# вместо того чтобы молча перезаписать соседнее значение.
- target: {kind: HelmRelease, name: engine-low}
patch: |
# Sentry — внешний домен, из контура недостижим. Значение прокидывается
# ещё и в каждый под задачи, поэтому зануляем в одном месте.
- op: test
path: /spec/values/services/backend/envs/2/name
value: WORKFLOWS_SENTRY_DSN
- op: replace
path: /spec/values/services/backend/envs/2/value/_default
value: ""
# В base адрес django неверный даже для кластеров, где он есть: сервис
# называется backend-svc и слушает 80, а не backend:8000. У api то же
# значение уже правильное.
- op: test
path: /spec/values/services/backend/envs/5/name
value: DJANGO_HOST
- op: replace
path: /spec/values/services/backend/envs/5/value/_default
value: http://backend-svc.django.svc.cluster.local:80
# S3 — как у api выше.
- op: test
path: /spec/values/services/backend/envs/6/name
value: S3_SERVICE_ACCOUNT
- op: replace
path: /spec/values/services/backend/envs/6/value/_default
value: /vault/secrets/processing-s3
# SMTP выключаем целиком: почтового релея в контуре нет. Вместе с флагом
# убираем аннотацию инжекции secrets/vault/common/smtp_auth — секрета в
# Vault нет, а vault-agent-init на несуществующем секрете не отрендерит
# шаблон и оставит под в Init:Error, до флага дело не дойдёт.
- op: test
path: /spec/values/services/backend/envs/22/name
value: ENABLE_SMTP
- op: replace
path: /spec/values/services/backend/envs/22/value/_default
value: "0"
- op: remove
path: /spec/values/services/backend/podAnnotations/_default/vault.hashicorp.com~1agent-inject-secret-processing-smtp
- op: remove
path: /spec/values/services/backend/podAnnotations/_default/vault.hashicorp.com~1agent-inject-template-processing-smtp
# Смежные сервисы, которых в контуре нет: documentations (PDM,
# filestream), resources, bim-api, workspace, issues, comparisons,
# mailgun. Оставляем только S3 — единственное внешнее хранилище, которое
# в aero действительно есть.
- op: test
path: /spec/values/services/backend/envs/21/name
value: ENABLE_PDM_STORAGE
- op: replace
path: /spec/values/services/backend/envs/21/value/_default
value: "0"
- op: test
path: /spec/values/services/backend/envs/25/name
value: ENABLE_BIM_API_V2_DB
- op: replace
path: /spec/values/services/backend/envs/25/value/_default
value: "0"
- op: test
path: /spec/values/services/backend/envs/26/name
value: ENABLE_WORKSPACE_API_DB
- op: replace
path: /spec/values/services/backend/envs/26/value/_default
value: "0"
- op: test
path: /spec/values/services/backend/envs/27/name
value: ENABLE_ISSUE_API_DB
- op: replace
path: /spec/values/services/backend/envs/27/value/_default
value: "0"
- op: test
path: /spec/values/services/backend/envs/28/name
value: ENABLE_RESOURCES_API
- op: replace
path: /spec/values/services/backend/envs/28/value/_default
value: "0"
- op: test
path: /spec/values/services/backend/envs/30/name
value: ENABLE_PDM_API_DB
- op: replace
path: /spec/values/services/backend/envs/30/value/_default
value: "0"
- op: test
path: /spec/values/services/backend/envs/31/name
value: ENABLE_COMPARISONS_API_DB
- op: replace
path: /spec/values/services/backend/envs/31/value/_default
value: "0"
- op: test
path: /spec/values/services/backend/envs/32/name
value: ENABLE_MAIL_GUN
- op: replace
path: /spec/values/services/backend/envs/32/value/_default
value: "0"
# Планирование подов задач. engine работает kubernetes-исполнителем и сам
# создаёт Job'ы, подставляя им nodeSelector dedicated=processing и
# соответствующий toleration. Выделенных нод в контуре нет — все три
# равнозначны, — поэтому поды задач висли бы в Pending с
# didn't match Pod's node affinity/selector
# ровно как это было у postgresql (см. postRenderers в его релизе).
- op: test
path: /spec/values/services/backend/envs/66/name
value: ENABLE_TOLERATION
- op: replace
path: /spec/values/services/backend/envs/66/value/_default
value: "0"
- op: test
path: /spec/values/services/backend/envs/69/name
value: DEFAULT_NODE_SELECTOR_KEY
- op: replace
path: /spec/values/services/backend/envs/69/value/_default
value: ""
- op: test
path: /spec/values/services/backend/envs/70/name
value: DEFAULT_NODE_SELECTOR_VALUE
- op: replace
path: /spec/values/services/backend/envs/70/value/_default
value: ""
# S3 из Vault, как у api.
- op: add
path: /spec/values/services/backend/podAnnotations/_default/vault.hashicorp.com~1agent-inject-secret-processing-s3
value: secrets/data/minio/apps/processing
- op: add
path: /spec/values/services/backend/podAnnotations/_default/vault.hashicorp.com~1agent-inject-template-processing-s3
value: |-
{{- with secret "secrets/data/minio/apps/processing" -}}
{
"host": "{{ index .Data.data "host" }}",
"bucket": "{{ index .Data.data "bucket" }}",
"access_key_id": "{{ index .Data.data "access_key_id" }}",
"secret_access_key": "{{ index .Data.data "secret_access_key" }}",
"region": "{{ index .Data.data "region" }}",
"verify": false
}
{{- end -}}