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