Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Virtual Nodes v2 es una pila mejorada de Virtual Nodes que amplía AKS más allá de los nodos basados en máquinas virtuales mediante la ejecución de pods en recursos de proceso sin servidor en Azure Container Instances (ACI). Las cargas de trabajo se transfieren a ACI en segundos sin tener que esperar a que se aprovisionen nuevos nodos, y solo pagas por la capacidad de proceso que utilizas mientras los pods están en ejecución. Los nodos virtuales v2 se entregan como una extensión de clúster de AKS.
Importante
Las características en versión preliminar de AKS están disponibles en régimen de autoservicio y mediante adhesión voluntaria. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y la garantía limitada. Las versiones preliminares de AKS cuentan con soporte parcial por parte del servicio al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:
Soportado
- Iniciar contenedores
- Hospedaje de alias
- Ganchos del ciclo de vida de los contenedores (
postStartypreStop) -
kubectl execcon argumentos - Volúmenes persistentes y PVC (solo Azure Files)
- Emparejamiento de VNet
- Salida controlada por NSG
- NAT Gateway para salida
- Contenedores confidenciales
- Hasta 200 pods por nodo virtual
Limitations
No se admiten las siguientes características:
- Contenedores de Windows
- DaemonSets
- Redirección de puertos
- IPv6
- Rangos de IP autorizados del servidor de API
- Superposición de Azure CNI
- Cilium o NPM como directiva de red
- Red virtual propia (BYO)
- Varias instancias de extensión por clúster
- Grupos en espera
Disponibilidad de recursos y límites de cuota
Virtual Nodes v2 está disponible en todas las regiones de la nube pública de Azure en las que Azure Container Instances admite SKU de VNet. Para obtener más información, consulte Disponibilidad de recursos y límites de cuota para ACI.
Prerequisites
- Azure CNI en modo node-subnet
- Calico o ninguna como directiva de red
- Identidad de carga de trabajo habilitada
- Al menos un grupo de nodos con un tamaño de máquina virtual de 4 o más vCPUs y 16 o más GiB de memoria. Cada nodo virtual reserva aproximadamente 3 vCPUs y 12 GiB de memoria en un nodo de AKS de tu clúster, así que asegúrate de que tus nodos dispongan de recursos suficientes.
- k8s-extension versión 1.8 o superior
-
kubectl1.30 o posterior
Registra el proveedor de recursos ACI:
az provider register --namespace Microsoft.ContainerInstance
Note
Ejecuta el siguiente comando si se produce un error en cualquier fase del proceso de habilitación de la extensión.
az provider register --namespace Microsoft.KubernetesConfig
Habilitar nodos virtuales v2
Instale la extensión:
az k8s-extension create \
--name <extension-name> \
--extension-type Microsoft.virtualnodes \
--cluster-name <cluster-name> \
--resource-group <resource-group> \
--cluster-type managedClusters \
--configuration-settings replicaCount=1 # specifies number of virtual nodes - optional
Configurar los valores de la extensión
Las operaciones de creación y actualización admiten los siguientes parámetros de configuración.
| Ajuste de configuración | Description |
|---|---|
replicaCount |
Número de nodos virtuales. |
admissionControllerReplicaCount |
Número de pods del controlador de admisión. |
podAnnotations |
Anotaciones añadidas a los pods de infraestructura como un mapa clave-valor. |
nodeSelector |
Etiquetas que seleccionan los nodos de AKS que hospedan los pods de infraestructura y del controlador de admisión. |
tolerations |
Tolerancias aplicadas a los pods de infraestructura y del controlador de admisión. |
affinity |
Configuraciones de afinidad adicionales fusionadas con las reglas de afinidad requeridas de AKS. |
zones |
Zonas de disponibilidad delimitadas por punto y coma donde se implementan los pods. |
nodeLabels |
Etiquetas añadidas a los nodos virtuales como pares key=value separados por comas. |
Las etiquetas kubernetes.io permitidas son:
beta.kubernetes.io/archbeta.kubernetes.io/instance-typebeta.kubernetes.io/osfailure-domain.beta.kubernetes.io/regionfailure-domain.beta.kubernetes.io/zonekubernetes.io/archkubernetes.io/hostnamekubernetes.io/osnode.kubernetes.io/instance-typetopology.kubernetes.io/regiontopology.kubernetes.io/zone
Comprueba la extensión:
az k8s-extension show \
--name <extension-name> \
--cluster-type managedClusters \
--cluster-name <cluster-name> \
--resource-group <resource-group>
Confirma que provisioningState es Succeeded. Puede permanecer en Pending durante unos minutos.
Comprueba que los pods de la extensión se estén ejecutando en el espacio de nombres vn-system:
kubectl get pods --namespace vn-system
Actualización de una extensión
az k8s-extension update --name <extension-name> --cluster-name <aks-cluster-name> --resource-group <aks-resource-group> --cluster-type managedClusters
Note
El parámetro --auto-upgrade-mode admite none, patch o compatible. Para fijar una versión específica de la extensión utilizando --version, configura --auto-upgrade-mode en none.
Acceso a Azure Container Registry
Para descargar imágenes de un Azure Container Registry (ACR) privado, utiliza la identidad administrada de la extensión o un secreto de descarga de imágenes de Kubernetes.
Utilizar la identidad administrada de la extensión
Conceda el AcrPull rol a la identidad administrada generada para la extensión. Este rol concede a todos los pods que se ejecutan en los nodos virtuales de la extensión acceso para extraer imágenes del registro sin configuración adicional del pod. Debe tener permiso para crear asignaciones de roles en el Registro.
Obtenga el ID de entidad de la identidad administrada de la extensión:
$extensionPrincipalId = az k8s-extension show --name <extension-name> --cluster-name <aks-cluster-name> --resource-group <aks-resource-group> --cluster-type managedClusters --query aksAssignedIdentity.principalId --output tsv
Obtenga el identificador de recurso del registro de contenedor:
$acrId = az acr show --name <acr-name> --resource-group <acr-resource-group> --query id --output tsv
Asigne el AcrPull rol a la identidad administrada de extensión en el ámbito del Registro:
az role assignment create --assignee-object-id $extensionPrincipalId --assignee-principal-type ServicePrincipal --role AcrPull --scope $acrId
Espere varios minutos para que la asignación de roles se propague antes de implementar cargas de trabajo que extraen imágenes del registro.
Uso de un secreto de extracción de imágenes
Para obtener instrucciones, consulte Secreto de extracción de Kubernetes para la autenticación de ACR.
Implementar una carga de trabajo en Virtual Nodes v2
Programe pods en nodos virtuales utilizando el selector de nodos virtualization: virtualnode2 y la tolerancia virtual-kubelet.io/provider:
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
spec:
replicas: 3
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- name: hello
image: mcr.microsoft.com/azuredocs/aci-helloworld
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: "1"
memory: 1Gi
nodeSelector:
virtualization: virtualnode2
kubernetes.io/os: linux
tolerations:
- key: virtual-kubelet.io/provider
operator: Exists
effect: NoSchedule
Guarde el manifiesto como demo.yaml y, a continuación, aplíquelo.
kubectl apply -f demo.yaml
Comprueba que los pods se estén ejecutando.
kubectl get pods -l app=demo -o wide
Desactivar Virtual Nodes v2
Warning
Cuando desactivas la extensión de nodos virtuales, el clúster de AKS se desconecta de los grupos de contenedores de Azure Container Instances subyacentes. Para evitar que queden instancias huérfanas que sigan ejecutándose y generen costes, elimina cualquier carga de trabajo que se esté ejecutando en el nodo virtual antes de desactivar la extensión.
Elimina la extensión y limpia los recursos de los nodos virtuales.
az k8s-extension delete \
--name <extension-name> \
--cluster-name <cluster-name> \
--resource-group <resource-group> \
--cluster-type managedClusters
kubectl delete node <virtual-node-name>