L’entreprise
3BMeteo intervient depuis 15 ans dans le secteur de la météorologie professionnelle. Les services de 3BMeteo sont conçus pour répondre aux exigences des clients à la pointe de la technologie. L'équipe est composée de météorologues professionnels et de développeurs actifs 7 jours sur 7 sur le développement de nouvelles mises à jour d'applications et de services, ainsi que de modélisateurs qui optimisent les systèmes de prévision et créent de nouveaux scénarios physiques et mathématiques.
L'une des priorités de l'entreprise est la relation avec le public, dirigée par un département média spécifique qui travaille quotidiennement avec les plus importantes radios, chaînes de télévision et journaux italiens. La salle des opérations fournit des conseils professionnels pour différents secteurs industriels et représente aujourd'hui le plus grand centre d'opérations d'Italie.
Regardez la vidéo
Avantages
La solution comportait un certain nombre d'améliorations, à commencer par la résilience accrue qui est implicite dans une infrastructure active/active telle que celle qui a été mise en place. Le temps de disponibilité du service est garanti grâce à la technologie de pointe fournie dans les data centers et aux accords de niveau de service (SLA) établis concernant la continuité du service contre tout type d'événement indésirable.
Parallèlement à la solution Cloud Dédié, une refonte totale de l'application 3BMeteo a également été réalisée, afin de tirer le meilleur parti de l'infrastructure distribuée active sur plusieurs nœuds simultanément et, par conséquent, de la puissance de calcul maximale, ainsi que de la tolérance aux pannes susmentionnée.
Grâce au type de Cloud dédié utilisé, l'ancienne architecture applicative (monolithique) est en fait devenue une architecture de micro-services plus agile et plus performante qui a permis :
- une évolution plus rapide de tous les services internes et externes ;
- la migration de parties fondamentales de ces services, telles que l'équilibrage de charge, l'authentification (Zero Trust) et la logique d'application dans Edge, qui sont désormais essentielles car capables de donner plus de flexibilité, d'évolutivité et de sécurité à un système et à un environnement en croissance constante comme 3BMeteo.
Un autre aspect pertinent est l'accent mis sur le « green IT » (le numérique responsable) : tout d'abord, la proximité du siège de 3BMeteo avec le Global Cloud Data Center d'Aruba, l'un des trois sites où se trouve l'infrastructure de 3BMeteo, qui a permis une connexion directe plus efficace et plus performante, faisant des deux entités une parfaite adéquation.
Il y a ensuite l’avantage de s’appuyer sur un fournisseur qui fournit ses services en utilisant des énergies renouvelables. Aruba est en effet certifié GO, c'est-à-dire qu'elle utilise de l'énergie avec Garantie d'Origine provenant de sources renouvelables et est en mesure de produire davantage d'énergie grâce à la présence d'une centrale hydroélectrique et de systèmes photovoltaïques au sein du campus technologique.
Évolutions futures
3BMeteo essaie toujours de sortir de la zone de confort et d'expérimenter de nouveaux services et technologies avec une équipe toujours active à la recherche de nouvelles méthodes pour maximiser les opportunités des évolutions technologiques. Après avoir atteint le niveau le plus élevé en termes de modélisation Cloud sur des clusters distribués, le prochain défi consiste à faire passer la parallélisation des aspects de la modélisation à l'étape suivante. L'évolution de certaines parties de l'infrastructure vers des processeurs graphiques dédiés (GPU, Graphic Processor Unit) est actuellement en cours d'évaluation.
2. Scarica il kubeconfig file per interagire con il cluster tramite kubectl.
3. Imposta il contesto kubectl per utilizzare il cluster.
Setup Bucket S3 su Aruba Cloud Object Storage
1. Inizializzazione Storage Account
Per la demo è stato creato un account demo-backup all'interno della regione IT3 di Aruba Cloud.
Dall'interfaccia utente recupera le seguenti informazioni:
- Endpoint URL;
- Secret Key.
2. Test Connessione S3 con Cloud Object Storage
export AWS_ACCESS_KEY_ID=demo-backup
export AWS_SECRET_ACCESS_KEY=
export AWS_DEFAULT_REGION=R3-IT
aws s3 ls --endpoint-url http://r3-it.storage.cloud.it
3. Crea un S3 Bucket su Aruba Cloud Object Storage
aws s3api create-bucket --bucket demo-backup --endpoint-url http://r3-it.storage.cloud.it
Deploy Velero
Configurazione Helm chart Values
Al momento della compilazione di questo tutorial il servizio Aruba Managed Kubernetes non supporta nativamente CSI Snapshot.
Assicurati che nell'installazione di Velero siano configurate correttamente le seguenti opzioni:
- snapshotsEnabled: false
- deployNodeAgent: true
Crea un file values yaml per inizializzare le variabili del Velero Helm chart:
---
credentials:
useSecret: true
secretContents:
cloud: |
[default]
aws_access_key_id=demo-backup
aws_secret_access_key=
snapshotsEnabled: false
deployNodeAgent: true
configuration:
defaultVolumesToFsBackup: true
backupStorageLocation:
- name: default
provider: aws
bucket: demo-backup
config:
region: R3-IT
s3ForcePathStyle: "true"
s3Url: http://r3-it.storage.cloud.it
volumeSnapshotLocation: []
initContainers:
- name: velero-plugin-for-aws
image: velero/velero-plugin-for-aws:v1.6.0
volumeMounts:
- mountPath: /target
name: plugins
metrics:
enabled: true
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
Velero Deploy in Aruba Managed Kubernetes
helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts
helm repo update
helm upgrade --install velero vmware-tanzu/velero --version 5.1.3 --namespace velero --create-namespace -f helm/velero-values.yaml
Verifica Deployment
velero get backup-locations
Risultato atteso per verificare che l'inizializzazione è avvenuta con successo è Phase = Available
| PROVIDER |
BUCKET/PREFIX |
PHASE |
LAST VALIDATED |
ACCESS MODE |
ACCESS MODE |
DEFAULT |
| default |
aws |
demo-backup |
Available |
2025-04-09 10:32:55 +0200 CEST |
ReadWrite |
true |
Deploy Jupyterhub
Configurazione Helm chart Values
Crea un file values yaml per inizializzare le variabili del Jupyterhub Helm chart:
hub:
db:
type: sqlite-memory
singleuser:
storage:
capacity: 10Gi
type: dynamic
dynamic:
storageClass: "cinder"
pvcNameTemplate: claim-{username}
volumeNameTemplate: volume-{username}
storageAccessModes: [ReadWriteOnce]
extraVolumes: []
extraVolumeMounts: []
Viene utilizzata la storageClass cinder per salvare in modo persistente i dati memorizzati nella workspace di ciascun utente attraverso la definizione singleuser.storage.type = dynamic.
Si utilizza una configurazione di hub con db in-memory, poiché ci interessa salvare lo stato solo delle workspace di ogni utente, e non le configurazioni del hub.
Jupyterhub Deploy in Aruba Managed Kubernetes
helm repo add jupyterhub https://jupyterhub.github.io/helm-chart/
helm repo update
helm upgrade --install jupyterhub -n jupyterhub --create-namespace jupyterhub/jupyterhub --version 4.1.1-0.dev.git.6981.ha6872850 -f helm/jupyterhub-values.yaml
Verifica Deployment
Verifica che i pod dell'applicazione Jupyterhub siano in stato Running: Il deploy di Jupyterhub con StorageClass "cinder" aggancia dinamicamente due volumi su Aruba Managed Kubernetes, come dimostrato nell'immagine sottostante.
kubectl get pods -n jupyterhub
Risultato atteso:
```bash
NAME READY STATUS RESTARTS AGE
continuous-image-puller-6cbpd 1/1 Running 0 100s
continuous-image-puller-fq4qm 1/1 Running 0 100s
continuous-image-puller-gf2kx 1/1 Running 0 100s
continuous-image-puller-gj9xc 1/1 Running 0 100s
hub-89fb546c8-hmbqx 1/1 Running 0 100s
proxy-655b7b4cc5-c9xzz 1/1 Running 0 100s
user-scheduler-7f44675fdb-5v6tf 1/1 Running 0 99s
user-scheduler-7f44675fdb-s8gww 1/1 Running 0 100s
Per accedere alla console Jupyterhub apri una connessione locale mediante il seguente comando
kubectl port-forward svc/proxy-public 8080:80 --namespace jupyterhub
Tutti gli script o dati che hai nella home utente sono persistenti grazie ad Aruba Cloud Block Storage integrato con Aruba Managed Kubernetes.
Test sull'ambiente
pip install pandas
pip install matplotlib
- Entra nel workspace utente in Jupyterhub ed installa le seguenti dipendenze:
- Carica lo script nel workspace ed eseguilo.
Backup dei volumi Jupyterhub
1. Creazione dell'oggetto Velero Backup
apiVersion: velero.io/v1
kind: Backup
metadata:
name: jupyterhub-backup
namespace: velero
spec:
includedNamespaces:
- jupyterhub
includedResources:
- "*"
defaultVolumesToFsBackup: true
storageLocation: default
ttl: 168h # Retain backup for 7 days
Deploy dell'oggetto Velero Backup
kubectl apply -f k8s/VeleroBackup.yml
Verifica lo stato del Backup
velero get backup
Risultato atteso
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
jupyterhub-backup Completed 0 0 2025-04-08 12:53:33 +0200 CEST 6d default
Effettua un restore dei volumi Jupyterhub
1. Creazione dell'oggetto Velero Restore
apiVersion: velero.io/v1
kind: Restore
metadata:
name: jupyterhub-restore
namespace: velero
spec:
backupName: jupyterhub-backup
restorePVs: true
2. Deploy dell'oggetto Velero Restore
kubectl apply -f k8s/VeleroRestore.yml
3. Verifica lo stato del Restore
velero get restore
Risultato atteso
NAME STATUS ERRORS WARNINGS CREATED EXPIRES BACKUP NAME SELECTOR
jupyterhub-restore Completed 0 0 2025-04-09 11:20:45 +0200 CEST 29d jupyterhub-backup