Skip to content

Commit 10cf66e

Browse files
committed
Creados ejemplos de autoescalado del cluster y de nodos virtuales.
1 parent a4653b9 commit 10cf66e

File tree

9 files changed

+166
-44
lines changed

9 files changed

+166
-44
lines changed

04-cloud/00-aks/00-mi-primer-aks/00-crear-mi-primer-aks.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,4 @@ az aks scale -g ${RESOURCE_GROUP} -n ${AKS_NAME} --node-count 3
4242
kubectl get nodes
4343

4444
#Si eliminamos el grupo de recursos eliminaremos el clúster
45-
az group delete -n ${RESOURCE_GROUP}
45+
az group delete -n ${RESOURCE_GROUP} --yes --no-wait

04-cloud/00-aks/01-azure-dev-spaces/01-azure-dev-spaces.sh

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#https://docs.microsoft.com/en-us/visualstudio/containers/bridge-to-kubernetes?view=vs-2019
2+
#https://docs.microsoft.com/en-us/visualstudio/containers/overview-bridge-to-kubernetes?view=vs-2019
3+
4+
#Variables
5+
RESOURCE_GROUP="Bridge-To-Kubernetes"
6+
AKS_NAME="lemoncode-dev"
7+
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
2+
# Variables
3+
RESOURCE_GROUP="Cluster-Autoscaler"
4+
AKS_NAME="lemoncode-autoscaler"
5+
LOCATION="northeurope"
6+
7+
#Crear grupo de recursos
8+
az group create -n ${RESOURCE_GROUP} -l ${LOCATION}
9+
10+
#Crear cluster de AKS
11+
az aks create -g ${RESOURCE_GROUP} -n ${AKS_NAME} \
12+
--node-count 1 --generate-ssh-keys
13+
14+
# Recuperar el contexto para este clúster
15+
az aks get-credentials -n $AKS_NAME -g $RESOURCE_GROUP
16+
17+
#Desplegar una aplicación de ejemplo con más pods de los que caben en el clúster
18+
kubectl apply -f manifests/nginx-deployment.yml
19+
20+
#Uno se ejecutará pero el resto quedarán pendientes, porque no hay CPU suficiente para todos.
21+
kubectl get pods
22+
kubectl describe pods
23+
24+
#Escalado manual de nodos
25+
# az aks scale -g $RESOURCE_GROUP -n $AKS_NAME --node-count 3
26+
27+
#Habilitar autoscaler en el cluster
28+
az aks update \
29+
--resource-group $RESOURCE_GROUP \
30+
--name $AKS_NAME \
31+
--enable-cluster-autoscaler \
32+
--min-count 1 \
33+
--max-count 3
34+
35+
#Mientras esto se materializa puedes ver en el portal de Azure que el virtual machine scaleset está aumentando
36+
#el número de instancias. Este proceso puede llevar varios minutos ya que tiene que dar de alta las VMs
37+
38+
#Si comprobamos pasados unos minutos verás que los pods han sido alocados en nuevos nodos
39+
kubectl get po -o wide --watch
40+
41+
#Si eliminamos el grupo de recursos eliminaremos el clúster
42+
az group delete -n ${RESOURCE_GROUP} --yes --no-wait
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: nginx-deployment
5+
labels:
6+
app: nginx
7+
spec:
8+
replicas: 3
9+
selector:
10+
matchLabels:
11+
app: nginx
12+
template:
13+
metadata:
14+
labels:
15+
app: nginx
16+
spec:
17+
containers:
18+
- name: nginx
19+
image: nginx
20+
ports:
21+
- containerPort: 80
22+
resources:
23+
requests:
24+
memory: 1.5G
25+
cpu: 1

04-cloud/00-aks/02-virtual-kubelet/02-virtual-kubelet.sh

