Implementación de un clúster de Kubernetes con el motor de AKS en Azure Stack Hub

Puede implementar un clúster de Kubernetes en Azure Stack Hub desde una máquina virtual cliente que ejecuta el motor de AKS. En este artículo, veremos cómo escribir una especificación de clúster, implementar un clúster con el archivo apimodel.json y comprobar el clúster mediante la implementación de MySQL con Helm.

Definición de una especificación de clúster

Puede indicar una especificación de clúster en un archivo de documento mediante el formato JSON denominado modelo de API. El motor de AKS usa una especificación de clúster en el modelo de API para crear el clúster.

Puede encontrar ejemplos del modelo de API para su número de versión del motor de AKS y sistema operativo para las versiones recientes en Motor de AKS y la asignación de imagen correspondiente.

  1. Busque el número de versión del motor de AKS, por ejemplo, v.0.63.0, en la tabla.
  2. En la tabla de ejemplos del modelo de API, seleccione y abra el vínculo del sistema operativo.
  3. Seleccione Raw. Puede usar la dirección URL de las instrucciones siguientes.

Una dirección URL al modelo de API puede tener el siguiente aspecto:

https://raw.githubusercontent.com/Azure/aks-engine-azurestack/master/examples/azure-stack/kubernetes-azurestack.json

Para cada uno de los ejemplos siguientes, reemplace <URL for the API Model> por la dirección URL.

Actualización del modelo de API

En esta sección se examina la creación de un modelo de API para el clúster.

  1. Comience por utilizar un archivo de modelo de API de Azure Stack Hub para Linux o Windows. En la máquina donde ha instalado el motor de AKS, ejecute:

    curl -o kubernetes-azurestack.json <URL for the API Model>
    

    Nota

    Si está desconectado, puede descargar el archivo y copiarlo manualmente en la máquina desconectada en la que piensa editarlo. Puede copiar el archivo en la máquina Linux con herramientas como PuTTY o WinSCP.

  2. Para abrir el modelo de API en un editor, puede usar nano:

    nano ./kubernetes-azurestack.json
    

    Nota

    Si no tiene nano instalado, puede instalar nano en Ubuntu: sudo apt-get install nano.

  3. En el archivo kubernetes-azurestack.json , busque orchestratorRelease y orchestratorVersion. Seleccione una de las versiones de Kubernetes compatibles; puede encontrar la tabla de versiones en las notas de la versión. Especifique orchestratorRelease como x.xx y orchestratorVersion como x.xx.x. Para obtener una lista de las versiones actuales, consulte Versiones admitidas del motor de AKS.

  4. Busque customCloudProfile y proporcione la dirección URL al portal del inquilino. Por ejemplo, https://portal.local.azurestack.external.

  5. Agregue "identitySystem":"adfs" si utiliza AD FS. Por ejemplo,

        "customCloudProfile": {
            "portalURL": "https://portal.local.azurestack.external",
            "identitySystem": "adfs"
        },
    

    Nota

    Si usa Microsoft Entra id. del sistema de identidades, no es necesario agregar el campo identitySystem.

  6. En masterProfile, establezca los campos siguientes:

    Campo Descripción
    dnsPrefix Escriba una cadena única que sirva para identificar el nombre de host de las máquinas virtuales. Por ejemplo, un nombre basado en el nombre del grupo de recursos.
    count Escriba el número de maestros que desea para la implementación. El mínimo para una implementación de alta disponibilidad es tres, pero se permite uno para implementaciones que no son de alta disponibilidad.
    vmSize Escriba un tamaño admitido por Azure Stack Hub, ejemplo Standard_D2_v2.
    Distribuciones Escriba aks-ubuntu-18.04 o aks-ubuntu-20.04.
  7. En agentPoolProfiles, actualice:

    Campo Descripción
    count Escriba el número de agentes que desea para la implementación. El número máximo de nodos que se usarán por suscripción es 50. Si va a implementar más de un clúster por suscripción, asegúrese de que el número total de agentes no supere los 50. Asegúrese de usar los elementos de configuración especificados en el archivo JSON del modelo de API de ejemplo.
    vmSize Escriba un tamaño admitido por Azure Stack Hub, ejemplo Standard_D2_v2.
    Distribuciones Escriba aks-ubuntu-18.04, aks-ubuntu-20.04 o Windows.
    Utilice Windows para los agentes que se van a ejecutar en Windows. Por ejemplo, consulte kubernetes-windows.json.
  8. En linuxProfile, actualice:

    Campo Descripción
    adminUsername Escriba el nombre de usuario administrador para la máquina virtual.
    ssh Escriba la clave pública que se usará para la autenticación SSH con máquinas virtuales. Use ssh-rsa y, después, la clave. Para obtener instrucciones para crear una clave pública, consulte Creación de una clave SSH para Linux.

    Si va a realizar la implementación en una red virtual personalizada, puede encontrar instrucciones para encontrar la clave y los valores necesarios y agregarlos a las matrices adecuadas del modelo de API en Implementación de un clúster de Kubernetes en una red virtual personalizada en Azure Stack Hub.

    Nota

    El motor de AKS para Azure Stack Hub no permite proporcionar sus propios certificados para la creación del clúster.

  9. Si utiliza Windows, actualice los valores de adminUsername: y adminPassword en windowsProfile:

    "windowsProfile": {
    "adminUsername": "azureuser",
    "adminPassword": "",
    "sshEnabled": true
    }
    

