Compartir a través de


Creación y aprovisionamiento de un clúster mediante la CLI de Azure

En este artículo se describe cómo crear un clúster mediante la interfaz de la línea de comandos de Azure (AzCLI). En este documento también se muestra cómo comprobar el estado, la actualización o la eliminación de un clúster.

Requisitos previos

  • Compruebe que el controlador de tejido de red y el administrador de clústeres existen en la región de Azure
  • Comprobación de que el tejido de red se ha aprovisionado correctamente

Guía de API y métricas

La guía de API proporciona información sobre los proveedores de recursos, los modelos de recursos y las API.

Las métricas generadas a partir de los datos de registro están disponibles en las métricas de Azure Monitor.

Limitaciones

  • Nomenclatura: Las reglas de nomenclatura se pueden encontrar aquí.

Creación de un clúster

La infraestructura del recurso de clúster representa una implementación local de la plataforma dentro del Administrador de clústeres. Todos los demás recursos específicos de la plataforma dependen de él para su ciclo de vida.

Debe crear Network Fabric antes de esta implementación local. Cada instancia local de Operator Nexus tiene una asociación uno a uno con un tejido de red.

Cree el clúster utilizando la CLI de Azure:

az networkcloud cluster create --name "$CLUSTER_NAME" --location "$LOCATION" \
  --extended-location name="$CL_NAME" type="CustomLocation" \
  --resource-group "$CLUSTER_RG" \
  --analytics-workspace-id "$LAW_ID" \
  --cluster-location "$CLUSTER_LOCATION" \
  --network-rack-id "$AGGR_RACK_RESOURCE_ID" \
  --rack-sku-id "$AGGR_RACK_SKU"\
  --rack-serial-number "$AGGR_RACK_SN" \
  --rack-location "$AGGR_RACK_LOCATION" \
  --bare-metal-machine-configuration-data "["$AGGR_RACK_BMM"]" \
  --storage-appliance-configuration-data '[{"adminCredentials":{"password":"$SA_PASS","username":"$SA_USER"},"rackSlot":1,"serialNumber":"$SA_SN","storageApplianceName":"$SA_NAME"}]' \
  --compute-rack-definitions '[{"networkRackId": "$COMPX_RACK_RESOURCE_ID", "rackSkuId": "$COMPX_RACK_SKU", "rackSerialNumber": "$COMPX_RACK_SN", "rackLocation": "$COMPX_RACK_LOCATION", "storageApplianceConfigurationData": [], "bareMetalMachineConfigurationData":[{"bmcCredentials": {"password":"$COMPX_SVRY_BMC_PASS", "username":"$COMPX_SVRY_BMC_USER"}, "bmcMacAddress":"$COMPX_SVRY_BMC_MAC", "bootMacAddress":"$COMPX_SVRY_BOOT_MAC", "machineDetails":"$COMPX_SVRY_SERVER_DETAILS", "machineName":"$COMPX_SVRY_SERVER_NAME"}]}]'\
  --managed-resource-group-configuration name="$MRG_NAME" location="$MRG_LOCATION" \
  --network fabric-id "$NF_ID" \
  --cluster-service-principal application-id="$SP_APP_ID" \
    password="$SP_PASS" principal-id="$SP_ID" tenant-id="$TENANT_ID" \
  --subscription "$SUBSCRIPTION_ID" \
  --secret-archive "{key-vault-id:$KVRESOURCE_ID, use-key-vault:true}" \
  --cluster-type "$CLUSTER_TYPE" --cluster-version "$CLUSTER_VERSION" \
  --tags $TAG_KEY1="$TAG_VALUE1" $TAG_KEY2="$TAG_VALUE2"

Parámetros de las operaciones del clúster

