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