Partilhar via


Guia de início rápido: implantar um host de contêiner Linux do Azure para cluster AKS usando um modelo ARM

Comece a usar o Host de Contêiner Linux do Azure usando um modelo ARM (Azure Resource Manager) para implantar um cluster de Host de Contêiner Linux do Azure. Depois de instalar os pré-requisitos, você criará um par de chaves SSH, revisará o modelo, implantará o modelo e o validará e, em seguida, implantará um aplicativo.

Um modelo do Azure Resource Manager é um arquivo JSON (JavaScript Object Notation) que define a infraestrutura e a configuração do seu projeto. O modelo utiliza sintaxe declarativa. Você descreve a implantação pretendida sem escrever a sequência de comandos de programação para criar a implantação.

Pré-requisitos

  • Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.

  • Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Azure Cloud Shell Quickstart - Bash.

  • Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.

    • Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.

    • Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.

    • Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade.

  • Se você ainda não tiver o kubectl instalado, instale-o por meio da CLI do Azure usando az aks install-cli ou siga as instruções upstream.

  • Para criar um cluster AKS usando um modelo do Resource Manager, forneça uma chave pública SSH. Se você precisar desse recurso, consulte a seção a seguir; caso contrário, pule para a seção Revisar o modelo .

  • A identidade que você está usando para criar seu cluster tem as permissões mínimas apropriadas. Para obter mais informações sobre acesso e identidade para AKS, consulte Opções de acesso e identidade para o Serviço Kubernetes do Azure (AKS).

  • Para implementar um ficheiro Bicep ou modelo do ARM, 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 das 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.

Criar um par de chaves SSH

Para acessar os nós AKS, você se conecta usando um par de chaves SSH (público e privado), que você gera usando o ssh-keygen comando. Por padrão, esses arquivos são criados no diretório ~/.ssh . A execução do ssh-keygen comando substitui qualquer par de chaves SSH com o mesmo nome já existente no local determinado.

  1. Vá para https://shell.azure.com abrir o Cloud Shell no seu navegador.

  2. Execute o comando ssh-keygen. O exemplo a seguir cria um par de chaves SSH usando criptografia RSA e um comprimento de bit de 4096:

    ssh-keygen -t rsa -b 4096
    

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

Rever o modelo

A implantação a seguir usa um modelo ARM dos Modelos de Início Rápido do Azure.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.1",
  "parameters": {
    "clusterName": {
      "type": "string",
      "defaultValue": "azurelinuxakscluster",
      "metadata": {
        "description": "The name of the Managed Cluster resource."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The location of the Managed Cluster resource."
      }
    },
    "dnsPrefix": {
      "type": "string",
      "metadata": {
        "description": "Optional DNS prefix to use with hosted Kubernetes API server FQDN."
      }
    },
    "osDiskSizeGB": {
      "type": "int",
      "defaultValue": 0,
      "minValue": 0,
      "maxValue": 1023,
      "metadata": {
        "description": "Disk size (in GB) to provision for each of the agent pool nodes. This value ranges from 0 to 1023. Specifying 0 will apply the default disk size for that agentVMSize."
      }
    },
    "agentCount": {
      "type": "int",
      "defaultValue": 3,
      "minValue": 1,
      "maxValue": 50,
      "metadata": {
        "description": "The number of nodes for the cluster."
      }
    },
    "agentVMSize": {
      "type": "string",
      "defaultValue": "Standard_DS2_v2",
      "metadata": {
        "description": "The size of the Virtual Machine."
      }
    },
    "linuxAdminUsername": {
      "type": "string",
      "metadata": {
        "description": "User name for the Linux Virtual Machines."
      }
    },
    "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 azureuser@linuxvm'"
      }
    },
    "osType": {
      "type": "string",
      "defaultValue": "Linux",
      "allowedValues": [
        "Linux"
      ],
      "metadata": {
        "description": "The type of operating system."
      }
    },
    "osSKU": {
      "type": "string",
      "defaultValue": "AzureLinux",
      "allowedValues": [
        "AzureLinux",
        "Ubuntu"
      ],
      "metadata": {
        "description": "The Linux SKU to use."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.ContainerService/managedClusters",
      "apiVersion": "2021-03-01",
      "name": "[parameters('clusterName')]",
      "location": "[parameters('location')]",
      "properties": {
        "dnsPrefix": "[parameters('dnsPrefix')]",
        "agentPoolProfiles": [
          {
            "name": "agentpool",
            "mode": "System",
            "osDiskSizeGB": "[parameters('osDiskSizeGB')]",
            "count": "[parameters('agentCount')]",
            "vmSize": "[parameters('agentVMSize')]",
            "osType": "[parameters('osType')]",
            "osSKU": "[parameters('osSKU')]",
            "storageProfile": "ManagedDisks"
          }
        ],
        "linuxProfile": {
          "adminUsername": "[parameters('linuxAdminUsername')]",
          "ssh": {
            "publicKeys": [
              {
                "keyData": "[parameters('sshRSAPublicKey')]"
              }
            ]
          }
        }
      },
      "identity": {
          "type": "SystemAssigned"
      }
    }
  ],
  "outputs": {
    "controlPlaneFQDN": {
      "type": "string",
      "value": "[reference(parameters('clusterName')).fqdn]"
    }
  }
}

Para adicionar o Azure Linux a um modelo ARM existente, você precisa adicionar "osSKU": "AzureLinux" e "mode": "System" definir agentPoolProfiles a apiVersion como 2021-03-01 ou mais recente ("apiVersion": "2021-03-01").