Más información sobre el modelo de API

Adición de un certificado al usar ASDK

Si va a implementar un clúster en el Kit de desarrollo de Azure Stack (ASDK) y usa Linux, deberá agregar el certificado raíz al almacén de certificados de confianza de la máquina virtual cliente que ejecuta el motor de AKS.

  1. Busque el certificado raíz en el siguiente directorio de la máquina virtual: /var/lib/waagent/Certificates.pem.
  2. Copie el archivo de certificado:
    sudo cp /var/lib/waagent/Certificates.pem /usr/local/share/ca-certificates/azurestacka.crt
    sudo update-ca-certificates
    

Implementación de un clúster de Kubernetes

Cuando haya recopilado todos los valores necesarios en el modelo de API, puede crear el clúster. En este momento, debe tener:

Solicite al operador de Azure Stack Hub que:

  • Compruebe el estado del sistema, sugiera la ejecución de Test-AzureStack y la herramienta de supervisión de hardware del proveedor de OEM.
  • Compruebe la capacidad del sistema, incluidos los recursos como la memoria, el almacenamiento y las direcciones IP públicas.
  • Proporcione detalles de la cuota asociada a su suscripción para que pueda comprobar que todavía hay suficiente espacio para el número de máquinas virtuales que piensa usar.

Continúe con la implementación de un clúster:

  1. Revise los parámetros disponibles para el motor de AKS en las marcas de la CLI de Azure Stack Hub.

    Parámetro Ejemplo Descripción
    azure-env AzureStackCloud Para indicar al motor de AKS que la plataforma de destino es Azure Stack Hub, utilice AzureStackCloud.
    identity-system adfs Opcional. Especifique la solución de administración de identidad si usa los Servicios de federación de Active Directory (AD FS).
    ubicación local El nombre de la región de la instancia de Azure Stack Hub. Para ASDK, la región se establece en local.
    resource-group kube-rg Escriba el nombre del nuevo grupo de recursos o seleccione uno existente. El nombre del recurso debe ser alfanumérico y estar en minúsculas.
    api-model ./kubernetes-azurestack.json Ruta de acceso al archivo de configuración del clúster o modelo de API.
    output-directory kube-rg Escriba el nombre del directorio que va a contener el archivo de salida apimodel.json y otros archivos generados.
    client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Escriba el GUID de la entidad de servicio. El identificador de cliente indicado como identificador de la aplicación cuando el administrador de Azure Stack Hub creó la entidad de servicio.
    client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Escriba el secreto de la entidad de servicio. Configure el secreto de cliente al crear el servicio.
    subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx escriba el identificador de la suscripción. Debe proporcionar una suscripción para el inquilino. No se admite la implementación en la suscripción administrativa. Para más información, consulte Suscripción a una oferta.

    Este es un ejemplo:

    Nota

    Para AKSe versión 0.75.3 y posteriores, el comando para implementar un clúster de motor de AKS es aks-engine-azurestack deploy.

    aks-engine deploy \
    --azure-env AzureStackCloud \
    --location <for asdk is local> \
    --resource-group kube-rg \
    --api-model ./kubernetes-azurestack.json \
    --output-directory kube-rg \
    --client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --identity-system adfs # required if using AD FS
    
  2. Si por algún motivo se produce un error en la ejecución después de que se haya creado el directorio de salida, puede corregir el problema y volver a ejecutar el comando. Si vuelve a ejecutar la implementación y ha usado el mismo directorio de salida antes, el motor de AKS devolverá un error que indica que el directorio ya existe. Puede sobrescribir el directorio existente mediante el uso de la marca --force-overwrite.

  3. Guarde la configuración de clúster del motor de AKS en una ubicación segura y cifrada.

    Busque el archivo apimodel.json. Cópielo en una ubicación segura. Este archivo se usará como entrada en todas las demás operaciones del motor de AKS.

    El archivo apimodel.json generado contiene la entidad de servicio, el secreto y la clave pública SSH que se usa en el modelo de API de entrada. El archivo también tiene todos los demás metadatos que necesita el motor de AKS para realizar todas las demás operaciones. Si pierde el archivo, el motor de AKS no podrá configurar el clúster.

    Los secretos están sin cifrar. Mantenga el archivo en un lugar seguro y cifrado.