Nombre de parámetro Descripción
CLUSTER_NAME Nombre del recurso del clúster
LOCATION Región de Azure en la que se implementa el clúster.
CL_NAME Ubicación personalizada del Administrador de clústeres desde Azure Portal
CLUSTER_RG Nombre del grupo de recursos del clúster
LAW_ID Identificador del área de trabajo de Log Analytics del clúster
CLUSTER_LOCATION Nombre local del clúster
AGGR_RACK_RESOURCE_ID Identificador de bastidor del bastidor agregador
AGGR_RACK_SKU SKU de bastidor del bastidor agregador
AGGR_RACK_SN Número de serie de bastidor del bastidor agregador
AGGR_RACK_LOCATION Ubicación física del bastidor agregador
AGGR_RACK_BMM Se usa solo para la implementación de bastidor único, vacío para varios bastidores.
SA_NAME Nombre del dispositivo de almacenamiento
SA_PASS Contraseña de administrador del dispositivo de almacenamiento
SA_USER Usuario administrador del dispositivo de almacenamiento
SA_SN Número de serie del dispositivo de almacenamiento
COMPX_RACK_RESOURCE_ID Identificador del bastidor CompX; repetir para cada bastidor de compute-rack-definitions
COMPX_RACK_SKU SKU del bastidor CompX; repetir para cada bastidor de compute-rack-definitions
COMPX_RACK_SN Número de serie del bastidor CompX; repetir para cada bastidor de compute-rack-definitions
COMPX_RACK_LOCATION Ubicación física del bastidor CompX; repetir para cada bastidor de compute-rack-definitions
COMPX_SVRY_BMC_PASS Contraseña del controlador de administración de placa base (BMC) de ServerY del bastidor CompX; repetir para cada bastidor de compute-rack-definitions y para cada servidor del bastidor
COMPX_SVRY_BMC_USER Usuario de BMC de ServerY del bastidor CompX; repetir para cada bastidor de compute-rack-definitions y para cada servidor del bastidor
COMPX_SVRY_BMC_MAC Dirección MAC de BMC de ServerY del bastidor CompX; repetir para cada bastidor de compute-rack-definitions y para cada servidor del bastidor
COMPX_SVRY_BOOT_MAC Dirección MAC de la tarjeta de interfaz de red (NIC) de arranque de ServerY del bastidor CompX; repetir para cada bastidor de compute-rack-definitions y para cada servidor del bastidor
COMPX_SVRY_SERVER_DETAILS Detalles de ServerY del bastidor CompX; repetir para cada bastidor de compute-rack-definitions y para cada servidor del bastidor
COMPX_SVRY_SERVER_NAME Nombre de ServerY del bastidor CompX; repetir para cada bastidor de compute-rack-definitions y para cada servidor del bastidor
MRG_NAME Nombre del grupo de recursos administrado del clúster
MRG_LOCATION Región de Azure del clúster
NF_ID Referencia al tejido de red
SP_APP_ID Identificador de aplicación de la entidad de servicio
SP_PASS Contraseña de la entidad de servicio
SP_ID Id. de entidad de servicio
TENANT_ID Identificador de inquilino de la suscripción
SUBSCRIPTION_ID Id. de suscripción
KV_RESOURCE_ID Id. de Key Vault
CLUSTER_TYPE Tipo de clúster, de bastidor único o múltiple
CLUSTER_VERSION Versión de nube de red (NC) del clúster
TAG_KEY1 Etiqueta opcional 1 que se va a pasar en la creación de clústeres
TAG_VALUE1 Valor de la etiqueta opcional 1 que se va a pasar en la creación de clústeres
TAG_KEY2 Etiqueta opcional 2 que se va a pasar en la creación de clústeres
TAG_VALUE2 Valor de la etiqueta opcional 2 que se va a pasar en la creación de clústeres

Identidad del clúster

A partir de la versión de la API de 2024-07-01, un cliente puede asignar una identidad administrada a un clúster. Se admiten identidades administradas asignadas por el sistema y asignadas por el usuario.

La identidad administrada se puede asignar al clúster durante las operaciones de creación o actualización proporcionando los siguientes parámetros:

  • --mi-system-assigned: habilite la identidad administrada asignada por el sistema. Una vez agregada, la identidad solo se puede quitar a través de la llamada API en este momento.
  • --mi-user-assigned: identificadores de recursos separados por espacios de las identidades administradas asignadas por el usuario que se van a agregar. Una vez agregada, la identidad solo se puede quitar a través de la llamada API en este momento.

Creación del clúster mediante el editor de plantillas de Azure Resource Manager

Una manera alternativa de crear un clúster es con el editor de plantillas de ARM.

Para crear el clúster de esta manera, debe proporcionar un archivo de plantilla (cluster.jsonc) y un archivo de parámetros (cluster.parameters.jsonc). Puede encontrar ejemplos de un clúster de SKU de 8 bastidores 2M16C mediante estos dos archivos:

cluster.jsonc, cluster.parameters.jsonc

Nota:

