Falls ich oder irgendwer es jemals wieder wo braucht 😀 Single host. Kein TLS. Ohne Schusswaffe. Nur um es mal gesehen zu haben.

Minio AGPL3 runterladen und installieren (erzeugt systemd Service „minio„, User und Gruppe „minio-user“ und Config auf /etc/default/minio) – ist seltsam weil offenbar je nach Download URL andere Lizenz im Executable eingebacken ist:

wget https://dl.min.io/server/minio/release/linux-amd64/minio.deb
sudo dpkg -i minio.deb

/etc/default/minio anpassen

## Volume to be used for MinIO server.
MINIO_VOLUMES="/data/minio"

## Use if you want to run MinIO on a custom port.
MINIO_OPTS="--address :9198 --console-address :9199"

## Root user for the server.
MINIO_ROOT_USER=whatever1

## Root secret for the server.
MINIO_ROOT_PASSWORD=whatever2

## set this for MinIO to reload entries with 'mc admin service restart'
MINIO_CONFIG_ENV_FILE=/etc/default/minio

Der Datenpfad muss dem minio User gehören:

sudo chmod -R minio-user:minio-user /data/minio

Minio starten und systemd journal checken was abgeht:

sudo systemctl start minio
sudo journalctl -u minio

Im Webinterface (Port 9199 gemäß obiger Config) kann man nicht viel machen außer Buckets verwalten (anlegen/löschen), daher brauchen wir MC, das CLI:

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo cp mc /usr/local/bin/

mc braucht auch ein config file welches beim ersten Aufruf mit Defaultwerten befüllt wird (die nicht funktionieren oder wir erzeugen selbst eines – die Keys sind User/PW von /etc/default/minio) – die ist unter ~/.mc/config.json zu speichern:

{
        "version": "10",
        "aliases": {
                "local": {
                        "url": "http://localhost:9198",
                        "accessKey": "whatever1",
                        "secretKey": "whatever2",
                        "api": "S3v4",
                        "path": "auto"
                },
        }
}

Wir erzeugen ein Bucket und setzen die Region des Servers (+Restart desselben):

mc mb local/longhornbackup
mc admin config set local region name=myregion
mc admin service restart local

Dann brauchen wir noch eine Zugriffspolicy (Einschränkung auf unseren Bucket den wir soeben erzeugt haben) die wir dann unserem Backupuser zuordnen (minio-longhornbackup-policy.json):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::longhornbackup/*",
        "arn:aws:s3:::longhornbackup"
      ]
    }
  ]
}

Zuletzt legen wir einen User samt Access Key für Longhorn Config an und attachen die Policy (das local ist der Alias der Konfiguration aus der ~/.mc/config.json, das Kennwort ist irrelevant weil wir eh mit accesskey zugreifen):

mc admin user add local longhorn irgendeinkennwort
mc admin accesskey create local longhorn
mc admin policy create local longhornbackup ./minio-longhornbackup-policy.json
mc admin policy attach local longhornbackup --user longhorn

Mit den Werten die die accesskey Erzeugung unter „Access Key“ und „Secret Key“ ausgespuckt hat erzeugen wir ein Kubernetes Secret im longhorn-system Namespace (minio-secret hier, beim AWS_ENDPOINTS Wert den Servernamen auf dem Minio läuft plus den Port für API aus /etc/default/minio dort verwenden):

kubectl -n longhorn-system create secret generic minio-secret \
    --from-literal=AWS_ACCESS_KEY_ID=.... \
    --from-literal=AWS_SECRET_ACCESS_KEY=.... \
    --from-literal=AWS_ENDPOINTS=http://miniohost_oder_ip:9198

Zuletzt tragen wir das Backup Target im Longhorn Web UI noch unter Setting/Backup Target ein wobei der Teil vor dem @ der Name des Bucket ist und das hinterm @ die Region die wir gesetzt haben: