Index
Этот модуль поднимает MinIO Operator и HA S3-совместимый кластер s3-public в Kubernetes.
Текущая конфигурация
- Operator namespace:
tech-minio-operator - Tenants namespace:
tech-minio-tenants - Storage: Longhorn (
longhorn-minioStorageClass, 1 реплика) - Placement:
- Operator — на master нодах
- MinIO tenant (data-поды) — на любых нодах (masters + workers), с podAntiAffinity по
kubernetes.io/hostname - Console: отключена (MinIO перестал публиковать образы консоли в публичный реестр)
Быстрый старт
- Подготовка нод
1 | |
- Установка MinIO Operator
1 2 | |
- Создание секрета с root-креденшалами для
s3-public
Tenant использует существующий Secret с ключом config.env (формат v5.0.15+).
Вариант A: через Makefile (интерактивно)
1 | |
Вариант B: вручную через kubectl
1 2 3 | |
Или через YAML манифест:
1 2 3 4 5 6 7 8 9 10 | |
Важно:
- Secret должен быть в namespace tech-minio-tenants
- Имя Secret должно совпадать с spec.configuration.name в Tenant (по умолчанию s3-public-env-configuration)
- Секрет должен содержать ключ config.env с export statements для MINIO_ROOT_USER и MINIO_ROOT_PASSWORD
- Создание HA-кластера
s3-public
1 | |
- Проверка статуса
1 | |
- Включение метрик Prometheus (рекомендуется)
После создания tenant примените ServiceMonitor для сбора метрик:
1 | |
Или вручную (из директории infra/k8s/):
1 | |
Метрики MinIO автоматически собираются через ServiceMonitor после применения.
ServiceMonitor находится в infra/k8s/monitoring/manifests/monitors/minio-servicemonitor.yaml и автоматически подхватывается Prometheus благодаря label prometheus: monitoring.
Метрики доступны по пути:
- /minio/metrics/v3 - метрики v3 (используется в ServiceMonitor, рекомендуется для новых установок)
- /minio/v2/metrics/cluster - метрики кластера (legacy, не используется)
Настройка аутентификации для метрик:
MinIO v3 метрики требуют bearer token для доступа. ServiceMonitor уже настроен на использование токена из Secret minio-prometheus-token.
- Сгенерируйте bearer token через
mc:
Вариант A: Из консоли пода MinIO (если вы подключились к поду)
Если вы подключились к поду MinIO (например, kubectl exec -it s3-public-pool-0-0 -n tech-minio-tenants -- sh):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
Команда выведет bearer token, который нужно скопировать.
Альтернатива: Если mc недоступен, можно использовать curl:
1 2 3 4 5 6 7 8 9 10 11 | |
Ответ будет содержать bearer token в формате JSON.
Вариант B: С локальной машины (если есть доступ к MinIO через ingress или port-forward)
Сначала настройте alias для MinIO:
1 2 | |
Затем сгенерируйте токен:
1 | |
Команда выведет bearer token, который нужно скопировать.
- Создайте Secret с токеном:
1 2 | |
Или вручную:
1 2 | |
Важно: Secret должен быть создан в namespace tech-monitoring с именем minio-prometheus-token и ключом token.
Проверка метрик:
1 2 3 4 5 6 | |
Алерты и дашборды:
После включения метрик автоматически применяются:
- PrometheusRule с алертами: infra/k8s/monitoring/alerts/minio-alerts.yaml
- Алерты доступности (MinIODown, MinIOMetricsDown)
- Алерты производительности (MinIOHighLatency, MinIOHighErrorRate)
- Алерты хранилища (MinIOHighDiskUsage, MinIOCriticalDiskUsage)
- Алерты кластера (MinIOInsufficientNodes, MinIOClusterDown)
- Алерты ресурсов (MinIOHighCPUUsage, MinIOHighMemoryUsage)
- Grafana дашборд:
infra/k8s/monitoring/dashboards/infra/minio/minio-cluster.json - Метрики кластера (активные ноды, использование диска)
- Метрики производительности (request rate, latency, throughput)
- Метрики хранилища (disk usage, capacity)
- Метрики ресурсов (CPU, memory)
Для применения алертов:
1 2 | |
Для синхронизации дашборда с Grafana:
1 2 | |
Детали реализации
- Helm chart оператора:
minio/operatorv5.0.15 (infra/k8s/charts/minio-operator/values.yaml) nodeSelectorиtolerationsнастроены так, чтобы оператор работал только на master нодах (node-role.kubernetes.io/control-plane=true).-
Console отключена (
console.enabled: false) из-за отсутствия публичных образов. -
Namespaces:
infra/k8s/manifests/namespaces/tech-minio-operator.yaml-
infra/k8s/manifests/namespaces/tech-minio-tenants.yaml -
Tenant
s3-public: - CR:
infra/k8s/manifests/minio/s3-public.yaml servers: 4,volumesPerServer: 1— 4 pod'а MinIO, каждый со своим PVC.- PVC использует
StorageClass: longhorn-minio, размер50Giна pod. - Размещение:
- нет жёсткого nodeAffinity — поды могут быть и на masters, и на workers
podAntiAffinity— разведение pod'ов по разным нодам поkubernetes.io/hostname
- SecurityContext настроен для non-root пользователя (UID 1000)
- Сервисы создаются автоматически оператором (ClusterIP для внутреннего доступа)
-
Метрики Prometheus доступны через ServiceMonitor (
infra/k8s/monitoring/manifests/monitors/minio-servicemonitor.yaml) -
Configuration Secret (формат v5.0.15+):
- Tenant использует существующий Secret через
spec.configuration.name: s3-public-env-configuration. - Secret не хранится в репозитории (только ссылка в манифесте Tenant).
- Secret должен быть создан до применения Tenant манифеста.
- Формат Secret:
- Namespace:
tech-minio-tenants - Имя:
s3-public-env-configuration - Тип:
Opaque - Ключ:
config.envс содержимым:1 2
export MINIO_ROOT_USER=<username> export MINIO_ROOT_PASSWORD=<password>
- Namespace:
- Создание: через
make minio-create-secretили вручную черезkubectl create secret.