Partilhar via


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

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

Este início rápido mostra como implementar um cluster do Kubernetes no AKS Arc com um modelo de Resource Manager do Azure. O Azure Arc expande as capacidades de gestão do Azure para clusters do Kubernetes em qualquer lugar, proporcionando uma abordagem unificada para gerir diferentes ambientes.

Antes de começar

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

Para implementar um modelo de Resource Manager, precisa de acesso de escrita nos recursos que está a implementar e acesso a todas as operações no tipo de recurso Microsoft.Resources/deployments. Por exemplo, para implementar uma máquina virtual, precisa de permissões Microsoft.Compute/virtualMachines/write e Microsoft.Resources/deployments/* . Para obter uma lista de funções e permissões, veja Funções incorporadas do Azure.

Pré-requisitos

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

Passo 1: preparar a sua conta do Azure

  1. Inicie sessão no Azure: abra o terminal ou a linha de comandos e inicie sessão na sua conta do Azure com a CLI do Azure:

    az login
    
  2. Defina a sua subscrição: substitua <your-subscription-id> pelo seu ID de subscrição:

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

Passo 2: criar um par de chaves SSH com a CLI do Azure

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

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

ssh-keygen -t rsa -b 4096

Para implementar o modelo, tem de fornecer a chave pública do par SSH. Para obter a chave pública, utilize o az sshkey show comando:

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

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

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

Passo 3: rever o modelo

O modelo utilizado 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"
        }
      }
    ]
  }

Passo 4: Implementar o modelo

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

A criação do cluster demora alguns minutos. Aguarde que o cluster seja implementado com êxito antes de avançar para o passo seguinte.

Passo 5: Verificar a implementação

Assim que a implementação estiver concluída, utilize 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

Passo 6: Ligar ao cluster

  1. Para ligar ao cluster, execute o az connectedk8s proxy comando . O comando transfere e executa um binário de proxy no computador cliente e obtém um ficheiro kubeconfig associado ao cluster:

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

    Em alternativa, utilize o cliente de linha de comandos kubernetes kubectl. Se utilizar o Azure Cloud Shell, o kubectl já está instalado. Para instalar e executar o kubectl localmente, execute o az aksarc install-cli comando .

    Configure o kubectl para ligar ao cluster do Kubernetes com o az aksarc get-credentials comando . Este comando transfere as credenciais e configura a CLI do Kubernetes para as utilizar:

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

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

    O resultado de exemplo seguinte mostra os três nós criados nos passos anteriores. Certifique-se de que o estado do nó está 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 do modelo

connectedClusters

Nome Descrição Valor
type O tipo de recurso. Microsoft.Kubernetes/ConnectedClusters
apiVersion A versão da API de recurso. 2024-01-01
name O nome do recurso. Cadeia (obrigatório)
Limite de carateres: 1-63
Carateres válidos: Alfanuméricos, carateres de sublinhado e hífenes.
Comece e termine com alfanumérico.
location A localização geográfica na qual o recurso se encontra. Cadeia (obrigatório).
tags Etiquetas de recursos. Dicionário de nomes e valores de etiquetas. Veja Etiquetas em modelos.
extendedLocation A localização expandida da máquina virtual. ExtendedLocation
identity A identidade do cluster ligado, se configurado.
properties Propriedades de um cluster ligado.

ProvisionedClusterInstances

Nome Descrição Valor
type O tipo de recurso microsoft.hybridcontainerservice/provisionedclusterinstances
apiVersion A versão da API de recurso 2024-01-01
name O nome do recurso Cadeia (obrigatório). Não altere esta opção por predefinição.
properties Propriedades de um cluster ligado.
extendedLocation A localização expandida do cluster. ExtendedLocation

ExtendedLocation

Nome Descrição Valor
name O ID da localização expandida. string
type O tipo de localização expandida. CustomLocation

Passos seguintes

Descrição geral do AKS Arc