Para obtener el formato correcto, copie el archivo de código sin formato. Los valores del archivo cluster.parameters.jsonc son específicos del cliente y es posible que no sean una lista completa. Actualice los campos de valor de su entorno específico.

  1. Vaya a Azure Portal en un explorador web e inicie sesión.
  2. Busque "Implementar una plantilla personalizada" en la barra de búsqueda de Azure Portal y, a continuación, selecciónela en los servicios disponibles.
  3. Haga clic en Compilar su propia plantilla en el editor.
  4. Haga clic en Cargar archivo. Busque el archivo de plantilla cluster.jsonc y cárguelo.
  5. Haga clic en Save(Guardar).
  6. Haga clic en Editar parámetros.
  7. Haga clic en Cargar archivo. Busque el archivo de parámetros cluster.parameters.jsonc y cárguelo.
  8. Haga clic en Save(Guardar).
  9. Seleccione la suscripción correcta.
  10. Busque el grupo de recursos para ver si ya existe. Si no es así, cree un nuevo grupo de recursos.
  11. Asegúrese de que todos los detalles de la instancia son correctos.
  12. Haga clic en Revisar + crear.

Validación de clústeres

Una creación correcta del clúster de Operator Nexus da como resultado la creación de un clúster de Azure Kubernetes Service (AKS) dentro de la suscripción. El identificador del clúster, el estado de aprovisionamiento del clúster y el estado de implementación se devuelven como resultado de una operación cluster create correcta.

Compruebe el estado del clúster:

az networkcloud cluster show --resource-group "$CLUSTER_RG" \
  --cluster-name "$CLUSTER_RESOURCE_NAME"

La creación del clúster se completa cuando el provisioningState del recurso muestra: "provisioningState": "Succeeded"

Registro de clúster

El clúster crea registros que se pueden ver en las siguientes ubicaciones:

  1. Recurso de Azure Portal/Registros de actividad del grupo de recursos.
  2. CLI de Azure con la marca --debug en la línea de comandos.

Implementación del clúster

Se puede desencadenar la acción de implementar clúster después de crear el clúster. La acción implementar clúster crea la imagen de arranque e implementa el clúster.

La implementación del clúster inicia una secuencia de eventos que se producen en el Administrador de clústeres.

  1. Validación de las propiedades del clúster o bastidor.
  2. Generación de una imagen de arranque para el clúster de arranque efímero (validación de infraestructura).
  3. Interacción con la interfaz de administración de la plataforma inteligente (IPMI) de la máquina de arranque de destino.
  4. Realizar comprobaciones de validación del hardware.
  5. Supervisión del proceso de implementación del clúster.

Implemente el clúster local:

az networkcloud cluster deploy \
  --name "$CLUSTER_NAME" \
  --resource-group "$CLUSTER_RG" \
  --subscription "$SUBSCRIPTION_ID" \
  --no-wait --debug

Sugerencia

Para comprobar el estado del comando az networkcloud cluster deploy, se puede ejecutar mediante la marca --debug. Esto le permitirá obtener el encabezado Azure-AsyncOperation o Location usado para consultar el recurso operationStatuses. Consulte la sección Error de implementación de clústeres para obtener pasos más detallados. Opcionalmente, el comando puede ejecutarse de forma asincrónica mediante la marca --no-wait.

Implementación de clústeres con validación de hardware

Durante un proceso de implementación de clúster, uno de los pasos ejecutados es la validación de hardware. El procedimiento de validación de hardware ejecuta varias pruebas y comprobaciones en las máquinas proporcionadas a través de la definición del bastidor del clúster. En función de los resultados de estas comprobaciones y de las máquinas omitidas por el usuario, se realiza una determinación en si hay suficientes nodos pasados o disponibles para cumplir los umbrales necesarios para que la implementación continúe.

Importante

El proceso de validación de hardware escribirá los resultados en el analyticsWorkspaceId especificado en Creación de clústeres. Además, la entidad de servicio proporcionada en el objeto Cluster se usa para la autenticación en la API de recopilación de datos del área de trabajo de Log Analytics. Esta funcionalidad solo es visible durante una nueva implementación (Campo verde); el clúster existente no tendrá los registros disponibles de forma retroactiva.

Nota:

El controlador RAID se restablece durante la implementación del clúster, lo que borra todos los datos de los discos virtuales del servidor. Las alertas de disco virtual del Controlador de administración de placa base (BMC) normalmente se pueden omitir a menos que haya alertas adicionales de disco físico o controladores RAID.

