Compartilhar via


Início Rápido: implantar um cluster do Kubernetes usando um modelo de Resource Manager do Azure

Aplica-se a: Azure Stack HCI, versão 23H2

Este início rápido mostra como implantar um cluster do Kubernetes no AKS Arc usando um modelo de Resource Manager do Azure. O Azure Arc estende os recursos de gerenciamento do Azure para clusters do Kubernetes em qualquer lugar, fornecendo uma abordagem unificada para gerenciar ambientes diferentes.

Antes de começar

Este artigo pressupõe uma compreensão básica dos conceitos do Kubernetes.

Para implantar um modelo de Resource Manager, você precisa de acesso de gravação nos recursos que está implantando e acesso a todas as operações no tipo de recurso Microsoft.Resources/deployments. Por exemplo, para implantar uma máquina virtual, você precisa de permissões Microsoft.Compute/virtualMachines/write e Microsoft.Resources/deployments/* . Para ver uma lista de funções e permissões, consulte Funções interna do Azure.

Pré-requisitos

  • Uma conta do Azure com uma assinatura ativa.
  • Um cluster do Azure Stack HCI 23H2.
  • A versão mais recente da CLI do Azure.

Etapa 1: preparar sua conta do Azure

  1. Entre no Azure: abra seu terminal ou prompt de comando e entre em sua conta do Azure usando a CLI do Azure:

    az login
    
  2. Defina sua assinatura: substitua <your-subscription-id> pela ID da assinatura:

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

Etapa 2: criar um par de chaves SSH usando a CLI do Azure

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

ou crie um par de chaves SSH usando ssh-keygen:

ssh-keygen -t rsa -b 4096

Para implantar o modelo, você deve fornecer a chave pública do par SSH. Para recuperar a chave pública, use o az sshkey show comando :

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

Por padrão, os arquivos de chave SSH são criados no diretório ~/.ssh . Execute o az sshkey create comando ou ssh-keygen para substituir qualquer par de chaves SSH existente com o mesmo nome.

Para obter mais informações sobre como criar chaves SSH, confira Criar e gerenciar chaves SSH para autenticação no Azure.

Etapa 3: Examinar o modelo

O modelo usado neste início rápido é do repositório Modelos de Início Rápido do 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"
        }
      }
    ]
  }

Etapa 4: Implantar o modelo

Para implantar o modelo, execute o seguinte comando para implantar o cluster do 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..."

São necessários alguns minutos para criar o cluster. Aguarde até que o cluster seja implantado com êxito antes de passar para a próxima etapa.

Etapa 5: Verificar a implantação

Depois que a implantação for concluída, use o seguinte comando para verificar se o cluster do Kubernetes está em execução:

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

Etapa 6: Conectar-se ao cluster

  1. Para se conectar ao cluster, execute o az connectedk8s proxy comando . O comando baixa e executa um binário de proxy no computador cliente e busca um arquivo kubeconfig associado ao cluster:

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

    Ou use o cliente de linha de comando kubernetes, kubectl. Se você usar o Cloud Shell do Azure, o kubectl já estará instalado. Para instalar e executar o kubectl localmente, execute o az aksarc install-cli comando .

    Configure o kubectl para se conectar ao cluster do Kubernetes usando o az aksarc get-credentials comando . Este comando baixa as credenciais e configura a CLI do Kubernetes para usá-las:

    az aksarc get-credentials --resource-group "<resource-group-name>" --name "<cluster-name>"
    
  2. Verifique a conexão com o cluster usando o comando kubectl get. Este comando retorna uma lista dos nós de cluster:

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

    A saída de exemplo a seguir mostra os três nós criados nas etapas anteriores. Verifique se que o status do nó é 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
    

Recursos de modelo

connectedClusters

Nome Descrição Valor
type O tipo de recurso. Microsoft.Kubernetes/ConnectedClusters
apiVersion A versão da API do recurso. 2024-01-01
name O nome do recurso. Cadeia de caracteres (obrigatório)
Limite de caracteres: 1 a 63
Caracteres válidos: alfanuméricos, sublinhados e hifens.
Comece e termine com caractere alfanumérico.
location A localização geográfica na qual o recurso reside. Cadeia de caracteres (obrigatório).
tags Marcas de recurso. Dicionário de nomes e valores de marcas. Consulte Marcas em modelos.
extendedLocation O local estendido da máquina virtual. ExtendedLocation
identity A identidade do cluster conectado, se configurada.
properties Propriedades de um cluster conectado.

ProvisionedClusterInstances

Nome Descrição Valor
type O tipo de recurso microsoft.hybridcontainerservice/provisionedclusterinstances
apiVersion A versão da API do recurso 2024-01-01
name O nome do recurso Cadeia de caracteres (obrigatório). Não altere isso do padrão.
properties Propriedades de um cluster conectado.
extendedLocation O local estendido do cluster. ExtendedLocation

ExtendedLocation

Nome Descrição Valor
name A ID do local estendido. string
type O tipo do local estendido. Customlocation

Próximas etapas

Visão geral do AKS Arc