Share via


Inicio rápido: Implementación de un clúster de Kubernetes mediante una plantilla de Azure Resource Manager

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

En este inicio rápido se muestra cómo implementar un clúster de Kubernetes en AKS Arc mediante una plantilla de Azure Resource Manager. Azure Arc amplía las funcionalidades de administración de Azure a los clústeres de Kubernetes en cualquier lugar, lo que proporciona un enfoque unificado para administrar diferentes entornos.

Antes de empezar

En este artículo se presupone un conocimiento básico de los conceptos de Kubernetes.

Para implementar una plantilla de Resource Manager, necesita acceso de escritura en los recursos que va a implementar y acceso a todas las operaciones en el tipo de recurso Microsoft.Resources/deployments. Por ejemplo, para implementar una máquina virtual, necesita permisos Microsoft.Compute/virtualMachines/write y Microsoft.Resources/deployments/* . Para obtener una lista de roles y permisos, consulte Roles integrados de Azure.

Requisitos previos

  • Una cuenta de Azure con una suscripción activa.
  • Un clúster de Azure Stack HCI 23H2.
  • La versión más reciente de la CLI de Azure.

Paso 1: preparación de la cuenta de Azure

  1. Inicie sesión en Azure: abra el terminal o el símbolo del sistema e inicie sesión en su cuenta de Azure con la CLI de Azure:

    az login
    
  2. Establezca la suscripción: reemplace por <your-subscription-id> el identificador de suscripción:

    az account set --subscription "<your-subscription-id>"
    

Paso 2: Creación de un par de claves SSH mediante la CLI de Azure

az sshkey create --name "mySSHKey" --resource-group "myResourceGroup"

o bien, cree un par de claves SSH mediante ssh-keygen:

ssh-keygen -t rsa -b 4096

Para implementar la plantilla, debe proporcionar la clave pública del par SSH. Para recuperar la clave pública, use el az sshkey show comando :

az sshkey show --name "mySSHKey" --resource-group "myResourceGroup" --query "publicKey"

De forma predeterminada, los archivos de clave SSH se crean en el directorio ~/.ssh . Ejecute el az sshkey create comando o ssh-keygen para sobrescribir cualquier par de claves SSH existente con el mismo nombre.

Para más información sobre cómo crear claves SSH, consulte el artículo sobre Creación y administración de claves SSH para la autenticación en Azure.

Paso 3: Revisar la plantilla

La plantilla usada en este inicio rápido procede del repositorio de plantillas de inicio rápido de Azure:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "provisionedClusterName": {
          "type": "string",
          "defaultValue": "aksarc-armcluster",
          "metadata": {
              "description": "The name of the AKS Arc Cluster resource."
          }
      },
      "location": {
          "type": "string",
          "defaultValue": "eastus",
          "metadata": {
              "description": "The location of the AKS Arc Cluster resource."
          }
      },
      "resourceTags": {
            "type": "object",
            "defaultValue": {}
        },
      "sshRSAPublicKey": {
          "type": "string",
          "metadata": {
              "description": "Configure all linux machines with the SSH RSA public key string. Your key should include three parts, for example 'ssh-rsa AAAAB...snip...UcyupgH '"
          }
      },
       "enableAHUB": {
            "type": "string",
            "defaultValue": "NotApplicable",
            "metadata": {
                "description": "Azure Hybrid Benefit for Windows Server licenses. NotApplicable, True, False."
            }
        },
       "agentName": {
              "type": "string",
              "defaultValue": "nodepool",
              "metadata": {
                  "description": "The name of the node pool."
              }
          },
        "agentVMSize": {
            "type": "string",
            "defaultValue": "Standard_A4_v2",
            "metadata": {
                  "description": "The VM size for node pools."
            }
        },
        "agentCount": {
              "type": "int",
              "defaultValue": 1,
              "minValue": 1,
              "maxValue": 50,
              "metadata": {
                  "description": "The number of nodes for the cluster."
              }
          },
          "agentOsType": {
              "type": "string",
              "defaultValue": "Linux",
              "metadata": {
                  "description": "The OS Type for the agent pool. Values are Linux and Windows."
              }
          },
         "loadBalancerCount": {
            "type": "int",
            "defaultValue": 0,
            "metadata": {
                "description": "The number of load balancers."
            }
        },
          "kubernetesVersion": {
              "type": "string",
              "metadata": {
                  "description": "The version of Kubernetes."
              }
          },
          "controlPlaneNodeCount": {
              "type": "int",
              "defaultValue": 1,
              "minValue": 1,
              "maxValue": 5,
              "metadata": {
                  "description": "The number of control plane nodes for the cluster."
              }
          },
          "controlPlaneIp": {
            "type": "string",
            "defaultValue": "<default_value>",
              "metadata": {
                  "description": "Control plane IP address."
              }
         },
          "controlPlaneVMSize": {
              "type": "string",
              "defaultValue": "Standard_A4_v2",
              "metadata": {
                  "description": "The VM size for control plane."
              }
          },
          "vnetSubnetIds": {
              "type": "array",
              "metadata": {
                  "description": "List of subnet Ids for the AKS cluster."
              }
          },
          "podCidr": {
            "type": "string",
            "defaultValue": "10.244.0.0/16",
            "metadata": {
                  "description": "The VM size for control plane."
              }
          },
          "networkPolicy": {
            "type": "string",
            "defaultValue": "calico",
            "metadata": {
                  "description": "Network policy to use for Kubernetes pods. Only options supported is calico."
              }
          },
          "customLocation": {
            "type": "string",
            "metadata": {
                  "description": "Fully qualified custom location resource Id."
              }
          }
      },
      "resources": [
      {
          "apiVersion": "2024-01-01",
          "type": "Microsoft.Kubernetes/ConnectedClusters",
          "kind": "ProvisionedCluster",
          "location": "[parameters('location')]",
          "name": "[parameters('provisionedClusterName')]",
          "tags": "[parameters('resourceTags')]",
          "identity": {
              "type": "SystemAssigned"
          },
          "properties": {
              "agentPublicKeyCertificate":"" ,
              "aadProfile": {
                  "enableAzureRBAC": false
              }
          }
      },
      {
          "apiVersion": "2024-01-01",
          "type": "microsoft.hybridcontainerservice/provisionedclusterinstances",
          "name": "default",
          "scope": "[concat('Microsoft.Kubernetes/ConnectedClusters', '/', parameters('provisionedClusterName'))]",
          "dependsOn": [
              "[resourceId('Microsoft.Kubernetes/ConnectedClusters', parameters('provisionedClusterName'))]"
          ],
          "properties": {
          "agentPoolProfiles": [
            {
              "count": "[parameters('agentCount')]",
              "name":"[parameters('agentName')]",
              "osType": "[parameters('agentOsType')]",
              "vmSize": "[parameters('agentVMSize')]"
            }
          ],
          "cloudProviderProfile": {
            "infraNetworkProfile": {
                  "vnetSubnetIds": "[parameters('vnetSubnetIds')]"
            }
          },
          "controlPlane": {
            "count": "[parameters('controlPlaneNodeCount')]",
            "controlPlaneEndpoint": {
                        "hostIP": "[parameters('controlPlaneIp')]"
                    },
            "vmSize": "[parameters('controlPlaneVMSize')]"
          },
         "licenseProfile": {
            "azureHybridBenefit": "[parameters('enableAHUB')]"
         },
          "kubernetesVersion": "[parameters('kubernetesVersion')]",
          "linuxProfile": {
            "ssh": {
              "publicKeys": [
                {
                  "keyData": "[parameters('sshRSAPublicKey')]"
                }
              ]
            }
          },
        "networkProfile": {
          "loadBalancerProfile": {
            "count": "[parameters('loadBalancerCount')]"
          },
          "networkPolicy": "[parameters('networkPolicy')]",
          "podCidr": "[parameters('podCidr')]"
        },
        "storageProfile": {
          "nfsCsiDriver": {
            "enabled": false
          },
          "smbCsiDriver": {
            "enabled": false
          }
        }
        },
        "extendedLocation": {
            "name": "[parameters('customLocation')]",
            "type": "CustomLocation"
        }
      }
    ]
  }

Paso 4: Implementación de la plantilla

Para implementar la plantilla, ejecute el siguiente comando para implementar el clúster de Kubernetes:

az deployment group create \
--name "<deployment-name>" \
--resource-group "<resource-group-name>" \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.kubernetes/aks-arc/azuredeploy.json" \
--parameters provisionedClusterName="<cluster-name> location="eastus" sshRSApublicKey="" etc..."

La operación de creación del clúster tarda unos minutos. Espere a que el clúster se implemente correctamente para pasar al siguiente paso.

Paso 5: Comprobar la implementación

Una vez completada la implementación, use el siguiente comando para comprobar que el clúster de Kubernetes está en funcionamiento:

az aksarc show --resource-group "<resource-group-name>" --name "<cluster-name>" --output table

Paso 6: Conexión al clúster

  1. Para conectarse al clúster, ejecute el az connectedk8s proxy comando . El comando descarga y ejecuta un archivo binario proxy en el equipo cliente y captura un archivo kubeconfig asociado al clúster:

    az connectedk8s proxy --name <cluster name> -g <resource group>
    

    O bien, use el cliente de línea de comandos de Kubernetes, kubectl. Si usa Azure Cloud Shell, kubectl ya está instalado. Para instalar y ejecutar kubectl localmente, ejecute el az aksarc install-cli comando .

    Configure kubectl para conectarse al clúster de Kubernetes mediante el az aksarc get-credentials comando . Con este comando se descargan las credenciales y se configura la CLI de Kubernetes para usarlas:

    az aksarc get-credentials --resource-group "<resource-group-name>" --name "<cluster-name>"
    
  2. Compruebe la conexión al clúster con el comando kubectl get. Este comando devuelve una lista de los nodos del clúster:

    kubectl get nodes -A --kubeconfig .\<path to kubecofig> 
    

    En la salida de ejemplo siguiente se muestran los tres nodos creados en los pasos anteriores. Asegúrese de que el estado del nodo es Listo:

    NAME                                STATUS   ROLES   AGE   VERSION
    aks-agentpool-27442051-vmss000000   Ready    agent   10m   v1.27.7
    aks-agentpool-27442051-vmss000001   Ready    agent   10m   v1.27.7
    aks-agentpool-27442051-vmss000002   Ready    agent   11m   v1.27.7
    

Recursos de plantilla

connectedClusters

Nombre Descripción Valor
type El tipo de recurso. Microsoft.Kubernetes/ConnectedClusters
apiVersion Versión de la API del recurso. 2024-01-01
name Nombre del recurso. String (obligatorio)
Límite de caracteres: 1-63
Caracteres válidos: caracteres alfanuméricos, caracteres de subrayado y guiones.
Comience y termine con un carácter alfanumérico.
location Ubicación geográfica en la que reside el recurso. String (obligatorio).
tags Etiquetas del recurso. Diccionario de nombres y valores de etiqueta. Consulte Etiquetas en plantillas.
extendedLocation Ubicación extendida de la máquina virtual. ExtendedLocation
identity La identidad del clúster conectado, si está configurada.
properties Propiedades de un clúster conectado.

ProvisionedClusterInstances

Nombre Descripción Valor
type Tipo de recurso microsoft.hybridcontainerservice/provisionedclusterinstances
apiVersion La versión de la API del recurso 2024-01-01
name El nombre del recurso String (obligatorio). No cambie esto de forma predeterminada.
properties Propiedades de un clúster conectado.
extendedLocation Ubicación extendida del clúster. ExtendedLocation

ExtendedLocation

Nombre Descripción Valor
name Identificador de la ubicación extendida. string
type Tipo de la ubicación extendida. CustomLocation

Pasos siguientes

Introducción a AKS Arc