--- Бакет --- В 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`. По умолчанию выключено: перезапуск подов посреди обычного деплоя происходить сам не должен.
42 lines
2.7 KiB
YAML
42 lines
2.7 KiB
YAML
---
|
||
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 -}}
|