Aller au contenu

RustFS

Introduction

Nous allons installer un serveur S3 RustFS pour y stocker les sauvegardes de nos volumes persistants et de la config de notre environnement kuberntes.

Prérequis

  • un serveur Rocky 10
  • disque supplémentaire sur notre VM (50G)
Nom du serveur Adresse IP Rôle
ks3fs 172.31.10.13 serveur S3

Prérequis

Préparation du disque

sudo pvcreate /dev/nvme0n2
sudo vgcreate datavg /dev/nvme0n2
sudo lvcreate -l 100%VG -n datalv datavg
sudo mkfs.xfs /dev/mapper/datavg-datalv
sudo mkdir -p /data/rustfs0
sudo sh -c 'echo "/dev/mapper/datavg-datalv /data/rustfs0    xfs     defaults        0 0" >> /etc/fstab'
sudo mount -a
df -h

Groupe et utilisateur

sudo groupadd -r rustfs-user
sudo useradd -M -r -g rustf-user rustfs-user
sudo chown minio-user:minio-user /home/data

Création des répertoires

sudo mkdir -p /data/rustfs0 /var/log/rustfs /opt/rustsf /opt/rustfs/tls
sudo chmod -R 750 /data/rustfs* /var/log/rustfs /opt/rustfs

Installation de RustFS

Serveur

wget https://dl.rustfs.com/artifacts/rustfs/release/rustfs-linux-$(arch)-musl-latest.zip
sudo unzip rustfs-linux-$(arch)-musl-latest.zip
sudo chmod +x rustfs
sudo mv rustfs /opt/rustf/

Client

Pour les versions voir https://github.com/rustfs/cli

x86_64/amd64

wget https://github.com/rustfs/cli/releases/download/v0.1.13/rustfs-cli-linux-amd64-vx.x.xx.tar.gz
tar zxvf rustfs-cli-linux-amd64-vx.x.xx.tar.gz
sudo chmod +x rc
sudo mv rc /usr/local/bin/

aarch64/arm64

wget https://github.com/rustfs/cli/releases/download/v0.1.13/rustfs-cli-linux-arm64-vx.x.xx.tar.gz
tar zxvf rustfs-cli-linux-arm64-vx.x.xx.tar.gz
sudo chmod +x rc
sudo mv rc /usr/local/bin/

Configuration serveur

Création du fichier de service systemd

sudo tee /etc/systemd/system/rustfs.service <<EOF
[Unit]
Description=RustFS Object Storage Server
Documentation=https://rustfs.com/docs/
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
NotifyAccess=main
User=rustfs
Group=rustfs

WorkingDirectory=/usr/local
EnvironmentFile=-/etc/default/rustfs
ExecStart=/opt/rustfs/rustfs \$RUSTFS_VOLUMES

LimitNOFILE=1048576
LimitNPROC=32768
TasksMax=infinity

Restart=always
RestartSec=10s

OOMScoreAdjust=-1000
SendSIGKILL=no

TimeoutStartSec=30s
TimeoutStopSec=30s

NoNewPrivileges=true

ProtectHome=true
PrivateTmp=true
PrivateDevices=true
ProtectClock=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
RestrictSUIDSGID=true
RestrictRealtime=true

# service log configuration
StandardOutput=append:/var/log/rustfs/rustfs.log
StandardError=append:/var/log/rustfs/rustfs-err.log

[Install]
WantedBy=multi-user.target
EOF

Fichier de configuration

Warning

Remplacer le mot de passe adminPasswordAChanger ci-dessous

sudo tee /etc/default/rustfs <<EOF
RUSTFS_ACCESS_KEY=rustfsadmin
RUSTFS_SECRET_KEY=adminPasswordAChanger
RUSTFS_VOLUMES="/data/rustfs0"
RUSTFS_ADDRESS=":9000"
RUSTFS_CONSOLE_ENABLE=true
RUST_LOG=error
RUSTFS_OBS_LOG_DIRECTORY="/var/log/rustfs/"
EOF

Création des répertoires

sudo mkdir -p /data/rustfs0 /var/log/rustfs /opt/tls
sudo chmod -R 750 /data/rustfs* /var/log/rustfs

Démarre le services

sudo systemctl daemon-reload
sudo systemctl enable --now rustfs
sudo systemctl status rustfs

Configuration du client

rc alias set rustfsadmin http://localhost:9000 rustfsadmin adminPasswordAChanger

Note

Le mot de passe adminPasswordAChanger doit correspondre à celui défini dans /etc/default/rustfs (RUSTFS_SECRET_KEY=)

Utilisateurs

Création d'utilisateurs

rc admin user add rustfsadmin longhorn-backups-user userPasswordAChanger
rc admin user add rustfsadmin velero-backups-user userPasswordAChanger

Configuration du client

rc alias set longhorn-backups-user http://localhost:9000 longhorn-backups-user userPasswordAChanger
rc alias set velero-backups-user http://localhost:9000 velero-backups-user userPasswordAChanger

Note

Le mot de passe userPasswordAChanger doit correspondre à celui défini lors de la création des utilisateurs ci-dessus.

Création de bucket

Nos allons créer deux buckets longhorn-backup et velero-backups avec chacun un utilisateur et une politique d'accès

rc mb rustfsadmin/longhorn-backups
rc mb rustfsadmin/velero-backups

Attribution des politiques

Longhorn

cat > /tmp/longhorn-backups-policy.json <<EOF
{
  "Version": "2012-10-17",
      "Statement": [
    {
      "Action": [
        "s3:PutBucketPolicy",
        "s3:GetBucketPolicy",
        "s3:DeleteBucketPolicy",
        "s3:ListAllMyBuckets",
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::longhorn-backups"
      ],
      "Sid": ""
    },
    {
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:GetObject",
        "s3:ListMultipartUploadParts",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::longhorn-backups/*"
      ],
      "Sid": ""
    }
  ]
}
EOF
rc admin policy create rustfsadmin longhorn-backups-policy /tmp/longhorn-backups-policy.json
rc admin policy attach rustfsadmin longhorn-backups-policy --user=longhorn-backups-user

Velero

cat > /tmp/velero-backups-policy.json <<EOF
{
  "Version": "2012-10-17",
      "Statement": [
    {
      "Action": [
        "s3:PutBucketPolicy",
        "s3:GetBucketPolicy",
        "s3:DeleteBucketPolicy",
        "s3:ListAllMyBuckets",
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::velero-backups"
      ],
      "Sid": ""
    },
    {
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:GetObject",
        "s3:ListMultipartUploadParts",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::velero-backups/*"
      ],
      "Sid": ""
    }
  ]
}
EOF
rc admin policy create rustfsadmin velero-backups-policy /tmp/velero-backups-policy.json
rc admin policy attach rustfsadmin velero-backups-policy --user=velero-backups-user

Accès à l'interface WEB

http://ks3fs.gmolab.net:9001

Le username et le password correspondent à ceux définis dans /etc/default/rustfs

RUSTFS_ACCESS_KEY=rustfsadmin
RUSTFS_SECRET_KEY=adminPasswordAChanger

Source

Deploy single node
RustFS client operations


Version Date Change Auteur
1.0 01.05.2026 Création GMo