MinIO Operator — это аддон для Kubernetes, который упрощает развертывание и управление S3-совместимыми хранилищами на базе MinIO. Он позволяет создавать распределенные кластеры хранения через CRD, управлять пользователями, бакетами и конфигурацией через Kubernetes-манифесты.
Установка в ПУ
Для работы аддона необходимо, чтобы в кластере был установлен аддон CSI-driver.
Для установки MinIO Operator, в панели управления кластером, перейдите во вкладку «Дополнения». Найдите «MinIO Operator» в списке и нажмите на него.

В открывшемся окне можно при необходимости изменить параметры установки. Описание параметров доступно в официальной документации. Воспользоваться аддоном можно не меняя настроек по умолчанию.
Для установки аддона нажмите на кнопку «Установить».

Дождитесь завершения установки. Для проверки, что установка завершена корректно, выполните команду:
У запущенных подов должен быть статус Running.
Пример использования
В качестве примера развернем кластер MinIO из одного узла. Данные будут храниться на сетевом диске, а доступ к кластеру будет организован через Nginx Ingress с настроенным HTTPS.
В продакшн-среде рекомендуется использовать не менее 4 узлов для обеспечения отказоустойчивость.
Предварительные требования
В кластере должны быть установлены аддоны:
- Nginx Ingress
- CSI-driver
- cert-manager
- MinIO Operator
Все аддоны установлены с параметрами по умолчанию.
Для доступа к консоли и S3 API мы будем использовать два поддомена:
-
minio-console.timeweb-example.cloud— для доступа к панели управления; -
s3.timeweb-example.cloud— для доступа к S3 API.
Перейдем к созданию кластера. Сначала опишем создание неймспейса в файле namespace.yaml:
Теперь опишем тенант в файле tenant.yaml:
Здесь:
pools — определяет пул серверов (узлов) для MinIO:
-
servers: 1— количество серверов в пуле. -
volumesPerServer: 1— количество томов, подключаемых к каждому серверу; -
volumeClaimTemplate— шаблон для создания PVC. Указываем: -
accessModes: ReadWriteOnce— том может быть смонтирован только одним подом на одном узле; -
storage: 2Gi— размер тома; -
storageClassName: nvme.network-drives.csi.timeweb.cloud— класс хранилища, соответствующий NVMe-дискам, предоставляемым CSI-драйвером.
Обязательный параметр spec.configuration.name, в котором мы передаем имя секрета. Параметр используется для создания root-пользователя.
В секции spec.users указывается список пользователей, для каждого из которых должен быть создан секрет с access и secret key. Имя секрета передается в поле name.
Опишем секрет storage-configuration.yaml:
И storage-user.yaml:
Обратите внимание, что CONSOLE_ACCESS_KEY и CONSOLE_SECRET_KEY передаются закодированные в base64. Например:
Применим все манифесты:
Проверьте, что все манифесты успешно применились и все сервисы корректно запустились:
Вы должны будете увидеть примерно такой вывод:
Теперь перейдем к настройке Nginx Ingress. Создадим файл ingress.yaml:
Не забудьте заменить домены s3.timeweb-example.cloud и minio-console.timeweb-example.cloud.
Для выпуска сертификатов создадим cluster-issuer.yaml:
Поменяйте example@timeweb.cloud на вашу почту — она будет использоваться Let's Encrypt.
Опишем балансировщик нагрузки в файле lb.yaml:
Примените все манифесты:
Дождитесь завершения создания балансировщика нагрузки в панели управления и укажите для доменов в качестве A-записи IP-адрес балансировщика.
Проверьте, что ingress запущен, а сертификаты выпущены:
Теперь можно перейти к панели управления MinIO. Перейдите по домену MinIO-консоли, в нашем примере — это minio-console.timeweb-example.cloud. Вы увидите страницу авторизации.

Для авторизации используйте данные, указанные в секретах storage-user.yaml или storage-configuration.yaml, например, логин console и пароль console123.
Перейдите в раздел «Buckets», чтобы создать бакет.

Перейдите в раздел «Access Keys», чтобы создать данные для подключения — например, с помощью S3cmd. Простой конфиг для подключения будет выглядеть так: