Creación de clústeres de Kubernetes mediante la CLI de Azure

Se aplica a: Azure Stack HCI, versión 23H2

En este artículo se describe cómo crear clústeres de Kubernetes en Azure Stack HCI mediante la CLI de Azure. El flujo de trabajo es el siguiente:

  1. Cree un clúster de Kubernetes en Azure Stack HCI 23H2 mediante la CLI de Azure. El clúster está conectado a Azure Arc de forma predeterminada.
  2. Al crear el clúster, se proporciona un grupo de Microsoft Entra que contiene la lista de usuarios de Microsoft Entra con acceso de administrador de clústeres de Kubernetes.
  3. Acceda al clúster mediante kubectl y el Microsoft Entra ID.
  4. Ejecución de una aplicación de varios contenedores de ejemplo con un servidor front-end web y una instancia de Redis en el clúster.

Antes de empezar

  • Antes de comenzar, asegúrese de que tiene los siguientes detalles del administrador de infraestructura local:
    • Identificador de suscripción de Azure : identificador de suscripción de Azure donde se usa Azure Stack HCI para la implementación y el registro.
    • Id. de ubicación personalizada: Azure Resource Manager id. de la ubicación personalizada. La ubicación personalizada se configura durante la implementación del clúster de Azure Stack HCI. El administrador de infraestructura debe proporcionarle el identificador de Resource Manager de la ubicación personalizada. Este parámetro es necesario para crear clústeres de Kubernetes. También puede obtener el identificador de Resource Manager mediante az customlocation show --name "<custom location name>" --resource-group <azure resource group> --query "id" -o tsv, si el administrador de infraestructura proporciona un nombre de ubicación personalizado y un nombre de grupo de recursos.
    • Identificador de red: Azure Resource Manager id. de la red lógica de Azure Stack HCI creada siguiendo estos pasos. El administrador debe proporcionarle el identificador de la red lógica. Este parámetro es necesario para crear clústeres de Kubernetes. También puede obtener el identificador de Azure Resource Manager mediante az stack-hci-vm network lnet show --name "<lnet name>" --resource-group <azure resource group> --query "id" -o tsv si conoce el grupo de recursos en el que se creó la red lógica.
  • Puede ejecutar los pasos descritos en este artículo en una máquina de desarrollo local para crear un clúster de Kubernetes en la implementación remota de Azure Stack HCI. Asegúrese de que tiene la versión más reciente de la CLI de Az en la máquina de desarrollo. También puede optar por actualizar la versión de la CLI de Az mediante az upgrade.
  • Para conectarse al clúster de Kubernetes desde cualquier lugar, cree un grupo de Microsoft Entra y agréguele miembros. Todos los miembros del grupo Microsoft Entra tienen acceso de administrador de clústeres al clúster. Asegúrese de agregarse como miembro al grupo de Microsoft Entra. Si no lo agrega, no puede acceder al clúster de Kubernetes mediante kubectl. Para obtener más información sobre cómo crear grupos de Microsoft Entra y agregar usuarios, vea Administrar grupos Microsoft Entra y pertenencia a grupos.
  • Descargue e instale kubectl en la máquina de desarrollo. La herramienta de línea de comandos de Kubernetes, kubectl, le permite ejecutar comandos en clústeres de Kubernetes. Puede usar kubectl para implementar aplicaciones, inspeccionar y administrar recursos de clúster y ver los registros.

Instalación de la extensión de la CLI de Azure

Ejecute el siguiente comando para instalar las extensiones de la CLI de Azure necesarias:

az extension add -n aksarc --upgrade
az extension add -n customlocation --upgrade
az extension add -n stack-hci-vm --upgrade
az extension add -n connectedk8s --upgrade

Creación de un clúster de Kubernetes

Use el az aksarc create comando para crear un clúster de Kubernetes en AKS Arc. Asegúrese de iniciar sesión en Azure antes de ejecutar este comando. Si tiene varias suscripciones de Azure, seleccione el identificador de suscripción adecuado mediante el comando az account set .

az aksarc create -n $aksclustername -g $resource_group --custom-location $customlocationID --vnet-ids $logicnetId --aad-admin-group-object-ids $aadgroupID --generate-ssh-keys --load-balancer-count 0  --control-plane-ip $controlplaneIP

Transcurridos unos minutos, el comando se completa y devuelve información en formato JSON sobre el clúster.

Conectar al clúster de Kubernetes

Ahora puede conectarse al clúster de Kubernetes ejecutando el comando desde la az connectedk8s proxy máquina de desarrollo. Asegúrese de iniciar sesión en Azure antes de ejecutar este comando. Si tiene varias suscripciones de Azure, seleccione el identificador de suscripción adecuado mediante el comando az account set .

Este comando descarga el kubeconfig del clúster de Kubernetes en la máquina de desarrollo y abre un canal de conexión de proxy en el clúster de Kubernetes local. El canal está abierto mientras se ejecute el comando. No puede acceder al clúster si este comando no está en ejecución. Si agota el tiempo de espera, cierre la ventana de la CLI, abra una nueva y vuelva a ejecutar el comando.

Debe tener permisos de colaborador en el grupo de recursos que hospeda el clúster de Kubernetes para ejecutar correctamente el siguiente comando:

