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.
73 lines
3.9 KiB
YAML
73 lines
3.9 KiB
YAML
---
|
||
# Заведение бакетов. Чарт 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
|