Déployer sur Azure Kubernetes Service

Langue: Français
Cet article a été traduit de l'anglais par IA et peut contenir des erreurs. Vos commentaires nous aideront à l'améliorer.

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 :

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.

Élément suivant
Autres plateformes