De forma predeterminada, el proceso de validación de hardware escribe los resultados en el clúster analyticsWorkspaceId configurado. Sin embargo, debido a la naturaleza de la recopilación de datos del área de trabajo de Log Analytics y la evaluación del esquema, puede haber un retraso de ingesta que puede tardar varios minutos o más. Por este motivo, la implementación del clúster continúa incluso si se produjo un error al escribir los resultados en el área de trabajo de Log Analytics. Para ayudar a solucionar este posible evento, los resultados, para la redundancia, también se registran en el Administrador de clústeres.

En el área de trabajo de Log Analytics del objeto Cluster proporcionado, aparecerá una nueva tabla personalizada con el nombre del clúster como prefijo y el sufijo *_CL. En la sección Registros del recurso LAW, se puede ejecutar una consulta en la nueva tabla registro personalizado *_CL.

Implementación de clústeres con omisión de una máquina completa específica

El parámetro --skip-validation-for-machines representa los nombres de las máquinas sin sistema operativo del clúster que se deben omitir durante la validación de hardware. Los nodos omitidos no se validan y no se agregan al grupo de nodos. Además, los nodos omitidos no cuentan con el total utilizado por los cálculos de umbral.

az networkcloud cluster deploy \
  --name "$CLUSTER_NAME" \
  --resource-group "$CLUSTER_RG" \
  --subscription "$SUBSCRIPTION_ID" \
  --skip-validations-for-machines "$COMPX_SVRY_SERVER_NAME"

Error en la implementación del clúster

Para realizar un seguimiento del estado de una operación asincrónica, haga la ejecución con una marca --debug habilitada. Cuando se especifica --debug, se puede supervisar el progreso de la solicitud. La dirección URL de estado de la operación se puede encontrar examinando la salida de depuración que busca el encabezado Azure-AsyncOperation o Location en la respuesta HTTP a la solicitud de creación. Los encabezados pueden proporcionar el campo OPERATION_ID usado en la llamada API HTTP.

OPERATION_ID="12312312-1231-1231-1231-123123123123*99399E995..."
az rest -m GET -u "https://management.azure.com/subscriptions/${SUBSCRIPTION_ID}/providers/Microsoft.NetworkCloud/locations/${LOCATION}/operationStatuses/${OPERATION_ID}?api-version=2022-12-12-preview"

La salida es similar al ejemplo de estructura JSON. Cuando el código de error es HardwareValidationThresholdFailed, el mensaje de error contiene una lista de máquinas sin sistema operativo que no pudieron validar el hardware (por ejemplo, COMP0_SVR0_SERVER_NAME, COMP1_SVR1_SERVER_NAME). Estos nombres se pueden usar para analizar los registros para obtener más detalles.

{
  "endTime": "2023-03-24T14:56:59.0510455Z",
  "error": {
    "code": "HardwareValidationThresholdFailed",
    "message": "HardwareValidationThresholdFailed error hardware validation threshold for cluster layout plan is not met for cluster $CLUSTER_NAME in namespace nc-system with listed failed devices $COMP0_SVR0_SERVER_NAME, $COMP1_SVR1_SERVER_NAME"
  },
  "id": "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.NetworkCloud/locations/$LOCATION/operationStatuses/12312312-1231-1231-1231-123123123123*99399E995...",
  "name": "12312312-1231-1231-1231-123123123123*99399E995...",
  "resourceId": "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$CLUSTER_RESOURCE_GROUP/providers/Microsoft.NetworkCloud/clusters/$CLUSTER_NAME",
  "startTime": "2023-03-24T14:56:26.6442125Z",
  "status": "Failed"
}

Consulte el artículo Seguimiento de operaciones asincrónicas mediante la CLI de Azure para obtener otro ejemplo.

Validación de la implementación del clúster

Vea el estado del clúster en el portal o mediante la CLI de Azure:

az networkcloud cluster show --resource-group "$CLUSTER_RG" \
  --name "$CLUSTER_NAME"

La implementación del clúster está en curso cuando detailedStatus está establecido en Deploying y detailedStatusMessage muestra el progreso de la implementación. Algunos ejemplos de progreso de la implementación que se muestran en detailedStatusMessage son Hardware validation is in progress. (si el clúster se implementa con validación de hardware),Cluster is bootstrapping., KCP initialization in progress., Management plane deployment in progress., Cluster extension deployment in progress., waiting for "<rack-ids>" to be ready, etc.

