Ejercicio: Configuración de grupos de nodos de acceso puntual con el escalador automático de clúster en un clúster de AKS
Los grupos de nodos de usuario puntuales permiten acceder a la capacidad de proceso de Azure sin usar a precios más bajos con compatibilidad con escenarios informáticos de alto rendimiento.
En el ejercicio anterior, ha creado un grupo de nodos de usuario estándar con el escalador automático de clúster para administrar la creación de nodos, y ha escalado el número de nodos de forma manual.
El siguiente paso es agregar un grupo de nodos de usuario puntual con escalado automático para reducir los costos operativos del clúster. El uso de clústeres varía en función de los recursos necesarios y no es predecible, por lo que se configuran reglas para capturar los picos y caídas. La carga de trabajo se implementa con la afinidad de nodo habilitada para que el pod esté programado en los nodos del grupo de nodos de acceso puntual.
Creación de un grupo de nodos de acceso puntual
Necesita crear un grupo de nodos independiente que admita el servicio de procesamiento por lotes. Es un grupo de nodos de acceso puntual que usa la directiva de expulsión Eliminar y un precio máximo de acceso puntual de -1.
Ejecute el mismo comando
az aks nodepool add
que en el ejercicio anterior para agregar un nuevo grupo de nodos de acceso puntual al clúster. Tendrá que cambiar el nombre del grupo de nodos y agregar algunos parámetros más para identificar este grupo de nodos como un grupo de nodos de acceso puntual.Escriba los valores siguientes para establecer los parámetros del grupo de nodos:
- Nombre:
batchprocpl2
- Prioridad:
Spot
- Directiva de expulsión:
Delete
- Precio máximo de acceso puntual:
-1
Ejecute el comando siguiente para crear el grupo de nodos de acceso puntual:
az aks nodepool add \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl2 \ --enable-cluster-autoscaler \ --max-count 3 \ --min-count 1 \ --priority Spot \ --eviction-policy Delete \ --spot-max-price -1 \ --node-vm-size Standard_DS2_v2 \ --no-wait
Recuerde que se puede producir un error en esta solicitud debido a las restricciones de capacidad de la ubicación que ha seleccionado.
- Nombre:
Ejecute el comando
az aks nodepool show
para mostrar los detalles del nuevo grupo de nodos de acceso puntual para el servicio de procesamiento por lotes:az aks nodepool show \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl2
Este es un ejemplo de la salida del comando.
{ "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 3, "enableAutoScaling": true, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl2", "maxCount": 3, "maxPods": 110, "minCount": 1, "mode": "User", "name": "batchprocpl2", "nodeImageVersion": "AKSUbuntu-1604-2020.06.10", "nodeLabels": { "kubernetes.azure.com/scalesetpriority": "spot" }, "nodeTaints": [ "kubernetes.azure.com/scalesetpriority=spot:NoSchedule" ], "orchestratorVersion": "1.17.9", "osDiskSizeGb": 128, "osType": "Linux", "provisioningState": "Creating", "proximityPlacementGroupId": null, "resourceGroup": "akscostsavinggrp", "scaleSetEvictionPolicy": "Delete", "scaleSetPriority": "Spot", "spotMaxPrice": -1.0, "tags": null, "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": { "maxSurge": null }, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null }
Algunos de los valores de este resultado son claramente distintos a los que ha visto en los grupos de nodos anteriores. Ahora se revisarán estos elementos:
El valor de propiedad
enableAutoScaling
se establece entrue
.Tanto el valor
maxCount
como el valorminCount
están establecidos.La propiedad
scaleSetEvictionPolicy
está establecida enDelete
.La propiedad
scaleSetPriority
está establecida enSpot
.La propiedad
spotMaxPrice
está establecida en-1
.nodeLabels
ynodeTaints
se aplican a este grupo de nodos. Estos valores se usan para programar cargas de trabajo en los nodos de este grupo de nodos.
Configuración de un espacio de nombres
Ejecute el comando
kubectl create namespace
para crear un espacio de nombres denominadocostsavings
para la aplicación. Usará este espacio de nombres para facilitar la selección de las cargas de trabajo.kubectl create namespace costsavings
Esta es la salida del comando anterior:
namespace/costsavings created
Programación de un pod con afinidad de nodo de grupo de acceso puntual
Para programar que un pod se ejecute en un nodo de acceso puntual, agregue una tolerancia y una afinidad al archivo de manifiesto de implementación del pod. Cuando la tolerancia y la afinidad de nodo se corresponden con la intolerancia y la etiqueta que se aplican a los nodos de acceso puntual, el pod se programa en estos nodos.
A los nodos de un grupo de nodos de acceso puntual se les asigna una intolerancia que equivale a kubernetes.azure.com/scalesetpriority=spot:NoSchedule
y una etiqueta que equivale a kubernetes.azure.com/scalesetpriority=spot
. Use la información de este par clave-valor en la sección tolerations
y affinity
del archivo de manifiesto YAML de las cargas de trabajo. Con el segundo grupo de procesamiento por lotes configurado como grupo de nodos de acceso puntual, ya puede crear un archivo de implementación para programar cargas de trabajo para que se ejecuten en él.
Cree un archivo de manifiesto para la implementación de Kubernetes denominado
spot-node-deployment.yaml
mediante el editor integrado:code spot-node-deployment.yaml
Sugerencia
En Cloud Shell se incluye un editor de archivos integrado. El editor de Cloud Shell admite características como el resaltado de lenguaje, la paleta de comandos y un explorador de archivos. Para la creación y edición sencillas de archivos, inicie el editor mediante la ejecución de
code .
en el terminal de Cloud Shell. Esta acción abre el editor con el directorio de trabajo activo establecido en el terminal. Para abrir el archivo de manifiesto directamente para su edición rápida, ejecutecode spot-node-deployment.yaml
. Este comando abre el editor sin el explorador de archivos.Pegue el texto siguiente en el archivo:
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent tolerations: - key: "kubernetes.azure.com/scalesetpriority" operator: "Equal" value: "spot" effect: "NoSchedule" affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: "kubernetes.azure.com/scalesetpriority" operator: In values: - "spot"
Presione Ctrl+S para guardar el archivo y, después, Ctr+Q para cerrar el editor.
Ejecute el comando
kubectl apply
para aplicar la configuración e implementarla en el espacio de nombrescostsavings
:kubectl apply \ --namespace costsavings \ -f spot-node-deployment.yaml
Esta es la salida del comando anterior:
pod/nginx created
Puede obtener más información sobre el pod en ejecución si usa la marca
-o wide
al ejecutar el comandokubectl get pods
. En este caso, quiere ver en qué nodo está programado el pod. Asegúrese de consultar los pods en el espacio de nombrescostsavings
.kubectl get pods --namespace costsavings -o wide
La salida debe ser similar a la siguiente:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 43s 10.244.3.3 aks-batchprocpl2-25254417-vmss000000 <none> <none>
Observe el nombre del nodo,
aks-batchprocpl2-25254417-vmss000000
. Este nodo forma parte del grupo de nodos de acceso puntualbatchprocpl2
que ha creado antes.