Langue: Français
Ce guide vous explique comment déployer le serveur auto-hébergé d'ActivityInfo sur Azure Kubernetes Service (AKS), en s'appuyant sur un disque managé Premium SSD v2. Il est destiné aux professionnels de l'informatique qui sont familiers avec Kubernetes et Microsoft Azure.
Utilisez ce déploiement lorsque la latence réseau d'un système de fichiers partagé limite les performances de la base de données. Consultez Déployer en tant qu'application Web Azure pour une option plus simple qui utilise Azure Files.
Avant de commencer
Le serveur auto-hébergé d'ActivityInfo stocke ses données dans une base de données SQLite. Cela conditionne l'ensemble du déploiement :
- Exécutez un seul réplica. Le serveur est conçu pour une mise à l'échelle verticale, et non horizontale : pour prendre en charge plus d'utilisateurs simultanés, donnez au pod plus de cœurs de processeur et de mémoire plutôt que d'ajouter des réplicas.
- Utilisez un stockage par blocs durable. Un disque managé Premium SSD v2 offre une latence proche de celle d'un disque local avec des IOPS et un débit configurables. Comme il s'agit d'un disque managé attaché au réseau, ses données sont répliquées dans le backend de stockage et survivent à la perte d'un nœud : le disque se détache et se rattache au nœud où le pod est replanifié.
Ce tutoriel se termine par l'accès au serveur depuis votre propre machine avec la redirection de port. Rendre le serveur disponible pour les utilisateurs via HTTPS est traité dans les liens à la fin de ce guide.
Prérequis
Installez Azure CLI et kubectl, puis connectez-vous :
az login
Définir les variables
RESOURCE_GROUP=activityinfo-rg
LOCATION=westeurope
CLUSTER=activityinfo-aks
Créer un cluster
Créez un groupe de ressources et un cluster AKS. Le pilote CSI Azure Disk, qui provisionne les disques managés, est installé par défaut. Les disques Premium SSD v2 sont zonaux, le pool de nœuds doit donc s'exécuter dans une zone de disponibilité ; --zones 1 le place dans la zone 1. Un seul nœud est suffisant, car ActivityInfo s'exécute en tant que pod unique. Ajoutez un deuxième nœud dans la même zone si vous souhaitez que le pod soit replanifié plus rapidement en cas de défaillance ou de mise à niveau d'un nœud.
az group create --name $RESOURCE_GROUP --location $LOCATION
az aks create \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER \
--node-vm-size Standard_D4s_v5 \
--node-count 1 \
--zones 1 \
--generate-ssh-keys
Connectez kubectl au nouveau cluster :
az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER
Créer une classe de stockage
Les classes de stockage intégrées utilisent des types de disques plus anciens. Définissez une classe de stockage pour Premium SSD v2. Enregistrez ce qui suit dans storageclass.yaml :
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: activityinfo-premium-v2
provisioner: disk.csi.azure.com
parameters:
skuName: PremiumV2_LRS
cachingMode: None
DiskIOPSReadWrite: "3000"
DiskMBpsReadWrite: "125"
reclaimPolicy: Retain
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
WaitForFirstConsumer crée le disque dans la même zone que le pod qui l'utilise. reclaimPolicy: Retain conserve le disque si la revendication est supprimée, afin que la base de données ne soit pas perdue accidentellement. Augmentez DiskIOPSReadWrite et DiskMBpsReadWrite au-dessus de la ligne de base gratuite de 3000 IOPS et 125 Mo/s si votre charge de travail en a besoin. Appliquez-le :
kubectl apply -f storageclass.yaml
Déployer ActivityInfo
Enregistrez ce qui suit dans activityinfo.yaml. Il définit un StatefulSet à réplica unique qui demande un disque Premium SSD v2 à la classe de stockage et le monte sur /data. Le fsGroup dans le contexte de sécurité rend le disque monté accessible en écriture par le conteneur, qui s'exécute en tant qu'utilisateur non root. Un Service expose le conteneur sur le port 80 au sein du cluster.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: activityinfo
spec:
serviceName: activityinfo
replicas: 1
selector:
matchLabels:
app: activityinfo
template:
metadata:
labels:
app: activityinfo
spec:
securityContext:
fsGroup: 1000
containers:
- name: activityinfo
image: activityinfo/activityinfo:5.0.0
ports:
- containerPort: 8081
env:
- name: ACTIVITYINFO_DATA_DATA_DIRECTORY
value: /data
volumeMounts:
- name: data
mountPath: /data
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes:
- ReadWriteOnce
storageClassName: activityinfo-premium-v2
resources:
requests:
storage: 100Gi
---
apiVersion: v1
kind: Service
metadata:
name: activityinfo
spec:
selector:
app: activityinfo
ports:
- port: 80
targetPort: 8081
Appliquez le manifeste :
kubectl apply -f activityinfo.yaml
Accéder au serveur
Attendez que le pod soit prêt, puis redirigez un port local vers le Service :
kubectl rollout status statefulset/activityinfo
kubectl port-forward service/activityinfo 8081:80
Pendant que la commande s'exécute, ouvrez http://localhost:8081, où vous serez invité à créer le premier compte utilisateur administrateur. Appuyez sur Ctrl+C pour arrêter la redirection.
Exposer le serveur à Internet
La redirection de port permet uniquement d'atteindre le serveur depuis votre propre machine. Pour rendre ActivityInfo disponible pour les utilisateurs, exposez le Service et servez-le via HTTPS. ActivityInfo peut obtenir et renouveler son propre certificat via Let's Encrypt, ou vous pouvez terminer la connexion TLS au niveau d'un contrôleur d'entrée (ingress controller). Les ressources suivantes décrivent les options :
- Configuration SSL automatisée — le support Let's Encrypt intégré d'ActivityInfo.
- Mode proxy HTTPS — lorsque la connexion TLS est terminée par un contrôleur d'entrée ou un proxy inverse.
- Utiliser un équilibreur de charge public dans AKS — exposer le service avec une adresse IP publique.
- Ingress NGINX managé dans AKS — le module complémentaire de routage d'application.
Sauvegarder la base de données
Le disque managé survit à la perte d'un nœud, mais il ne protège pas contre les sinistres, comme un incendie de centre de données. Prenez régulièrement des instantanés de volume du disque, ou copiez le contenu de /data vers un stockage durable tel que Azure Blob Storage selon un calendrier défini. Conservez les sauvegardes en dehors du cluster afin de pouvoir restaurer après une perte totale du cluster.
Prochaines étapes
Suivez le guide de Configuration pour configurer la Livraison des e-mails et l'Authentification unique via l'interface Web.