iac/apps/measurements/aero/kustomization.yaml
emelinda c750a08f8d Measurements пишет в общий бакет контура + перекат нагрузок в ansible
--- Бакет ---

В base у measurements имя бакета ЗАШИТО в самом vault-шаблоне:
  "buckets":["measurements"]
Из-за этого он складывал файлы в собственный бакет, тогда как
медиахранилище контура одно — sarex-media-storage: туда пишет django и
оттуда же раздаёт s3-proxy на маршруте /media/. Ссылка на файл
измерения, отданная через django, вела бы в пустоту.

Шаблон переопределён в apps/measurements/aero так, чтобы имя бакета
читалось из секрета — как уже читается endpoint. Значение задаётся в
одном месте, vault_app_secrets, и совпадает с sarex_django_s3_bucket.
Заменить пришлось аннотацию целиком: значение внутри шаблона, через
values его не перекрыть.

Из Job'а бакетов убран measurements. Это не удаление: Job умеет только
mc mb --ignore-existing, ранее созданный бакет остаётся на месте — мы
лишь перестаём его заводить.

Порядок применения безопасен: в platform.yml vault-k8s.yml идёт до
gitea-sync.yml, то есть секрет получит ключ bucket раньше, чем Flux
пересоздаст под. Иначе vault-agent-init не отрендерил бы шаблон с
несуществующим ключом и под ушёл бы в Init:Error.

--- Перекат нагрузок ---

Единственное действие, которое до сих пор делалось руками мимо роли, —
rollout restart после правки ConfigMap. Оно понадобилось дважды (порядок
set/rewrite в nginx и auth_type) и оба раза выглядело как «правка не
поехала»: Flux рапортует Applied revision, а поведение старое.

Причина в том, что у релизов universal-chart в шаблоне пода нет
контрольной суммы конфига: ConfigMap меняется, спецификация пода — нет,
Kubernetes не видит причин пересоздавать под. Декларативно это здесь не
лечится — имя ConfigMap передаётся чарту строкой, монтирует он его сам, а
configMapGenerator переименовал бы ресурс, не поправив ссылку внутри
чарта, который рендерится уже в кластере.

Добавлены tasks/reload.yml, список sarex_reload_workloads в defaults и
задача `uv run poe reload`. По умолчанию выключено: перезапуск подов
посреди обычного деплоя происходить сам не должен.
2026-08-09 11:58:06 +03:00

42 lines
2.7 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: measurements
resources:
- ../base
patches:
- target: {kind: HelmRelease, name: measurements}
patch: |
# Имя сервиса приводим к measurements-service, как в brusnika-*.
#
# В base сервис называется measurements-svc, а django ходит на
# MEASUREMENTS_HOST=http://measurements-service.measurements.svc.cluster.local:8000/api
# (apps/django/base/backend.yaml). Переименовать сервис дешевле, чем
# патчить переменную в двух релизах django (backend и celery), и заодно
# совпадает с тем, как это сделано в остальных кластерах.
- op: replace
path: /spec/values/services/backend/service/name/_default
value: measurements-service
# S3: бакет берём из секрета, а не из шаблона.
#
# В base имя бакета ЗАШИТО прямо в vault-шаблоне — "buckets":["measurements"].
# Из-за этого measurements складывал файлы в собственный бакет, тогда как
# медиахранилище контура одно и называется sarex-media-storage: туда пишет
# django (S3_BUCKET) и оттуда же раздаёт s3-proxy на маршруте /media/.
# Разные бакеты означали, что ссылка на файл измерения, отданная через
# django, вела бы в пустоту.
#
# Endpoint в base уже приезжает из секрета (.Data.data.client.endpoint) —
# достраиваем до той же схемы и бакет, чтобы имя задавалось в ОДНОМ месте
# (vault_app_secrets в aero/roles/sarex_stack/defaults/main.yml), а не
# дублировалось в манифесте. Заменить можно только аннотацию целиком:
# значение зашито внутри шаблона, через values его не перекрыть.
- op: replace
path: /spec/values/services/backend/podAnnotations/_default/vault.hashicorp.com~1agent-inject-template-measurements-s3
value: |-
{{- with secret "secrets/data/minio/apps/measurements" -}}
S3_JSON_SETTINGS='{"host":"{{ index .Data.data.client "endpoint" }}","login":"{{ index .Data.data "access_key" }}","password":"{{ index .Data.data "secret_key" }}","verify":false,"buckets":["{{ index .Data.data "bucket" }}"]}'
{{- end -}}