Idioma: Español
Esta guía le guía a través del despliegue del Servidor Autogestionado de ActivityInfo en Azure Kubernetes Service (AKS), respaldado por un disco administrado Premium SSD v2. Está dirigida a profesionales de TI que están familiarizados con Kubernetes y Microsoft Azure.
Utilice este despliegue cuando la latencia de red de un sistema de archivos compartido limite el rendimiento de la base de datos. Consulte Desplegar como una Aplicación Web de Azure para una opción más sencilla que utiliza Azure Files.
Antes de empezar
El Servidor Autogestionado de ActivityInfo almacena sus datos en una base de datos SQLite. Esto condiciona todo el despliegue:
- Ejecute una única réplica. El servidor está diseñado para escalar verticalmente, no horizontalmente: para soportar más usuarios concurrentes, dé al pod más núcleos de CPU y memoria en lugar de añadir réplicas.
- Utilice almacenamiento en bloque duradero. Un disco administrado Premium SSD v2 ofrece una latencia cercana a la de un disco local con IOPS y rendimiento configurables. Al ser un disco administrado conectado a la red, sus datos se replican en el backend de almacenamiento y sobreviven a la pérdida de un nodo: el disco se desacopla y se vuelve a acoplar al nodo donde se reprograma el pod.
Este tutorial finaliza con el acceso al servidor desde su propia máquina mediante reenvío de puertos. Poner el servidor a disposición de los usuarios a través de HTTPS se trata en los enlaces al final de esta guía.
Prerrequisitos
Instale la CLI de Azure y kubectl, y luego inicie sesión:
az login
Establecer variables
RESOURCE_GROUP=activityinfo-rg
LOCATION=westeurope
CLUSTER=activityinfo-aks
Crear un clúster
Cree un grupo de recursos y un clúster de AKS. El controlador CSI de Azure Disk, que aprovisiona los discos administrados, se instala de forma predeterminada. Los discos Premium SSD v2 son zonales, por lo que el grupo de nodos debe ejecutarse en una zona de disponibilidad; --zones 1 lo sitúa en la zona 1. Un nodo es suficiente, ya que ActivityInfo se ejecuta como un único pod. Añada un segundo nodo en la misma zona si desea que el pod se reprograme antes durante un fallo o una actualización del nodo.
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
Conecte kubectl al nuevo clúster:
az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER
Crear una clase de almacenamiento
Las clases de almacenamiento incorporadas utilizan tipos de disco más antiguos. Defina una clase de almacenamiento para Premium SSD v2. Guarde lo siguiente en 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 crea el disco en la misma zona que el pod que lo utiliza. reclaimPolicy: Retain conserva el disco si la petición se elimina, para que la base de datos no se pierda por accidente. Aumente DiskIOPSReadWrite y DiskMBpsReadWrite por encima de la línea de base gratuita de 3000 IOPS y 125 MB/s si su carga de trabajo lo necesita. Aplíquelo:
kubectl apply -f storageclass.yaml
Desplegar ActivityInfo
Guarde lo siguiente en activityinfo.yaml. Define un StatefulSet de una sola réplica que solicita un disco Premium SSD v2 de la clase de almacenamiento y lo monta en /data. El fsGroup en el contexto de seguridad hace que el disco montado sea escribible por el contenedor, que se ejecuta como un usuario no root. Un Service expone el contenedor en el puerto 80 dentro del clúster.
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
Aplique el manifiesto:
kubectl apply -f activityinfo.yaml
Acceder al servidor
Espere a que el pod esté listo y, a continuación, reenvíe un puerto local al Service:
kubectl rollout status statefulset/activityinfo
kubectl port-forward service/activityinfo 8081:80
Mientras se ejecuta el comando, abra http://localhost:8081, donde se le pedirá que cree la primera cuenta de usuario administrador. Pulse Ctrl+C para detener el reenvío.
Exponer el servidor a Internet
El reenvío de puertos solo permite acceder al servidor desde su propia máquina. Para que ActivityInfo esté disponible para los usuarios, exponga el Service y sírvalo a través de HTTPS. ActivityInfo puede obtener y renovar su propio certificado a través de Let's Encrypt, o puede terminar TLS en un controlador de entrada. Los siguientes recursos describen las opciones:
- Configuración SSL automatizada — Soporte integrado de Let's Encrypt de ActivityInfo.
- Modo proxy HTTPS — cuando TLS es terminado por un controlador de entrada o un proxy inverso.
- Usar un balanceador de carga público en AKS — exponer el servicio con una IP pública.
- Ingress NGINX administrado en AKS — el complemento de enrutamiento de aplicaciones.
Hacer copia de seguridad de la base de datos
El disco administrado sobrevive a la pérdida de un nodo, pero no protege contra desastres, como un incendio en un centro de datos. Tome instantáneas de volumen del disco con regularidad, o copie el contenido de /data a un almacenamiento duradero como Azure Blob Storage de forma programada. Mantenga las copias de seguridad fuera del clúster para poder restaurar tras una pérdida total del clúster.
Próximos pasos
Siga la guía de Configuración para configurar la Entrega de correo electrónico y el Inicio de sesión único (Single Sign-On) a través de la interfaz basada en web.