1- # https://www.returngis.net/2020/06/autoescalar-tus-aplicaciones-en-kubernetes-con-keda/
1+ # Para entender KEDA primero necesitas saber cómo autoescalan los pods dentro de un clúster
2+
3+ # ## Ejemplo de autoescalado sin KEDA
4+ # Autoescalar tus aplicaciones en Kubernetes: https://www.returngis.net/2020/05/autoescalar-tus-aplicaciones-en-kubernetes/
5+ kubectl apply -f 04-cloud/00-aks/04-keda/manifests/autoscale-with-hpa.yml
6+ kubectl autoscale deployment web --cpu-percent=30 --min=1 --max=5
7+ kubectl get hpa --watch
8+
9+ ab -n 50000 -c 200 http://51.104.177.27/
10+
11+ kubectl describe hpa web
12+
13+ # KEDA
14+ # https://www.returngis.net/2020/06/autoescalar-tus-aplicaciones-en-kubernetes-con-keda/
15+
16+ # Variables
17+ RESOURCE_GROUP=" KEDA"
18+ AKS_NAME=" lemoncode-keda"
19+
20+ # Instalar Helm
21+ brew install helm
22+
23+ # Añadir el repo de KEDA
24+ helm repo add kedacore https://kedacore.github.io/charts
25+ helm repo update
26+
27+ # Creamos el grupo de recursos
28+ az group create -n ${RESOURCE_GROUP} -l ${LOCATION}
29+
30+ # Creamos un cluster
31+ az aks create -g ${RESOURCE_GROUP} -n ${AKS_NAME} \
32+ --node-count 1 --generate-ssh-keys
33+
34+ # Configuramos kubectl para comunicarnos con nuestro nuevo clúster
35+ az aks get-credentials -g ${RESOURCE_GROUP} -n ${AKS_NAME}
36+
37+ # Creamos un namespace llamado keda
38+ kubectl create namespace keda
39+
40+ # Instalamos los componentes dentro del namespace de KEDA
41+ helm install keda kedacore/keda --namespace keda
42+
43+ kubectl get pods -n keda --watch
44+
45+ # Crear un ScaledObject para el deployment
46+ # Vamos a basar el escalado en los mensajes que haya en una cola de mensajes.
47+ # Para ello nos apoyamos en un servicio llamado Azure Storage
48+
49+ # Creamos una cuenta de almacenamiento
50+ STORAGE_NAME=" boxoftasks"
51+ az storage account create --name $STORAGE_NAME --resource-group $RESOURCE_GROUP
52+ ACCOUNT_KEY=$( az storage account keys list --resource-group $RESOURCE_GROUP --account-name $STORAGE_NAME --query " [0].value" --output tsv)
53+
54+ # Creamos una cola dentro de la cuenta de almacenamiento
55+ az storage queue create --name " tasks" \
56+ --account-name $STORAGE_NAME \
57+ --account-key $ACCOUNT_KEY
58+
59+ # Recuperamos la cadena de conexión
60+ CONNECTION_STRING=$( az storage account show-connection-string --name $STORAGE_NAME --resource-group $RESOURCE_GROUP -o tsv)
61+
62+ # La guardamos en un secret de Kubernetes
63+ kubectl create secret generic storage-secret --from-literal=connection-string=$CONNECTION_STRING
64+
65+ kubectl apply -f 04-cloud/00-aks/04-keda/manifests/web-deployment.yml
66+ kubectl get pods --watch
67+
68+ # Ahora creamos un objeto del tipo ScaledObject, propios de KEDA
69+ kubectl apply -f 04-cloud/00-aks/04-keda/manifests/scaledObject.yml
70+ kubectl get scaledobject
71+ kubectl get hpa -w
72+
73+ # Para probar esto añadimos un montón de mensajes en la cola de mensajería, para que escale el despliegue
74+ while true ; do az storage message put --content " Hello from KEDA" --queue-name " tasks" --account-name $STORAGE_NAME --account-key $ACCOUNT_KEY ; done
75+
76+ # Ahora probamos lo mismo pero para que desescale
77+ az storage message clear --queue-name " tasks" --account-name $STORAGE_NAME --account-key $ACCOUNT_KEY
78+
79+ # En esta página puedes ver todos los scaled object disponibles: https://keda.sh/docs/2.0/scalers/
0 commit comments