iac/infrastructure/minio/aero/buckets-job.yaml
emelinda 51b9120797 Measurements в контуре aero + декларативное заведение бакетов
Django обращается к сервису измерений при MEASUREMENTS_USE_MEASUREMENTS=1
(значение по умолчанию в base), так что без него часть API отвечала ошибкой.

Сервис переименован в measurements-service, как в brusnika-*. В base он
называется measurements-svc, а django ходит на measurements-service —
переименовать сервис дешевле, чем патчить переменную в двух релизах django.

Бакеты теперь заводит Job в infrastructure/minio/aero, а не команда руками.
Чарт MinIO этого не умеет: форк не принимает ни buckets, ни provisioning.
Так бакет django был создан императивно и не пережил бы пересоздание
контура — развернув всё с нуля, получили бы работающий MinIO и приложения,
падающие на отсутствующем бакете. Measurements сломался бы на этом сразу:
имя бакета зашито в его vault-шаблоне. Идемпотентность даёт
mc mb --ignore-existing.

Сайдкар istio у Job отключён: контейнер задачи выходит, envoy продолжает
работать, и под навсегда остаётся Running.
2026-08-08 20:41:23 +03:00

73 lines
3.9 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.

---
# Заведение бакетов. Чарт MinIO этого не умеет — форк не принимает ни buckets,
# ни provisioning, — а приложения ждут бакеты готовыми: django падает на
# загрузке файлов, measurements — на старте, потому что имя бакета зашито в
# его vault-шаблоне.
#
# До этого Job'а бакеты заводились руками через mc. Такой бакет не переживает
# пересоздание контура и не виден в репозитории: развернув всё с нуля, ты
# получишь работающий MinIO и приложения, падающие на отсутствующем бакете.
#
# Идемпотентность даёт mc mb --ignore-existing: Job гоняется при каждом
# применении релиза (ttl удаляет завершившийся), повторный запуск на готовых
# бакетах отрабатывает вхолостую и завершается нулём.
apiVersion: batch/v1
kind: Job
metadata:
name: minio-buckets
namespace: minio
annotations:
# Пересоздавать Job при каждой синхронизации: спецификация Job неизменяема,
# и без пересоздания kustomize не смог бы применить правку списка бакетов.
kustomize.toolkit.fluxcd.io/force: "true"
spec:
# Job живёт час после завершения и удаляется. Не 0: если он упадёт, логи
# должны остаться доступными для разбора.
ttlSecondsAfterFinished: 3600
backoffLimit: 6
template:
metadata:
annotations:
# Sidecar istio не даёт Job завершиться: контейнер задачи выходит, а
# envoy продолжает работать, и под навсегда остаётся Running.
sidecar.istio.io/inject: "false"
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/agent-init-first: "true"
vault.hashicorp.com/agent-pre-populate-only: "true"
vault.hashicorp.com/auth-path: auth/kubernetes
vault.hashicorp.com/role: minio
vault.hashicorp.com/agent-inject-secret-admin: secrets/data/minio/admin
vault.hashicorp.com/agent-inject-template-admin: |-
{{- with secret "secrets/data/minio/admin" -}}
MINIO_ROOT_USER={{ index .Data.data "rootUser" }}
MINIO_ROOT_PASSWORD={{ index .Data.data "rootPassword" }}
{{- end -}}
spec:
restartPolicy: OnFailure
serviceAccountName: minio-sa
imagePullSecrets:
- name: regcred
containers:
- name: mc
# Тот же образ, которым бакеты заводил compose-стек (SAREX_MC_IMAGE
# в docker-compose.yaml). Тег фиксированный: latest в приватном
# реестре не публикуется.
image: cr.yandex/crp3ccidau046kdj8g9q/mc:250724
command: ["/bin/sh", "-ec"]
args:
- |
. /vault/secrets/admin
# Ждём готовности API: Job стартует вместе с релизом и обгоняет
# готовность самого MinIO.
until mc alias set contour http://minio.minio.svc.cluster.local:9000 \
"$MINIO_ROOT_USER" "$MINIO_ROOT_PASSWORD" >/dev/null 2>&1; do
echo "жду MinIO..."
sleep 5
done
for b in sarex-media-storage measurements; do
mc mb --ignore-existing "contour/$b"
echo "бакет $b готов"
done