Ejercicio: Implementación de un clúster de Azure Kubernetes Service con Azure CNI

Completado

Nota:

Este ejercicio es opcional. Si le interesa completar este ejercicio, deberá crear una suscripción de Azure antes de empezar. Si no tiene una cuenta de Azure o no quiere crear una en este momento, puede leer las instrucciones para comprender la información que se está presentando.

En este ejercicio, implementará redes virtuales, subredes e identidades y, a continuación, implementará un clúster de Azure Kubernetes Service (AKS) mediante el complemento Azure Container Networking Interface (CNI).

Se ha acercado al departamento de TI de la empresa y ha proporcionado la información recopilada sobre los requisitos de la aplicación y el dimensionamiento de las máquinas virtuales (VM) y la red. El departamento de TI le ha proporcionado algunos intervalos de direcciones de red que puede usar para el clúster.

En la tabla siguiente se enumeran los requisitos y las direcciones IP proporcionadas por el departamento de TI:

Elemento Descripción Direcciones IP
AKS subnet Direcciones IP para los nodos y pods del clúster. Se necesitan 248 direcciones IP utilizables. 10.150.20.0/24
Subred de servicio de Kubernetes Direcciones IP usadas dentro del clúster para los servicios de Kubernetes. No debe estar en conflicto con otras redes virtuales o redes locales. 10.240.0.0/24
Dirección IP del servicio del sistema de nombres de dominio (DNS) Deben estar en la subred del servicio de Kubernetes, pero no puede ser la primera dirección IP del intervalo disponible. 10.240.0.10
  • Para la subred de AKS, ha determinado que necesita 248 direcciones IP utilizables. El departamento de TI ha asignado la red 10.150.20.0/24, que proporciona 251 direcciones IP utilizables después de tener en cuenta las cinco que Azure reserva en cada subred.
  • La subred del servicio Kubernetes es un grupo de direcciones IP que no se usa en ninguna otra red virtual de Azure y no entra en conflicto con ningún intervalo de red local. Este intervalo de direcciones solo se usa dentro del clúster. El departamento de TI le ha indicado que debe usar 10.240.0.0/24.
  • La dirección IP del servicio DNS es una única dirección IP dentro del intervalo de direcciones de la subred de servicio de Kubernetes, pero no puede ser la primera dirección IP de ese intervalo. Ha decidido usar 10.240.0.10 como dirección IP de DNS.

Creación de la red virtual y la subred

Para este ejercicio, creará una red virtual y una subred. En un entorno real, es posible que tenga un equipo en el departamento de TI responsable de administrar las redes y que pueda crear estos recursos de forma automática.

  1. Inicie Azure Cloud Shell.

  2. Si aún no ha iniciado sesión en Azure, inicie sesión en su cuenta de Azure con el comando az login.

    az login
    
  3. Elija una región de Azure cercana, por ejemplo eastus. Almacene el valor en una variable de entorno para poder usarlo en el resto del ejercicio.

    AKSLocation=eastus
    
  4. Cree un grupo de recursos, AKSLearn, para almacenar los recursos de este ejercicio mediante el comando az group create.

    az group create --location $AKSLocation --name AKSLearn
    
  5. Cree una red virtual, AKSVirtualNetwork, con el comando az network vnet create.

    az network vnet create \
        --name AKSVirtualNetwork \
        --resource-group AKSLearn \
        --address-prefixes 10.150.0.0/16  \
        --location $AKSLocation
    
  6. Cree una subred, AKSSubnet, con el az network vnet subnet create comando y especifique el intervalo de direcciones proporcionado por el departamento de TI.

    az network vnet subnet create \
        --resource-group AKSLearn \
        --vnet-name AKSVirtualNetwork \
        --name AKSSubnet \
        --address-prefixes 10.150.20.0/24
    

Creación de una identidad administrada de Azure

Debe crear una identidad administrada de Azure que AKS usará para acceder a los recursos de la suscripción de Azure. Los dos comandos siguientes crean una identidad administrada de Azure y, a continuación, almacenan su valor de identificador único en una variable de entorno para su uso posterior.

  1. Cree una identidad administrada de Azure, AKSIdentity, mediante el comando az identity create.

    az identity create \
        --name AKSIdentity \
        --resource-group AKSLearn
    
  2. Obtenga el id. de la identidad administrada mediante el comando az identity show y almacénelo en una variable de entorno, identityId, para usarlo en comandos posteriores.

    identityId=$(az identity show \
        --name AKSIdentity \
        --resource-group AKSLearn \
        --query id \
        --output tsv)
    