az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config

Resultado esperado:

Proxy is listening on port 47011
Merged "aks-workload" as current context in .\\aks-arc-kube-config
Start sending kubectl requests on 'aks-workload' context using
kubeconfig at .\\aks-arc-kube-config
Press Ctrl+C to close proxy.

Mantenga esta sesión en ejecución y conéctese al clúster de Kubernetes desde otro terminal o símbolo del sistema. Para comprobar que puede conectarse al clúster de Kubernetes, ejecute el comando kubectl get. Este comando devuelve una lista de los nodos del clúster:

kubectl get node -A --kubeconfig .\aks-arc-kube-config

En el ejemplo de salida siguiente se muestra el nodo creado en los pasos anteriores. Asegúrese de que el estado del nodo es Listo:

NAME             STATUS ROLES                AGE VERSION
moc-l0ttdmaioew  Ready  control-plane,master 34m v1.24.11
moc-ls38tngowsl  Ready  <none>               32m v1.24.11

Implementación de la aplicación

Un archivo de manifiesto de Kubernetes define el estado deseado del clúster, por ejemplo, qué imágenes de contenedor se van a ejecutar.

Puede usar un manifiesto para crear todos los objetos necesarios para ejecutar la aplicación Azure Vote. Este manifiesto incluye dos implementaciones de Kubernetes:

  • Las aplicaciones de Python de ejemplo de Azure Vote.
  • Una instancia de Redis.

También se crean dos servicios de Kubernetes :

  • Un servicio interno para la instancia de Redis.
  • Un servicio externo para acceder a la aplicación Azure Vote desde Internet.

Cree un archivo denominado azure-vote.yaml y copie en el manifiesto siguiente:

apiVersion: apps/v1 
    kind: Deployment 
    metadata: 
      name: azure-vote-back 
    spec: 
      replicas: 1 
      selector: 
        matchLabels: 
          app: azure-vote-back 
      template: 
        metadata: 
          labels: 
            app: azure-vote-back 
        spec: 
          nodeSelector: 
            "kubernetes.io/os": linux 
          containers: 
          - name: azure-vote-back 
            image: mcr.microsoft.com/oss/bitnami/redis:6.0.8 
            env: 
            - name: ALLOW_EMPTY_PASSWORD 
              value: "yes" 
            resources: 
              requests: 
                cpu: 100m 
                memory: 128Mi 
              limits: 
                cpu: 250m 
                memory: 256Mi 
            ports: 
            - containerPort: 6379 
              name: redis 
    ---
    apiVersion: v1
    kind: Service 
    metadata: 
      name: azure-vote-back 
    spec: 
      ports: 
      - port: 6379 
      selector: 
        app: azure-vote-back 
    --- 
    apiVersion: apps/v1 
    kind: Deployment 
    metadata: 
      name: azure-vote-front 
    spec: 
      replicas: 1 
      selector: 
        matchLabels: 
          app: azure-vote-front 
      template: 
        metadata: 
          labels: 
            app: azure-vote-front 
        spec: 
          nodeSelector: 
            "kubernetes.io/os": linux 
          containers: 
          - name: azure-vote-front 
            image: mcr.microsoft.com/azuredocs/azure-vote-front:v1 
            resources: 
              requests: 
                cpu: 100m 
                memory: 128Mi 
              limits: 
                cpu: 250m 
                memory: 256Mi 
            ports: 
            - containerPort: 80 
            env: 
            - name: REDIS 
              value: "azure-vote-back" 
    --- 
    apiVersion: v1 
    kind: Service 
    metadata: 
      name: azure-vote-front 
    spec: 
      type: LoadBalancer 
      ports: 
      - port: 80 
      selector: 
        app: azure-vote-front

Implemente la aplicación mediante el comando kubectl apply y especifique el nombre de yaML:

kubectl apply -f azure-vote.yaml --kubeconfig .\\aks-arc-kube-config

En la salida de ejemplo siguiente se muestran las implementaciones y los servicios creados correctamente:

deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created

Prueba de la aplicación

Cuando se ejecuta la aplicación, un servicio de Kubernetes expone el front-end de la aplicación a Internet. Este proceso puede tardar unos minutos en completarse.

Para supervisar el progreso, utilice el comando kubectl get service con el argumento --watch.

kubectl get service azure-vote-front --watch --kubeconfig .\aks-arc-kube-config

La salida EXTERNAL-IP del servicio azure-vote-front se muestra inicialmente como pendiente.

NAME             TYPE         CLUSTER-IP EXTERNAL-IP PORT(S)      AGE
azure-vote-front LoadBalancer 10.0.37.27 <pending>   80:30572/TCP 6s

Una vez que la dirección EXTERNAL-IP cambia de pendiente a una dirección IP pública real, use CTRL-C para detener el proceso de watch kubectl. En la salida del ejemplo siguiente se muestra una dirección IP pública válida asignada al servicio:

azure-vote-front LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m

Para ver la aplicación Azure Vote en acción, abra un explorador web en la dirección IP externa del servicio.

Eliminación del clúster

Ejecute el az aksarc delete comando para limpiar el clúster que ha creado:

az aksarc delete --resource-group $aksclustername --name $resource_group

Pasos siguientes