Backup/restore per applicazioni stateful installate su Aruba Managed Kubernetes

Solución de Dedicated Cloud distribuido para el mayor portal meteorológico de Italia.

La empresa

3BMeteo opera en el sector de la meteorología profesional desde hace 15 años. Los servicios de 3BMeteo están diseñados para satisfacer las demandas de una clientela innovadora. El equipo está compuesto por meteorólogos profesionales y desarrolladores que trabajan 7 días a la semana en el desarrollo de nuevas actualizaciones de aplicaciones y servicios. Además, cuenta con modeladores que se encargan de optimizar los sistemas de previsión y crear nuevos escenarios físico-matemáticos.

Entre las prioridades de la empresa está la relación con el público, coordinada por un departamento de medios específico, activo diariamente a través de las principales radios italianas, canales de televisión y periódicos. La sala operativa ofrece asesoramiento profesional a diversos sectores industriales y actualmente es el centro operativo más grande de Italia.

Ventajas

La solución ha supuesto una serie de mejoras, comenzando por la mayor resiliencia propia de una infraestructura active/active como la implementada. El tiempo de actividad del servicio está garantizado gracias a la tecnología de última generación utilizada en los Data Centers y a los SLA que aseguran la continuidad del servicio frente a cualquier evento imprevisto.

Al mismo tiempo que se implementaba la solución de Dedicated Cloud, se efectuó una completa refactorización de las aplicaciones de 3BMeteo, con el fin de aprovechar al máximo la infraestructura distribuida y operativa en varios nodos al mismo tiempo, maximizando así la potencia de cálculo y la tolerancia a fallos previamente mencionada.

Gracias al tipo de Cloud Dedicado utilizado, la antigua arquitectura de la aplicación (monolítica) se convirtió en una arquitectura más ágil y eficiente basada en microservicios, lo que permitió:

  • Una evolución más rápida de todos los servicios internos y externos.
  • La migración de partes fundamentales de dichos servicios, como el Load Balancing, la Autenticación (Zero Trust) y la Application Logic in Edge, que son esenciales porque ofrecen mayor flexibilidad, escalabilidad y seguridad a un sistema en constante crecimiento como 3BMeteo.


Otro aspecto importante es la gran atención a la parte ecológica: en primer lugar, la proximidad de la sede de 3BMeteo al Global Cloud Data Center de Aruba, una de las tres ubicaciones donde se encuentra la infraestructura de 3BMeteo, que ha permitido una conexión directa más eficiente y de mayor rendimiento, convirtiendo de hecho a ambas entidades en un binomio perfecto.

A esto se suma la ventaja de contar con un proveedor que suministra sus servicios utilizando energía renovable: Aruba, de hecho, está certificada con GO, lo que significa que emplea energía con Garantía de Origen de fuentes renovables y, además, puede generar energía adicional gracias a la presencia de una central hidroeléctrica y paneles solares dentro de su campus tecnológico.

Accesso ad Aruba Managed Kubernetes


Configurazione del Cluster Aruba

1. Accedi al portale Aruba Cloud e apri il tuo ambiente Kubernetes.

 

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.

  • per questo motivo è necessario utilizzare la modalità di File Backup System di Velero.

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

Empieza ahora con Aruba Cloud

¿Quieres probar Aruba Cloud?

Solo necesitas unos minutos para empezar.

Crea una cuenta