Comprobación del clúster

Para comprobar el clúster, conéctese a kubectl, obtenga la información y obtenga los estados de los nodos.

  1. Obtenga el archivo kubeconfig para conectarse al plano de control.

    • Si ya ha kubectl instalado, compruebe el kubeconfig archivo del clúster recién creado en esta ruta de acceso de /kubeconfig/kubeconfig.jsondirectorio . Puede agregar al /kubeconfig.json.kube directorio para acceder al nuevo clúster.
      Si no ha instalado kubectl, visite el artículo sobre cómo instalar herramientas para instalar la herramienta de línea de comandos de Kubernetes. De lo contrario, siga las instrucciones siguientes para acceder al clúster desde uno de los nodos del plano de control.
  2. Obtenga la dirección IP pública de uno de los nodos del plano de control con el portal de Azure Stack Hub.

  3. Desde una máquina con acceso a la instancia de Azure Stack Hub, conéctese mediante SSH al nuevo nodo del plano de control mediante un cliente como PuTTY o MobaXterm.

  4. Para el nombre de usuario SSH, use "azureuser" y el archivo de clave privada del par de claves que proporcionó para la implementación del clúster.

  5. Compruebe que los puntos de conexión del clúster se están ejecutando:

    kubectl cluster-info
    

    La salida debe tener una apariencia similar a la siguiente:

    Kubernetes master is running at https://democluster01.location.domain.com
    CoreDNS is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    Metrics-server is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
    
  6. A continuación, revise los estados del nodo:

    kubectl get nodes
    

    La salida debe ser similar a la siguiente:

    k8s-linuxpool-29969128-0   Ready      agent    9d    v1.15.5
    k8s-linuxpool-29969128-1   Ready      agent    9d    v1.15.5
    k8s-linuxpool-29969128-2   Ready      agent    9d    v1.15.5
    k8s-master-29969128-0      Ready      master   9d    v1.15.5
    k8s-master-29969128-1      Ready      master   9d    v1.15.5
    k8s-master-29969128-2      Ready      master   9d    v1.15.5
    

Solución de problemas de implementación de clústeres

Al encontrar errores al implementar un clúster de Kubernetes mediante el motor de AKS, puede comprobar:

  1. ¿Usa las credenciales de entidad de servicio (SPN) correctas?
  2. ¿Tiene el SPN tiene un rol "Colaboradores" en la suscripción a Azure Stack Hub?
  3. ¿Tiene una cuota suficientemente grande en el plan de Azure Stack Hub?
  4. ¿Se aplica la instancia de Azure Stack Hub que tiene una revisión o una actualización?

Para más información, consulte el artículo Solución de problemas del repositorio de GitHub Azure/aks-engine-azurestack .

Rotación del secreto de la entidad de servicio

Después de la implementación del clúster de Kubernetes con el motor de AKS, la entidad de servicio se usa para administrar las interacciones con la instancia de Azure Resource Manager en Azure Stack Hub. En algún momento, es posible que el secreto de esta entidad de servicio expire. Si el secreto expira, puede actualizar las credenciales mediante:

  • Actualización de cada nodo con el nuevo secreto de la entidad de servicio.
  • O bien, mediante la actualización de las credenciales del modelo de API y la ejecución de la actualización.

Actualización de cada nodo manualmente

  1. Obtenga un nuevo secreto para la entidad de servicio del operador de la nube. Para obtener instrucciones para Azure Stack Hub, consulte Uso de una identidad de aplicación para acceder a recursos de Azure Stack Hub.
  2. Use las nuevas credenciales proporcionadas por el operador de nube para actualizar /etc/kubernetes/azure.json en cada nodo. Después de realizar la actualización, reinicie y kubelekube-controller-manager.

Actualización del clúster con la actualización del motor de AKS

Como alternativa, puede reemplazar las credenciales en apimodel.json y ejecutar la actualización mediante el archivo .json actualizado a la misma versión de Kubernetes o posterior. Para obtener instrucciones sobre cómo actualizar el modelo, consulte Actualización de un clúster de Kubernetes en Azure Stack Hub.

Pasos siguientes