Implementar o modelo

  1. Selecione o botão a seguir para entrar no Azure e abrir um modelo.

    Botão para implantar o modelo do Gerenciador de Recursos no Azure.

  2. Selecione ou introduza os seguintes valores.

    Para este início rápido, deixe os valores padrão para o GB de tamanho de disco do sistema operacional, contagem de agentes, tamanho da VM do agente, tipo de sistema operacional e versão do Kubernetes. Forneça seus próprios valores para os seguintes parâmetros de modelo:

    • Subscrição: selecione uma subscrição do Azure.
    • Grupo de recursos: selecione Criar novo. Insira um nome exclusivo para o grupo de recursos, como testAzureLinuxResourceGroup, e escolha OK.
    • Localização: selecione um local, como East US.
    • Nome do cluster: insira um nome exclusivo para o cluster AKS, como testAzureLinuxCluster.
    • Prefixo DNS: insira um prefixo DNS exclusivo para seu cluster, como myAzureLinuxCluster.
    • Linux Admin Username: insira um nome de usuário para se conectar usando SSH, como azureUser.
    • Chave Pública RSA SSH: copie e cole a parte pública do seu par de chaves SSH (por padrão, o conteúdo de ~/.ssh/id_rsa.pub).

    Captura de ecrã do modelo do Resource Manager para criar um cluster do Serviço Kubernetes do Azure no portal.

  3. Selecione Rever + Criar.

Leva alguns minutos para criar o cluster de Host de Contêiner Linux do Azure. Aguarde até que o cluster seja implantado com êxito antes de passar para a próxima etapa.

Validar a implementação

Ligar ao cluster

Para gerenciar um cluster Kubernetes, use o cliente de linha de comando Kubernetes, kubectl.

  1. Instale kubectl localmente usando o az aks install-cli comando:

    az aks install-cli
    
  2. Configure kubectl para se conectar ao cluster do Kubernetes usando o az aks get-credentials comando. Este comando baixa credenciais e configura a CLI do Kubernetes para usá-las.

    az aks get-credentials --resource-group testAzureLinuxResourceGroup --name testAzureLinuxCluster
    
  3. Verifique a conexão com o cluster usando o kubectl get comando. Este comando retorna uma lista dos nós do cluster.

    kubectl get nodes
    

    O exemplo de saída a seguir mostra os três nós criados nas etapas anteriores. Verifique se o status do nó está Pronto:

    NAME                       STATUS   ROLES   AGE     VERSION
    aks-agentpool-41324942-0   Ready    agent   6m44s   v1.12.6
    aks-agentpool-41324942-1   Ready    agent   6m46s   v1.12.6
    aks-agentpool-41324942-2   Ready    agent   6m45s   v1.12.6
    

Implementar a aplicação

Um arquivo de manifesto do Kubernetes define o estado desejado de um cluster, como quais imagens de contêiner devem ser executadas.

Neste início rápido, você usa um manifesto para criar todos os objetos necessários para executar o aplicativo Azure Vote. Esse manifesto inclui duas implantações do Kubernetes:

  • O exemplo de aplicativos Python do Azure Vote.
  • Uma instância Redis.

Dois Serviços Kubernetes também são criados:

  • Um serviço interno para a instância Redis.
  • Um serviço externo para acessar o aplicativo Azure Vote da Internet.
  1. Crie um ficheiro com o nome azure-vote.yaml.

    • Se você usar o Azure Cloud Shell, esse arquivo poderá ser criado usando code, viou nano como se estivesse trabalhando em um sistema virtual ou físico
  2. Copie na seguinte definição de YAML:

    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: mcr.microsoft.com/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: mcr.microsoft.com/azuredocs/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
    

    Para obter um detalhamento dos arquivos de manifesto YAML, consulte Implantações e manifestos YAML.

  3. Implante o aplicativo usando o comando kubectl apply e especifique o nome do seu manifesto YAML:

    kubectl apply -f azure-vote.yaml
    

    O exemplo a seguir é semelhante à saída mostrando as implantações e serviços criados com êxito:

    deployment "azure-vote-back" created
    service "azure-vote-back" created
    deployment "azure-vote-front" created
    service "azure-vote-front" created
    

Testar a aplicação

Quando o aplicativo é executado, um serviço Kubernetes expõe o front-end do aplicativo à Internet. Este processo pode demorar alguns minutos a concluir.

Monitore o progresso usando o comando kubectl get service com o --watch argumento.

kubectl get service azure-vote-front --watch

A saída EXTERNAL-IP para o serviço será inicialmente mostrada azure-vote-front como pendente.

NAME               TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27   <pending>     80:30572/TCP   6s

Quando o endereço EXTERNAL-IP mudar de pendente para um endereço IP público real, use CTRL-C para interromper o kubectl processo de monitoramento. A saída de exemplo a seguir mostra um endereço IP público válido atribuído ao serviço:

azure-vote-front   LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   2m

Para ver o aplicativo Azure Vote em ação, abra um navegador da Web para o endereço IP externo do seu serviço.

Captura de ecrã da navegação para a aplicação de exemplo Azure Vote.

Eliminar o cluster

Se você não vai continuar com os tutoriais a seguir, para evitar cobranças do Azure, limpe todos os recursos desnecessários. Use o az group delete comando para remover o grupo de recursos e todos os recursos relacionados.

az group delete --name testAzureLinuxCluster --yes --no-wait

Próximos passos

Neste início rápido, você implantou um cluster de Host de Contêiner Linux do Azure. Para saber mais sobre o Host de Contêiner Linux do Azure e percorrer um exemplo completo de implantação e gerenciamento de cluster, continue para o tutorial do Host de Contêiner Linux do Azure.