ricsanfre.minio
Ansible Rolle: Minio Server Installation und Konfiguration
Diese Rolle installiert und konfiguriert Minio auf einem Linux-Server.
Anforderungen
Keine
Rollenvariablen
Verfügbare Variablen sind unten aufgelistet, zusammen mit Standardwerten (siehe defaults\main.yaml
).
Ob der Minio-Server und der Minio-Client installiert werden sollen oder nicht
minio_install_server: true minio_install_client: true
Details zur Installation des Minio-Servers
Minio UNIX Benutzer/Gruppe
minio_group: minio minio_user: minio
Installationsverzeichnisse für Minio zur Unterbringung der Serverkonfiguration (
minio_etc_dir
), TLS-Zertifikate (minio_cert_dir
) und Benutzerzugriffsrichtlinien (minio_policy_dir
)minio_etc_dir: /etc/minio minio_cert_dir: "{{ minio_etc_dir }}/ssl" minio_policy_dir: "{{ minio_etc_dir }}/policy"
IP-Adresse des Minio-Servers (
minio_server_address
), wenn leer, lauscht der Server an allen verfügbaren IP-Adressen, sowie Server-/Konsolenschnittstellen (minio_server_port
undminio_console_port
)minio_server_port: "9091" minio_server_addr: "" minio_console_port: "9092"
Minio Admin-Benutzer und Passwort
minio_root_user: "" minio_root_password: ""
Minio Standortregion
minio_site_region: "eu-west-1"
Minio-Datenverzeichnisse (
minio_server_datadirs
) und ob die Erstellung erzwungen werden soll, falls sie nicht existieren (minio_server_make_datadirs
)minio_server_make_datadirs: true minio_server_datadirs: - /var/lib/minio
minio_server_cluster_nodes: []
Setze eine Liste von Knoten, um einen verteilten Cluster (Multi-Node Multi-Drive-Bereitstellung) zu erstellen.
In diesem Modus wird Ansible Ihre Server-Datenverzeichnisse (
minio_serverdata_dirs
) erstellen, verwendet jedoch diese Liste (minio_server_cluster_nodes
) für den Serverstart.Multi-Drive-Konfiguration erfordert, dass die Datenverzeichnisse auf separaten Festplatten liegen, um die Anforderungen des verteilten Speichers von Minio zu erfüllen.
Weitere Empfehlungen zur Verwendung derselben Konfiguration auf allen Knoten, sequenziellen Hostnamen und lokal angeschlossenem Speicher mit sequentiellen Montagen finden Sie in der Dokumentation (https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html).
Beispiel:
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-Client-Konfiguration
Verbindungsalias-Name
minio_alias
und ob SSL-Zertifikate validiert werden sollen oder nicht (minio_validate_certificates
)minio_validate_certificate: true minio_alias: "myminio"
TLS-Konfiguration
Um die TLS-Konfiguration zu aktivieren, setzen Sie
minio_enable_tls
auf true und stellen Sie den privaten Schlüssel und das öffentliche Zertifikat als Inhalt bereit, der in die Variablenminio_key
undminio_cert
geladen wird.Sie können sie auch von Dateien aus laden, indem Sie eine Ansible-Aufgabe verwenden, wie:
- name: TLS-Schlüssel und Zertifikat von Dateien laden set_fact: minio_key: "{{ lookup('file','certificates/{{ inventory_hostname }}_private.key') }}" minio_cert: "{{ lookup('file','certificates/{{ inventory_hostname }}_public.crt') }}"
minio_url
könnte benötigt werden, falls die TLS-Zertifikate des MinIO-Servers keine IP-Subject Alternative Names (SAN) enthalten. Siehe Definition der MINIO_SERVER_URL-Umgebungsvariablen.minio_url: "https://minio.ricsanfre.com:{{ minio_server_port }}"
Zu erstellende Buckets
Die Variable
minio_buckets
erstellt die Liste der bereitgestellten Buckets und wendet eine spezifische Richtlinie an. Zum Erstellen der Buckets wird eine modifizierte Version des Ansible-Moduls von Alexis Facques verwendet (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
HINWEIS: Das Modul verwendet die Remoteverbindung zum Minio-Server über die Python-API (
minio
Python-Paket). Die Rolle stellt sicher, dass PIP installiert ist und dasminio
-Paket installiert wird.Bei der Bucketerstellung können drei Arten von Richtlinien angegeben werden:
privat
,read-only
oderread-write
Buckets.Minio-Objektsperren können ebenfalls aktiviert oder deaktiviert werden:
true
oderfalse
.Zu erstellende Benutzer und Buckets ACLs
Benutzer können automatisiert mit der Variable
minio_users
erstellt werden: Eine Liste von Benutzern kann bereitgestellt werden, jeder Benutzer hat drei Variablenname
(Benutzername),password
(Benutzerpasswort) undbuckets_acl
Liste von Buckets und Art des Zugriffs, der für jeden Bucket gewährt wird (read-only oder read-write). Die Rolle erstellt automatisch JSON-Richtliniendateien, die die Benutzerrichtlinienaussagen enthalten und lädt sie auf den Server.Vorgegebene
read-only
undread-write
Richtlinien mit vordefinierten Zugriffsanweisungen können verwendet werden. Benutzerdefinierte Richtlinien können ebenfalls mitcustom
definiert werden. In diesem Fall muss eine Liste von Zugriffsanweisungen bereitgestellt werden.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" ]
Die vorherige Konfiguration erstellt die folgende policy.json-Datei für den Benutzer:
{
"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-Bearer-Token generieren
minio_prometheus_bearer_token: false prometheus_bearer_token_output: "{{ minio_etc_dir }}/prometheus_bearer.json"
Wenn Sie
minio_prometheus_bearer_token
auf true setzen, wird eine Datei/etc/minio/prometheus_bearer.json
erstellt, die das Ergebnis der Ausführung des Befehls enthält:mc admin prometheus generate myminio -json
MinIO pip-Bibliothek in die Systempakete installieren
Wie in der Dokumentation des
pip
-Moduls angemerkt:Python-Installationen, die als extern verwaltet gekennzeichnet sind (wie von PEP668 definiert), können nicht von Pip-Versionen >= 23.0.1 ohne die Verwendung einer virtuellen Umgebung oder das Setzen der Umgebungsvariablen
PIP_BREAK_SYSTEM_PACKAGES=1
aktualisiert werden.Diese (und andere pip-Umgebungsvariablen) können mit
minio_pip_environment_vars
wie folgt festgelegt werden:minio_pip_environment_var: PIP_BREAK_SYSTEM_PACKAGES: "1"
Standortreplikation
Mit der Variable
replication_sites
wird die Liste mehrerer unabhängiger MinIO-Bereitstellungen erstellt, die als Cluster von Repliken konfiguriert werden sollen, die als Peer-Sites bezeichnet werden. Weitere Informationen dazu, was über Standorte hinweg repliziert wird, finden Sie in der MinIO-Dokumentation (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"
Die
url
ist die URL der Site, die vom aktuell konfigurierten Standort im Playbook repliziert wird. Die Variablenadmin_user
undadmin_password
sind Authentifizierungsdaten für den Standort, der mit Administratorrechten repliziert wird.Wie in der Dokumentation zur
site-replication
angemerkt:- Zunächst darf nur eine der hinzugefügten Sites für die Replikation Daten enthalten. Nach erfolgreicher Konfiguration der Standortreplikation werden diese Daten auf die anderen (anfänglich leeren) Sites repliziert. Anschließend können Objekte an allen Sites geschrieben werden, und sie werden auf alle anderen Sites repliziert.
- Das Entfernen eines Standorts aus einem Satz von replizierten Sites ist nach der Konfiguration nicht zulässig.
- Alle Sites müssen die gleichen externen IDP(s) verwenden, falls vorhanden.
- Für SSE-S3 oder SSE-KMS-Verschlüsselung über KMS müssen alle Sites Zugang zu einer zentralen KMS-Bereitstellung haben. Dies kann über einen zentralen KES-Server oder mehrere KES-Server (z.B. einen pro Standort) erfolgen, die über einen zentralen KMS (Vault)-Server verbunden sind.
Abhängigkeiten
Keine
Beispiel-Playbook
Das folgende Playbook installiert und konfiguriert den Minio-Server und -Client, aktiviert TLS und generiert selbstsignierte SSL-Zertifikate. Es erstellt auch einige Buckets und Benutzer mit den entsprechenden ACLs.
---
- name: Installieren und Konfigurieren des Minio-Servers
hosts: minio
become: true
gather_facts: true
vars:
server_hostname: minio.example.com
ssl_key_size: 4096
ssl_certificate_provider: selfsigned
pre_tasks:
- name: Selbstsignierte SSL-Zertifikate für Minio generieren
include_tasks: generate_selfsigned_cert.yml
args:
apply:
delegate_to: localhost
become: false
- name: TLS-Schlüssel und Zertifikat laden
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
Der Abschnitt pre-tasks
enthält Aufgaben, um einen privaten Schlüssel und ein selbstsigniertes Zertifikat zu generieren und sie in den Variablen minio_key
und minio_cert
zu laden.
Die Datei generate_selfsigned_cert.yml
enthält die Aufgaben zur Erstellung eines privaten Schlüssels und eines selbstsignierten SSL-Zertifikats:
---
- name: Privates Zertifikat erstellen
openssl_privatekey:
path: "certificates/{{ inventory_hostname }}_private.key"
size: "{{ ssl_key_size | int }}"
mode: 0644
- name: CSR erstellen
openssl_csr:
path: "certificates/{{ inventory_hostname }}_cert.csr"
privatekey_path: "certificates/{{ inventory_hostname }}_private.key"
common_name: "{{ server_hostname }}"
- name: Zertifikate für Keystore erstellen
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 }}"
Lizenz
MIT
Autoreninformationen
Erstellt von Ricardo Sanchez (ricsanfre) Bucket-Erstellungs-Ansible-Modul basiert auf dem Modul von Alexix Facques (https://github.com/alexisfacques/ansible-module-s3-minio-bucket)
ansible-galaxy install ricsanfre.minio