Aller au contenu principal

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

info

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
info

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
info

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ù :

  • source correspond aux informations de connexion au cluster S3 à sauvegarder (configuré par défaut sur le cluster S3 technique)
  • backup correspond aux informations de connexion au cluster S3 externe où seront archivés les buckets.
    • schedule correspond à l'ordonnancement au format crontab (par défaut tous les jours à 5h)
    • bucketList correspond à la liste des buckets à sauvegarder. Laisser vide [] pour sauvegarder tous les buckets.
    • s3.endpoint correspond à l'URL externe
    • s3.pathcorrespond à la bucket créée sur le cluster S3 externe
    • s3.network.egress.ports: correspond à la liste des ports à ouvrir en egress pour acceder au cluster S3 externe
    • s3.accessKeyet s3.secretKey correspond aux crédentials d'acces au cluster S3 externe
    • s3.ttl correspond à la durée de rétention des sauvegardes sur le s3 externe (30 jours par défaut, 0 pas limite).
  • local.pvSize correspond à 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, entrer s3 dans le filtre situé sur la partie haute puis sélectionner s3-cluster-console du namespace shared-s3 (S3 Métier)

  • cliquer sur Show Configuration puis sur Edit Config puis sur Edit as YAML

  • modifier la ligne nginx.ingress.kubernetes.io/proxy-body-size pour être cohérente avec le besoin et les contraintes opérationnelles puis cliquer sur Save

  • 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 stat sur le fichier à vérifier
info

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.