minio
Ansible Роль: Установка и Конфигурация Минио Сервера
Эта роль устанавливает и настраивает Minio на Linux сервере.
Требования
Отсутствуют
Переменные Роли
Доступные переменные перечислены ниже вместе с их значениями по умолчанию (см. defaults\main.yaml
)
Устанавливать ли минио сервер и клиент
minio_install_server: true minio_install_client: true
Подробности установки минио сервера
Пользователь/группа Minio в UNIX
minio_group: minio minio_user: minio
Директории установки Minio для размещения конфигурации сервера (
minio_etc_dir
), TLS сертификатов (minio_cert_dir
) и политик доступа пользователей (minio_policy_dir
)minio_etc_dir: /etc/minio minio_cert_dir: "{{ minio_etc_dir }}/ssl" minio_policy_dir: "{{ minio_etc_dir }}/policy"
IP адрес минио сервера (
minio_server_address
), если пусто, сервер будет слушать на всех доступных IP адресах и портах сервера/консоли (minio_server_port
иminio_console_port
)minio_server_port: "9091" minio_server_addr: "" minio_console_port: "9092"
Администратор Minio и пароль
minio_root_user: "" minio_root_password: ""
Регион сайта Minio
minio_site_region: "eu-west-1"
Директории данных Minio (
minio_server_datadirs
) и необходимость принудительного создания в случае их отсутствия (minio_server_make_datadirs
)minio_server_make_datadirs: true minio_server_datadirs: - /var/lib/minio
minio_server_cluster_nodes: []
Установите список узлов для создания распределенного кластера (Многоузловое Многодисковое развёртывание).
В этом режиме Ansible создаст ваши директории данных сервера (
minio_serverdata_dirs
), но будет использовать этот список (minio_server_cluster_nodes
) для запуска сервера.Конфигурация для нескольких дисков требует наличия директорий данных на отдельных дисках для соблюдения требований распределенного хранилища Minio.
См. рекомендации по использованию одинаковой конфигурации на всех узлах, последовательным именам хостов и локально подключенному хранилищу с последовательными монтированиями в документации (https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html)
Пример:
minio_server_datadirs: - '/mnt/disk1/minio' - '/mnt/disk2/minio' - '/mnt/disk3/minio' - '/mnt/disk4/minio' minio_server_cluster_nodes: - 'https://minio{1...4}.example.net:9091/mnt/disk{1...4}/minio'
Конфигурация клиента Minio
Имя псевдонима подключения
minio_alias
и необходимость проверки SSL сертификатов (minio_validate_certificates
)minio_validate_certificate: true minio_alias: "myminio"
Конфигурация TLS
Для включения конфигурации TLS установите
minio_enable_tls
в true и предоставьте закрытый ключ и открытый сертификат в переменныеminio_key
иminio_cert
.Их можно загрузить из файлов с помощью задачи Ansible, как:
- name: Загрузить ключ tls и сертификат из файлов set_fact: minio_key: "{{ lookup('file','certificates/{{ inventory_hostname }}_private.key') }}" minio_cert: "{{ lookup('file','certificates/{{ inventory_hostname }}_public.crt') }}"
minio_url
может понадобиться в случае, если TLS сертификаты MinIO Server не содержат никаких IP альтернативных имен (SAN). См. определение переменной окружения MINIO_SERVER_URL.minio_url: "https://minio.ricsanfre.com:{{ minio_server_port }}"
Корзины для создания
Переменная
minio_buckets
создает список предоставленных корзин с применением конкретной политики. Для создания корзин используется модифицированная версия модуля Ansible от Алексиса Факеса (https://github.com/alexisfacques/ansible-module-s3-minio-bucket)minio_buckets: - name: bucket1 policy: read-only - name: bucket2 policy: read-write object_lock: false - name: bucket3 policy: private object_lock: true
ЗА ЭТОМ УВИДИТЕ: Модуль использует удаленное соединение с Minio Server через Python API (пакет
minio
). Роль гарантирует, что PIP установлен, и устанавливает пакетminio
.Во время создания корзин можно указать три типа политики:
private
,read-only
илиread-write
.Также можно включить или отключить блокировку объектов Minio:
true
илиfalse
.Пользователи для создания и ACL корзин
Пользователи могут быть автоматически созданы с помощью переменной
minio_users
: можно предоставить список пользователей, каждый с тремя переменнымиname
(имя пользователя),password
(пароль пользователя) иbuckets_acl
— список корзин и типа доступа, предоставленного к каждой корзине (read-only или read-write). Роль автоматически создаст файлы политики в формате JSON, содержащие утверждения о политиках пользователей, и загрузит их на сервер.Можно использовать предварительно определенные политики
read-only
иread-write
, содержащие заранее определенные заявления о доступе. Также можно определить пользовательские политики с помощью политикиcustom
. В этом случае необходимо предоставить список заявлений о доступе.minio_users: - name: user1 password: supers1cret0 buckets_acl: - name: bucket1 policy: read-write - name: bucket2 policy: read-only - name: bucket3 policy: custom custom: - rule: | "Effect": "Allow", "Action": [ "s3:GetObject", "s3:DeleteObject", "s3:PutObject", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::bucket3/*" ] - rule: | "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::bucket3" ]
Предыдущая конфигурация создаст следующий файл policy.json для пользователя
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::bucket1",
"arn:aws:s3:::bucket1/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket2",
"arn:aws:s3:::bucket2/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:GetObject",
"s3:ListMultipartUploadParts",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::bucket3/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket3"
]
}
]
}
Генерация токена доступа для Prometheus
minio_prometheus_bearer_token: false prometheus_bearer_token_output: "{{ minio_etc_dir }}/prometheus_bearer.json"
Установив
minio_prometheus_bearer_token
в true, создается файл/etc/minio/prometheus_bearer.json
, который содержит результат выполнения команды:mc admin prometheus generate myminio -json
Установка библиотеки MinIO pip в системные пакеты
Как указано в документации модуля
pip
:Установки Python, отмеченные как управляемые извне (как определено PEP668) не могут быть обновлены версиями pip >= 23.0.1 без использования виртуальной среды или установки переменной окружения
PIP_BREAK_SYSTEM_PACKAGES=1
.Эти (и любые другие переменные окружения pip) можно установить с помощью
minio_pip_environment_vars
, как:minio_pip_environment_var: PIP_BREAK_SYSTEM_PACKAGES: "1"
Репликация сайта
Переменная
replication_sites
создает список множественных независимых развертываний MinIO для настройки в кластер реплик, называемый сайтами-соседями. Для получения дополнительной информации о том, что реплицируется между сайтами, обращайтесь к документации Minio (https://min.io/docs/minio/linux/operations/install-deploy-manage/multi-site-replication.html)replication_sites: - name: myminio2 url: "http://replication.minio.com:9091" admin_user: "myminio2" admin_password: "supers1cret02"
url
— это URL сайта, куда будет производиться репликация из текущего сконфигурированного сайта в плейбуке. Переменныеadmin_user
иadmin_password
— это учетные данные для аутентификации сайта, который будет реплицирован с правами администратора.Как указывается в документации по
site-replication
- Изначально только один из сайтов, добавленных для репликации, может содержать данные. После успешной настройки репликации сайта эти данные будут реплицированы на другие (изначально пустые) сайты. Впоследствии объекты могут записываться на любой из сайтов, и они будут реплицированы на все другие сайты.
- Удаление сайта не допускается из набора реплицируемых сайтов после настройки.
- Все сайты должны использовать один и тот же внешний IDP(s), если таковые имеются.
- Для шифрования через SSE-S3 или SSE-KMS все сайты должны иметь доступ к центральному развертыванию KMS. Это можно сделать через центральный сервер KES или несколько серверов KES (например, по одному на сайт), подключенных через центральный сервер KMS (Vault).
Зависимости
Отсутствуют
Пример Плейбука
Следующий плейбук устанавливает и настраивает минио сервер и клиент, включает TLS и генерирует самоподписанные SSL сертификаты. Также он создаёт некоторые корзины и пользователей с соответствующими ACL.
---
- name: Установить и настроить сервер Minio
hosts: minio
become: true
gather_facts: true
vars:
server_hostname: minio.example.com
ssl_key_size: 4096
ssl_certificate_provider: selfsigned
pre_tasks:
- name: Сгенерировать самоподписанные SSL сертификаты для minio
include_tasks: generate_selfsigned_cert.yml
args:
apply:
delegate_to: localhost
become: false
- name: Загрузить ключ tls и сертификат
set_fact:
minio_key: "{{ lookup('file','certificates/' + inventory_hostname + '_private.key') }}"
minio_cert: "{{ lookup('file','certificates/' + inventory_hostname + '_public.crt') }}"
roles:
- role: ricsanfre.minio
minio_root_user: "miniadmin"
minio_root_password: "supers1cret0"
minio_enable_tls: true
minio_url: "https://{{ server_hostname }}:{{ minio_server_port }}"
minio_buckets:
- name: bucket1
policy: read-write
- name: bucket2
policy: read-write
minio_users:
- name: user1
password: supers1cret0
buckets_acl:
- name: bucket1
policy: read-write
- name: bucket2
policy: read-only
Раздел pre-tasks
включает задачи для генерации закрытого ключа и самостоятельно подписанного сертификата и загрузки их в переменные minio_key
и minio_cert
.
Где файл generate_selfsigned_cert.yml
содержит задачи для генерации закрытого ключа и SSL сертификата, подписанного самостоятельно:
---
- name: Создать закрытый сертификат
openssl_privatekey:
path: "certificates/{{ inventory_hostname }}_private.key"
size: "{{ ssl_key_size | int }}"
mode: 0644
- name: Создать CSR
openssl_csr:
path: "certificates/{{ inventory_hostname }}_cert.csr"
privatekey_path: "certificates/{{ inventory_hostname }}_private.key"
common_name: "{{ server_hostname }}"
- name: Создать сертификаты для keystore
openssl_certificate:
csr_path: "certificates/{{ inventory_hostname }}_cert.csr"
path: "certificates/{{ inventory_hostname }}_public.crt"
privatekey_path: "certificates/{{ inventory_hostname }}_private.key"
provider: "{{ ssl_certificate_provider }}"
Лицензия
MIT
Информация об авторе
Создано Рикардо Санчесом (ricsanfre)
Модуль создания корзин ansible основан на модуле от Алексиса Факеса (https://github.com/alexisfacques/ansible-module-s3-minio-bucket)
ansible-galaxy install ricsanfre/ansible-role-minio