Administration Guides
Il se décline en deux clusters :
- métier (namespace shared-s3) : Service de stockage objet à destination des applications métiers. Ce moyen de stockage est protégé par le service BeC.
- technique (namespace kosmos-s3) : Service de stockage objet à destination des applications techniques.
Localisation
Le service est déployé dans kubernetes :
- namespace : kosmos-s3
- pod : minio-operator-*
- pod : s3-*
- namespace : shared-s3
- pod : s3-*
- namespace : kosmos-system-restricted
- pod : iad-s3-shared-*
Configuration Initiale
Dimensionnement
Le cluster est composé de 4 replicas minimum.
Un volume est attaché à chacun des pods du cluster. Exemple ci-dessous avec le cluster s3 technique
La classe de stockage est différente suivant les plateformes (lvm-provisioner, topolvm-nvme, ...).
$ kubectl -n kosmos-s3 get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
data0-s3-cluster-pool-0-0 Bound pvc-c81ec040-01db-4b88-a3a1-2c18178499d1 128Gi RWO lvm-provisioner <unset> 16d
data0-s3-cluster-pool-0-1 Bound pvc-cc941c58-fb8c-498e-838c-ca8798446cf7 128Gi RWO lvm-provisioner <unset> 16d
data0-s3-cluster-pool-0-2 Bound pvc-15f3f5de-c644-4cc8-a72e-8af180d1ab93 128Gi RWO lvm-provisioner <unset> 16d
data0-s3-cluster-pool-0-3 Bound pvc-a2316b67-d278-40d4-a0db-f958d9598f34 128Gi RWO lvm-provisioner <unset> 16d
Interfaces
Le service s3 utilisable par les applications est exposé via un service Kubernetes :
Pour le cluster technique :
$ kubectl -n kosmos-s3 get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
minio ClusterIP 10.43.157.41 <none> 80/TCP 16d
operator ClusterIP 10.43.218.245 <none> 4221/TCP 16d
s3-cluster-console ClusterIP 10.43.136.112 <none> 9090/TCP 16d
s3-cluster-hl ClusterIP None <none> 9000/TCP 16d
sts ClusterIP 10.43.111.107 <none> 4223/TCP 16d
Pour le cluster métier :
$ kubectl -n shared-s3 get svc -l v1.min.io/tenant=s3-metier
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
minio ClusterIP 10.43.182.114 <none> 80/TCP 16d
s3-cluster-console ClusterIP 10.43.201.22 <none> 9090/TCP 16d
s3-cluster-hl ClusterIP None <none> 9000/TCP 16d
Statut du service S3 Minio technique
Se connecter sur le portail d'Administration avec un Administrateur Système.
Cliquer sur la tuile Rancher.
Démarrer un Kubectl Shell.
Exécuter les commandes suivantes pour obtenir le statut du service :
kubectl -n kosmos-s3 get pod
kubectl -n kosmos-s3 get svc
La première commande retourne l'état des noeuds du cluster sous forme de tableau. Il faut avoir le statut Running:
kubectl -n kosmos-s3 get pod | grep Running
NAME READY STATUS RESTARTS AGE
minio-operator-787b75ccdc-8q8wv 1/1 Running 0 22d
s3-cluster-pool-0-0 2/2 Running 0 21d
s3-cluster-pool-0-1 2/2 Running 0 21d
s3-cluster-pool-0-2 2/2 Running 2 (13d ago) 19d
s3-cluster-pool-0-3 2/2 Running 0 21d
La seconde commande retourne l'état des services du cluster :
kubectl -n kosmos-s3 get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
minio ClusterIP 10.43.157.41 <none> 80/TCP 21d
operator ClusterIP 10.43.218.245 <none> 4221/TCP 22d
s3-cluster-console ClusterIP 10.43.136.112 <none> 9090/TCP 21d
s3-cluster-hl ClusterIP None <none> 9000/TCP 21d
sts ClusterIP 10.43.111.107 <none> 4223/TCP 22d
On peut aussi vérifier son état avec la commande mc depuis un pod S3.
Pour cela il faut récupérer les paramètres d'accès (<accesskey> et <secretkey>) du compte technique du S3 technique au moyen des commandes suivantes :
kubectl -n kosmos-s3 get secrets minio-secrets -o jsonpath={.data.accessKey} | base64 -d
kubectl -n kosmos-s3 get secrets minio-secrets -o jsonpath={.data.secretKey} | base64 -d
La commande mc s'utilise de la façon suivante :
kubectl -n kosmos-s3 exec -it s3-cluster-pool-0-0 -- bash
bash-5.1$ mc alias set local http://localhost:9000 <accesskey> <secretkey>
bash-5.1$ mc admin heal local/ --verbose
Servers status:
==============
Pool 1st:
Summary:
=======
No active healing is detected for new disks.
Statut du service S3 Minio métier
Exécuter les commandes suivantes pour obtenir le statut du service :
kubectl -n shared-s3 get pod
kubectl -n shared-s3 get svc
La première commande retourne l'état des noeuds du cluster sous forme de tableau. Il faut avoir le statut Running:
kubectl -n shared-s3 get pod | grep Running
NAME READY STATUS RESTARTS AGE
s3-cluster-pool-0-0 2/2 Running 0 15d
s3-cluster-pool-0-1 2/2 Running 0 15d
s3-cluster-pool-0-2 2/2 Running 2 (6d ago) 12d
s3-cluster-pool-0-3 2/2 Running 0 15d
La seconde commande retourne l'état des services du cluster :
kubectl -n shared-s3 get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
minio ClusterIP 10.43.182.114 <none> 80/TCP 15d
s3-cluster-console ClusterIP 10.43.201.22 <none> 9090/TCP 15d
s3-cluster-hl ClusterIP None <none> 9000/TCP 15d
On peut aussi vérifier son état avec la commande mc depuis un pod S3.
Pour cela il faut récupérer les paramètres d'accès (<accesskey> et <secretkey>) du compte technique du S3 métier au moyen des commandes suivantes :
kubectl -n shared-s3 get secrets minio-secrets -o jsonpath={.data.accessKey} | base64 -d ; echo
kubectl -n shared-s3 get secrets minio-secrets -o jsonpath={.data.secretKey} | base64 -d ; echo
La commande mc s'utilise de la façon suivante :
kubectl -n shared-s3 exec -it s3-cluster-pool-0-0 -- bash
bash-5.1$ mc alias set local http://localhost:9000 <accesskey> <secretkey>
bash-5.1$ mc admin heal local/ --verbose
Servers status:
==============
Pool 1st:
Summary:
=======
No active healing is detected for new disks.
Augmenter la taille des PVC du S3 technique
Par exemple, pour augmenter la taille des PVC à 256Gi :
kubectl -n kosmos-s3 get pvc -o custom-columns="NAME:.metadata.name" --no-headers | xargs kubectl -n kosmos-s3 patch -p '{"spec":{"resources":{"requests":{"storage":"256Gi"}}}}' pvc
Cette modification est effectuée en local et n'est pas persistée dans l'inventaire. Par conséquent la réinstallation du composant S3 remettra en place la valeur par défaut figurant dans l'inventaire.
Depluis le portail d'Administration cliquer sur la tuile Console S3 Admin.
Cliquer sur l'onglet Administrator / Monitoring / Métrics.
Cliquer sur le Server s3-cluster-pool-0-0.
Constater que l'attribut Available Capacity est bien égal à 256Gi.
Augmenter la taille des PVC du S3 métier
Par exemple, pour augmenter la taille des PVC à 256Gi :
kubectl -n shared-s3 get pvc -o custom-columns="NAME:.metadata.name" --no-headers | xargs kubectl -n shared-s3 patch -p '{"spec":{"resources":{"requests":{"storage":"256Gi"}}}}' pvc
Cette modification est effectuée en local et n'est pas persistée dans l'inventaire. Par conséquent la réinstallation du composant S3 remettra en place la valeur par défaut figurant dans l'inventaire.
Depluis le portail d'Administration cliquer sur la tuile Console S3.
Cliquer sur l'onglet Administrator / Monitoring / Métrics.
Cliquer sur le Server s3-cluster-pool-0-0.
Constater que l'attribut Available Capacity est bien égal à 256Gi.
Sauvegarde des données S3
Cette procédure permet de sauvegarder les données d'un S3 vers un S3 externe. Elle n'est pas actuellement activée par défaut. Elle doit etre activée lorsque le S3 externe sera opérationnel.
Pour configurer le mécanisme de sauvegarde, mettre à jour le fichier de /data/apps/platform-provisioner/values/s3/values-backup.yaml
source:
endpoint: http://s3-cluster-hl.kosmos-s3.svc.cluster.local:9000
accessKey: ref+k8s://v1/Secret/kosmos-s3/minio-secrets/accessKey
secretKey: ref+k8s://v1/Secret/kosmos-s3/minio-secrets/secretKey
backup:
schedule: "0 5 * * *"
#bucketList: [] # Keep empty to backup all the buckets
bucketList:
- cosign-public-keys
- datapipeline-icons
- datapipeline-udf
- eds-backups
- kosmos-sql-backup
- pkg-gen
- pkg-mvn
- pkg-npm
- pkg-python
- velero-backup
s3:
endpoint: http://s3-cluster-hl.kosmos-s3.svc.cluster.local:9000
path: backup-archives
accessKey: ref+k8s://v1/Secret/kosmos-s3/minio-secrets/accessKey
secretKey: ref+k8s://v1/Secret/kosmos-s3/minio-secrets/secretKey
networkPolicy: # open ports for egress networkPolicy
egress:
ports:
- port: 9000
protocol: TCP
ttl: 30d
local:
pvSize: 100Gi
Où :
sourcecorrespond aux informations de connexion au cluster S3 à sauvegarder (configuré par défaut sur le cluster S3 technique)backupcorrespond aux informations de connexion au cluster S3 externe où seront archivés les buckets.schedulecorrespond à l'ordonnancement au format crontab (par défaut tous les jours à 5h)bucketListcorrespond à la liste des buckets à sauvegarder. Laisser vide [] pour sauvegarder tous les buckets.s3.endpointcorrespond à l'URL externes3.pathcorrespond à la bucket créée sur le cluster S3 externes3.network.egress.ports: correspond à la liste des ports à ouvrir en egress pour acceder au cluster S3 externes3.accessKeyets3.secretKeycorrespond aux crédentials d'acces au cluster S3 externes3.ttlcorrespond à la durée de rétention des sauvegardes sur le s3 externe (30 jours par défaut, 0 pas limite).
local.pvSizecorrespond à la taille du PV local. Il doit etre au moins égal à deux fois la taille du bucket le plus volumineux.
Le mécanisme de sauvegare de S3
Pour activer le mécanisme de sauvegarde, passer l'attribut s3.kosmos.backup.enabled à true dans le fichier d'environnement /data/apps/platform-provisioner/environments/${ENV}.yaml (les autres attributs ne sont pas indiqués et ils ne doivent pas etre modifiés)
s3:
kosmos:
backup:
enabled: true
Puis, réinstaller la release s3-backup
cd /data/apps/platform-provisioner
helmfile -e $ENV -l name=s3-backup destroy
helmfile -e $ENV -l name=s3-backup sync
Controler la présence du CronJob
kubectl -n kosmos-s3 get cronjob s3-backup-backup-job
Suivre le déroulement de la sauvegarde lors de son déclenchement
kubectl -n kosmos-s3 logs s3-backup-backup-job-29394158-dgt74 -f
Pour déactiver le mécanisme de sauvegarde, désinstaller la release s3-backup:
cd /data/apps/platform-provisioner
helmfile -e $ENV -l name=s3-backup destroy
Puis, passer l'attribut s3.kosmos.backup.enabled à false dans le fichier d'environnement /data/apps/platform-provisioner/environments/${ENV}.yaml (les autres attributs ne sont pas indiqués et ils ne doivent pas etre modifiés)
s3:
kosmos:
backup:
enabled: false
Restauration des données S3
Créer un fichier Helmfile /data/apps/platform-provisioner/helmfile-s3-recover.yaml comme suit, dans lequel doit être obligatoirement indiquée la date de sauvegarde à restaurer (date) et la liste des Buckets concernés (bucketList, laisser vide si vous souhaitez restaurer tous les Buckets):
---
# This describes differents available environments
bases:
- environments.yaml
repositories:
- name: athea
url: kosmos-registry.technique.artemis/athea/hauler
oci: true
---
releases:
- name: s3-restore
namespace: kosmos-s3
chart: athea/s3-restore
version: 1.0.0
wait: false
values:
- values/s3/values-backup.yaml
- restore:
date: 2025-11-20_142402
#bucketList: [] # Keep empty to restore all buckets found
bucketList:
- cosign-public-keys
- datapipeline-icons
- datapipeline-udf
- eds-backups
- kosmos-sql-backup
- pkg-gen
- pkg-mvn
- pkg-npm
- pkg-python
- velero-backup
- executer la procédure de restauration
helmfile -e $ENV -f helmfile-s3-restore.yaml sync
- suivre le déroulement de la restauration
kubectl -n kosmos-s3 logs s3-restore-restore-job-kfh6g
Rq: pour éviter des écrasements intempestifs, la restauration des buckets lève une erreur sur l'un des buckets est deja présent sur le cluster S3 cible.
- si besoin, pour relancer une restauration
kubectl -n kosmos-s3 delete job s3-restore-restore-job
helmfile -e $ENV -f helmfile-s3-recover.yaml sync
Augmenter la taille de fichier autorisé
Pour modifier la taille des fichiers pouvant être envoyés par les Console S3 (S3 Métier) et Console S3 Admin (S3 technique) :
-
se connecter à la tuile Rancher
-
sélectionner sur la partie gauche
Cluster / More Resources / Networking / Ingresses, entrers3dans le filtre situé sur la partie haute puis sélectionners3-cluster-consoledu namespaceshared-s3(S3 Métier) -
cliquer sur
Show Configurationpuis surEdit Configpuis surEdit as YAML -
modifier la ligne
nginx.ingress.kubernetes.io/proxy-body-sizepour être cohérente avec le besoin et les contraintes opérationnelles puis cliquer surSave -
recommencer les 3 étapes précédentes pour le namespace
kosmos-s3(S3 technique)
Vérifier le marquage d'un fichier
Cette procédure décrit comment vérifier le marquage d'une donnée enregistrée dans un bucket S3.
Une donnée minio est un fichier. Le marquage est une meta-donnée posée sur un fichier.
En ligne de commande
La vérification du marquage d'un objet S3 se fait via la commande stat :
Exemple pour un fichier qui possède la métadonnée 'Theme' valorisée à 'actu' :
On retrouve toutes les metadata. Attention, elles sont ici formatées à l'affichage avec une majuscule pour la première lettre.
- Se connecter à la tuile Rancher avec un compte
Administrateur Système - Démarrer le
Kubectl Shell - Se connecter à un pod du cluster S3 Métier
- Configurer l'alias pour pouvoir utiliser la commande
mc - Lancer la commande
mc statsur le fichier à vérifier
Les informations de connexion au S3 métier (namespace shared-s3) peuvent être récupérées avec les commandes suivantes :
kubectl -n shared-s3 get secrets minio-secrets -o jsonpath={.data.accessKey} | base64 -d
kubectl -n shared-s3 get secrets minio-secrets -o jsonpath={.data.secretKey} | base64 -d
La première commande récupère l'<accesskey>
La seconde récupère le <secretkey>
kubectl -n shared-s3 exec -it s3-cluster-pool-0-0 -- bash
bash-5.1$ mc alias set local http://localhost:9000 <accesskey> <secretkey>
bash-5.1$ mc ls local/mlas3sourcebas/divers
[2025-09-23 11:35:25 UTC] 3.9KiB STANDARD GenArticles.yaml
bash-5.1$ mc stat local/mlas3sourcebas/divers/GenArticles.yaml
Name : GenArticles.yaml
Date : 2025-09-23 11:35:25 UTC
Size : 3.9 KiB
ETag : ef8e29f8b5f271a0ae4ca4d0a7d9a2fd
Type : file
Metadata :
X-Amz-Meta-Theme: actu
X-Amz-Meta-Kosmos-Uploaded-By: umla
Content-Type : text/plain
Via la Console S3
Accéder au bucket et au fichier. La colonne de droite affiche la liste des métadata : on y trouve les marquants.