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