Creación de un clúster de AKS

  1. Obtenga el valor del id. de recurso de la subred mediante el comando az network vnet subnet list y almacénelo en una variable de entorno, subnetId, para usarlo en comandos posteriores.

    subnetId=$(az network vnet subnet list \
        --vnet-name AKSVirtualNetwork \
        --resource-group AKSLearn \
        --query "[?name=='AKSSubnet'].id" \
        --output tsv)
    
  2. Cree un clúster de AKS, AKSCluster, con el comando az aks create.

    az aks create \
        --name AKSCluster \
        --resource-group AKSLearn \
        --location $AKSLocation \
        --network-plugin azure \
        --vnet-subnet-id $subnetId \
        --service-cidr 10.240.0.0/24 \
        --dns-service-ip 10.240.0.10 \
        --generate-ssh-keys \
        --enable-managed-identity \
        --assign-identity $identityId \
        --node-vm-size  Standard_F8s_v2 \
        --node-count 3
    

    En la tabla siguiente se describen los parámetros usados en el comando az aks create:

    Parámetro Descripción
    --name Nombre del clúster que se está creando.
    --resource-group Grupo de recursos en el que se debe crear el clúster.
    --location Región de Azure en la que se debe crear el clúster.
    --network-plugin Especifica qué complemento de red se va a usar.
    --vnet-subnet-id Especifica el id. de recurso de la subred que se va a usar.
    --service-cidr Especifica el intervalo de direcciones del servicio de Kubernetes que se va a usar.
    --dns-service-ip Especifica la dirección IP DNS que se va a usar.
    --generate-ssh-keys Crea un conjunto de claves SSH que se usan para proteger los nodos.
    --enable-managed-identity Habilita el uso de la identidad administrada de Azure para acceder a los recursos de la suscripción de Azure.
    --assign-identity Especifica el valor de id. de la identidad administrada de Azure que se va a usar.
    --node-vm-size Especifica el tamaño de máquina virtual que se va a usar.
    --node-count Especifica el número de nodos que se van a crear.
  3. Una vez que el clúster se implemente correctamente, compruebe los detalles del grupo de nodos mediante el comando az aks nodepool list.

    az aks nodepool list \
        --cluster-name AKSCluster \
        --resource-group AKSLearn \
        --output table
    

    El resultado debería ser similar al ejemplo siguiente:

    Name       OsType    VmSize           Count    MaxPods    ProvisioningState    Mode
    ---------  --------  ---------------  -------  ---------  -------------------  ------
    nodepool1  Linux     Standard_F8s_v2  3        30         Succeeded            System
    

    En la salida, puede ver que hay tres nodos de tipo Standard_F8s_v2 y un valor MaxPods de 30, y que el modo del grupo de nodos es System.

Confirmación del uso de direcciones IP para el clúster

  • Mediante el comando az network vnet subnet list, compruebe cuántas direcciones IP usa el clúster.

    az network vnet subnet list \
        --vnet-name AKSVirtualNetwork \
        --resource-group AKSLearn \
        --query "[].ipConfigurations.length(@)" \
        --output table
    

    Este comando usa una cadena de consulta JMESPath para determinar qué cantidad de ipConfigurations se han definido en la subred. la salida máxima debe ser 93. Ha implementado tres nodos para empezar, por lo que cada nodo tiene una dirección IP. Ha usar el valor predeterminado de 30 para el número máximo de pods, por lo que cada nodo tiene 30 direcciones IP asignadas previamente para que los pods las usen. El número total de direcciones IP asignadas hasta ahora es 3 x nodes + (30 pods * 3 nodes) = 93. Sin embargo, algunas direcciones están reservadas por lo que la salida podría ser menor.

Adición de un nodo adicional al clúster

Veamos cómo se ve afectado el uso de la dirección IP al escalar el clúster y agregar un nodo más.

  1. Escale verticalmente el clúster y agregue un nodo más mediante el comando az aks scale.

    az aks scale \
        --name AKSCluster \
        --resource-group AKSLearn \
        --node-count=4
    
  2. Una vez que se complete correctamente el comando, confirme los nuevos detalles del grupo de nodos mediante el comando az aks nodepool list.

    az aks nodepool list \
        --cluster-name AKSCluster \
        --resource-group AKSLearn \
        --output table
    

    La salida debe ser similar a la del ejemplo siguiente, en la que se muestra que ahora tiene cuatro nodos.

    Name       OsType    VmSize           Count    MaxPods    ProvisioningState    Mode
    ---------  --------  ---------------  -------  ---------  -------------------  ------
    nodepool1  Linux     Standard_F8s_v2  4        30         Succeeded            System
    
  3. Mediante el comando az network vnet subnet list, compruebe cuántas direcciones IP usa ahora el clúster.

    az network vnet subnet list \
        --vnet-name AKSVirtualNetwork \
        --resource-group AKSLearn \
        --query "[].ipConfigurations.length(@)" \
        --output table
    

    En esta ocasión, el resultado máximo es 124, 31 más que la última vez. Es una dirección IP más para el nuevo nodo, más otras 30 direcciones IP asignadas previamente para los pods que se ejecutan en ese nodo. Sin embargo, algunas direcciones están reservadas por lo que la salida podría ser menor.