Captura de pantalla de Azure Portal en la que se muestra el progreso de la implementación del clúster kcp init.

Captura de pantalla de Azure Portal en la que se muestra la aplicación de extensión de progreso de implementación del clúster.

La implementación del clúster se completa cuando detailedStatus se establece en Running y detailedStatusMessage muestra el mensaje Cluster is up and running.

Captura de pantalla de Azure Portal en la que se muestra la implementación del clúster completada.

Vea la versión de administración del clúster:

az k8s-extension list --cluster-name "$CLUSTER_NAME" --resource-group "$MRG_NAME" --cluster-type connectedClusters --query "[?name=='nc-platform-extension'].{name:name, extensionType:extensionType, releaseNamespace:scope.cluster.releaseNamespace,provisioningState:provisioningState,version:version}" -o table --subscription "$SUBSCRIPTION_ID"

Registro de la implementación del clúster

El clúster crea registros que se pueden ver en las siguientes ubicaciones:

  1. Recurso de Azure Portal/Registros de actividad del grupo de recursos.
  2. CLI de Azure con la marca --debug en la línea de comandos.

Captura de pantalla de Azure Portal que muestra el registro de actividad de progreso de implementación del clúster.

Actualización de identidades de clúster mediante API

Las identidades administradas de clúster se pueden asignar a través de la CLI. La desasignación de las identidades puede hacerse mediante llamadas a la API. Nota: <APIVersion> es la versión de API 2024-07-01 o posterior.

  • Para quitar todas las identidades administradas, ejecute:

    az rest --method PATCH --url /subscriptions/$SUB_ID/resourceGroups/$CLUSTER_RG/providers/Microsoft.NetworkCloud/clusters/$CLUSTER_NAME?api-version=<APIVersion> --body "{\"identity\":{\"type\":\"None\"}}"
    
  • Si se agregaron identidades administradas asignadas por el usuario y asignadas por el sistema, se puede quitar el usuario asignado actualizando el type a SystemAssigned:

    az rest --method PATCH --url /subscriptions/$SUB_ID/resourceGroups/$CLUSTER_RG/providers/Microsoft.NetworkCloud/clusters/$CLUSTER_NAME?api-version=<APIVersion> --body @~/uai-body.json
    

    Ejemplo del cuerpo de la solicitud (uai-body.json):

    {
      "identity": {
          "type": "SystemAssigned"
      }
    }
    
  • Si se agregaron identidades administradas asignadas por el usuario y asignadas por el sistema, se puede quitar el sistema actualizando el type a UserAssigned:

    az rest --method PATCH --url /subscriptions/$SUB_ID/resourceGroups/$CLUSTER_RG/providers/Microsoft.NetworkCloud/clusters/$CLUSTER_NAME?api-version=<APIVersion> --body @~/uai-body.json
    

    Ejemplo del cuerpo de la solicitud (uai-body.json):

    {
      "identity": {
          "type": "UserAssigned",
      	"userAssignedIdentities": {
      		"/subscriptions/$SUB_ID/resourceGroups/$UAI_RESOURCE_GROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$UAI_NAME": {}
      	}
      }
    }
    
  • Si se agregaron varias identidades administradas asignadas por el usuario, se puede quitar una de ellas ejecutando:

    az rest --method PATCH --url /subscriptions/$SUB_ID/resourceGroups/$CLUSTER_RG/providers/Microsoft.NetworkCloud/clusters/$CLUSTER_NAME?api-version=<APIVersion> --body @~/uai-body.json
    

    Ejemplo del cuerpo de la solicitud (uai-body.json):

    {
      "identity": {
          "type": "UserAssigned",
      	"userAssignedIdentities": {
      		"/subscriptions/$SUB_ID/resourceGroups/$UAI_RESOURCE_GROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$UAI_NAME": null
      	}
      }
    }
    

Eliminación de un clúster

Al eliminar un clúster, elimina los recursos de Azure y el clúster que reside en el entorno local.

Nota:

Si hay algún recurso de inquilino que exista en el clúster, no se eliminará hasta que se eliminen esos recursos.

Captura de pantalla del portal en la que se muestra el error de eliminación debido a los recursos del inquilino.

az networkcloud cluster delete --name "$CLUSTER_NAME" --resource-group "$CLUSTER_RG"