Lines changed: 0 additions & 35 deletions
This file was deleted.
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
#https://docs.microsoft.com/es-es/azure/aks/virtual-nodes-cli
2+
#Los nodos virtuales permiten la comunicación de red entre los pods que se ejecutan en Azure Container Instances (ACI)
3+
#y el clúster de AKS. Para proporcionar esta comunicación, se crea una subred de red virtual y se asignan permisos delegados.
4+
#Los nodos virtuales solo funcionan con clústeres de AKS creados mediante redes avanzadas (Azure CNI).
5+
#De manera predeterminada, los clústeres de AKS se crean con redes básicas (kubenet).
6+
7+
# Variables
8+
RESOURCE_GROUP="Virtual-Kubelet"
9+
AKS_NAME="lemoncode-kubelet"
10+
AKS_VNET="aks-vnet"
11+
AKS_SUBNET="aks-subnet"
12+
AKS_VKUBELET_SUBNET="aks-virtual-subnet"
13+
LOCATION="northeurope"
14+
15+
#Antes de hacer uso de los virtual kubelets es necesario tener registrado el proveedor Microsoft.ContainerInstance
16+
az provider list --query "[?contains(namespace,'Microsoft.ContainerInstance')]" -o table
17+
#Si no lo está puedes hacer uso de este comando
18+
az provider register --namespace Microsoft.ContainerInstance
19+
20+
#Crear un grupo de recursos
21+
az group create -n $RESOURCE_GROUP -l $LOCATION
22+
23+
#Crear una red privada virtual en Azure
24+
az network vnet create \
25+
--resource-group $RESOURCE_GROUP \
26+
--name $AKS_VNET \
27+
--address-prefixes 192.168.0.0/16 \
28+
--subnet-name $AKS_SUBNET \
29+
--subnet-prefix 192.168.1.0/24
30+
31+
#Ahora creamos una subred adicional para los nodos virtuales
32+
az network vnet subnet create \
33+
--resource-group $RESOURCE_GROUP \
34+
--vnet-name $AKS_VNET \
35+
--name $AKS_VKUBELET_SUBNET \
36+
--address-prefixes 192.168.2.0/24
37+
38+
#Crear un service principal
39+
az ad sp create-for-rbac --skip-assignment
40+
SP_ID="a53cffe7-cb13-40d5-aefd-e36c5569869c"
41+
SP_PASSWORD="qqbZ0z3l2Zac104_wvh0HBj_-KyTzFeVO~"
42+
43+
#Asignamos permisos a la red virtual para que el cluster pueda gestionarla
44+
VNET_ID=$(az network vnet show --resource-group $RESOURCE_GROUP --name $AKS_VNET --query id -o tsv)
45+
az role assignment create --assignee $SP_ID --scope $VNET_ID --role Contributor
46+
47+
#Obtenemos el ID de la subnet donde va a ir el cluster de AKS
48+
SUBNET_ID=$(az network vnet subnet show --resource-group $RESOURCE_GROUP --vnet-name $AKS_VNET --name $AKS_SUBNET --query id -o tsv)
49+
50+
#Creamos el cluster
51+
az aks create \
52+
--resource-group $RESOURCE_GROUP \
53+
--name $AKS_NAME \
54+
--node-count 1 \
55+
--network-plugin azure \
56+
--service-cidr 10.0.0.0/16 \
57+
--dns-service-ip 10.0.0.10 \
58+
--docker-bridge-address 172.17.0.1/16 \
59+
--vnet-subnet-id $SUBNET_ID \
60+
--service-principal $SP_ID \
61+
--client-secret $SP_PASSWORD
62+
63+
# Recuperar el contexto para este clúster
64+
az aks get-credentials -n $AKS_NAME -g $RESOURCE_GROUP
65+
66+
#Desplegamos una aplicación de ejemplo
67+
cd 04-cloud/00-aks/03-virtual-kubelet
68+
kubectl apply -f manifests/nginx-deployment.yml
69+
70+
kubectl get deploy
71+
kubectl get pods -o wide --watch
72+
kubectl describe pod NOMBRE_DE_POD_PENDIENTE
73+
#Algunos pods se quedarán pendientes porque no hay espacio suficiente para ellos.
74+
75+
#Habilita el complemento para los nodos virtuales
76+
az aks enable-addons \
77+
--resource-group $RESOURCE_GROUP \
78+
--name $AKS_NAME \
79+
--addons virtual-node \
80+
--subnet-name $AKS_VKUBELET_SUBNET
81+
82+
#Comprobamos que ahora tenemos un nodo virtual llamado virtual-node-aci-linux
83+
kubectl get nodes
84+
kubectl get pods -o wide
85+
86+
#Si escalamos más nuestro despliegue veremos que escala mucho más rápido que con el autoscaler del cluster
87+
kubectl scale --replicas=5 deployment/nginx-deployment
88+
kubectl get pods -o wide --watch
89+
90+
#Si eliminamos el grupo de recursos eliminaremos el clúster
91+
az group delete -n ${RESOURCE_GROUP} --yes --no-wait

0 commit comments

Comments
 (0)