Avvio rapido: distribuire un cluster Kubernetes usando un modello di Azure Resource Manager

Si applica a: Azure Stack HCI, versione 23H2

Questa guida introduttiva illustra come distribuire un cluster Kubernetes in AKS Arc usando un modello di Azure Resource Manager. Azure Arc estende le funzionalità di gestione di Azure ai cluster Kubernetes ovunque, fornendo un approccio unificato alla gestione di ambienti diversi.

Prima di iniziare

Questo articolo presuppone una conoscenza di base dei concetti relativi a Kubernetes.

Per distribuire un modello di Resource Manager, è necessario accedere in scrittura alle risorse distribuite e accedere a tutte le operazioni sul tipo di risorsa Microsoft.Resources/deployments. Ad esempio, per distribuire una macchina virtuale, sono necessarie autorizzazioni Microsoft.Compute/virtualMachines/write e Microsoft.Resources/deployments/* . Per un elenco dei ruoli e delle autorizzazioni, vedere Ruoli predefiniti di Azure.

Prerequisiti

  • Un account Azure con una sottoscrizione attiva.
  • Cluster Azure Stack HCI 23H2.
  • Versione più recente dell'interfaccia della riga di comando di Azure.

Passaggio 1: preparare l'account Azure

  1. Accedere ad Azure: aprire il prompt dei comandi o il terminale e accedere all'account Azure usando l'interfaccia della riga di comando di Azure:

    az login
    
  2. Impostare la sottoscrizione: sostituire <your-subscription-id> con l'ID sottoscrizione:

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

Passaggio 2: creare una coppia di chiavi SSH con l'interfaccia della riga di comando di Azure

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

oppure creare una coppia di chiavi SSH usando ssh-keygen:

ssh-keygen -t rsa -b 4096

Per distribuire il modello, è necessario specificare la chiave pubblica dalla coppia SSH. Per recuperare la chiave pubblica, usare il az sshkey show comando:

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

Per impostazione predefinita, i file di chiave SSH vengono creati nella directory ~/.ssh . Eseguire il az sshkey create comando o ssh-keygen per sovrascrivere qualsiasi coppia di chiavi SSH esistente con lo stesso nome.

Per altre informazioni su come creare le chiavi SSH, vedere Creare e gestire chiavi SSH per l'autenticazione in una macchina virtuale Linux in Azure.

Passaggio 3: Esaminare il modello

Il modello usato in questa guida introduttiva è dal repository modelli di avvio rapido di 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"
        }
      }
    ]
  }

Passaggio 4: Distribuire il modello

Per distribuire il modello, eseguire il comando seguente per distribuire il cluster 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 creazione del cluster richiede alcuni minuti. Attendere il completamento della distribuzione del cluster prima di procedere al passaggio successivo.

Passaggio 5: Verificare la distribuzione

Al termine della distribuzione, usare il comando seguente per verificare che il cluster Kubernetes sia attivo ed in esecuzione:

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

Passaggio 6: Connettersi al cluster

  1. Per connettersi al cluster, eseguire il az connectedk8s proxy comando . Il comando scarica ed esegue un file binario proxy nel computer client e recupera un file kubeconfig associato al cluster:

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

    In alternativa, usare il client della riga di comando Kubernetes, kubectl. Se si usa Azure Cloud Shell, kubectl è già installato. Per installare ed eseguire kubectl in locale, eseguire il az aksarc install-cli comando.

    Configurare kubectl per connettersi al cluster Kubernetes usando il az aksarc get-credentials comando . Questo comando scarica le credenziali e configura l'interfaccia della riga di comando di Kubernetes per usarle:

    az aksarc get-credentials --resource-group "<resource-group-name>" --name "<cluster-name>"
    
  2. Verificare la connessione al cluster usando il kubectl get comando . Questo comando restituisce un elenco dei nodi del cluster:

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

    L'output dell'esempio seguente mostra i tre nodi creati nei passaggi precedenti. Assicurarsi che lo stato del nodo sia Pronto:

    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
    

Risorse del modello

connectedClusters

Nome Descrizione Valore
type Tipo di risorsa. Microsoft.Kubernetes/ConnectedClusters
apiVersion Versione dell'API risorsa. 2024-01-01
name Nome della risorsa. Stringa (obbligatoria)
Limite di caratteri: 1-63
Caratteri validi: alfanumerici, caratteri di sottolineatura e trattini.
Deve iniziare e terminare con un carattere alfanumerico.
location Posizione geografica in cui vive la risorsa. Stringa (obbligatoria).
tags Tag di risorse. Dizionario dei nomi e dei valori dei tag. Vedere Tag nei modelli.
extendedLocation Percorso esteso della macchina virtuale. ExtendedLocation
identity Identità del cluster connesso, se configurata.
properties Proprietà di un cluster connesso.

ProvisionedClusterInstances

Nome Descrizione Valore
type Tipo di risorsa microsoft.hybridcontainerservice/provisionedclusterinstances
apiVersion Versione dell'API delle risorse 2024-01-01
name Nome della risorsa Stringa (obbligatoria). Non modificare questa impostazione dal valore predefinito.
properties Proprietà di un cluster connesso.
extendedLocation Posizione estesa del cluster. ExtendedLocation

ExtendedLocation

Nome Descrizione Valore
name ID della posizione estesa. string
type Tipo della posizione estesa. CustomLocation

Passaggi successivi

Panoramica di Arc del servizio Azure Kubernetes