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 |