Compartir a través de


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

Se aplica a: Azure Local, versión 23H2

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

  1. Cree un clúster de Kubernetes en Azure Local, versión 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 identificador de Microsoft Entra.
  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 empezar, asegúrese de que tiene los detalles siguientes del administrador de infraestructura local:
    • Identificador de suscripción de Azure: el identificador de suscripción de Azure donde se usa Azure Local para la implementación y el registro.
    • Id. de ubicación personalizada: identificador de Azure Resource Manager de la ubicación personalizada. La ubicación personalizada se configura durante la implementación del clúster local de Azure. 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: identificador de Azure Resource Manager de la red lógica local de Azure 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 Local. 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 Microsoft Entra. Si no se agrega usted mismo, 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, consulte Administrar grupos y pertenencia a grupos de Microsoft Entra.
  • 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 

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

Nota:

  • El valor de la clave SSH es la clave pública para acceder a los nodos del clúster aprovisionado. De forma predeterminada, esta clave se encuentra en ~/.ssh/id_rsa.pub. Puede especificar una ubicación diferente mediante el parámetro durante la creación del --ssh-key-value clúster.
  • El --generate-ssh-keys parámetro es necesario si no hay ninguna clave SSH preexistente en el equipo local. Si no incluye este parámetro durante la creación del clúster y no existe ninguna clave SSH, recibirá un mensaje de error.
  • Si ya tiene una clave SSH en el equipo local, el clúster de AKS reutiliza esa clave. En este caso, especificar --generate-ssh-keyso omitir ese parámetro no tiene ningún efecto.

Importante

Para usar RBAC de Azure o la identidad de carga de trabajo para un clúster de AKS, debe pasar los parámetros necesarios durante la creación del clúster mediante la CLI de Azure. Actualmente, no se admite la actualización de un clúster de AKS existente para habilitar la identidad de carga de trabajo o RBAC de Azure. Para más información, consulte Uso de RBAC de Azure para la autorización de Kubernetes o Implementación y configuración de la identidad de carga de trabajo para 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 kubeconfig del clúster de Kubernetes en la máquina de desarrollo y abre un canal de conexión de proxy al 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 símbolo del sistema o terminal. Compruebe que puede conectarse al clúster de Kubernetes mediante la ejecución del 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 y el equilibrador de carga

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 siguiente manifiesto:

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: <path to image>/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: <path to image>/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 su 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

Implemente un equilibrador de carga MetalLB para que pueda asignar una dirección IP externa para el front-end de la aplicación. Puede seguir estas instrucciones para implementar la extensión MetalLB desde el portal de Azure o mediante la CLI.

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.

Supervise el progreso mediante el comando kubectl get service con el --watch argumento .

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 inspección 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 creó:

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

Pasos siguientes