Início Rápido: implantar um cluster do AKS (Serviço de Kubernetes do Azure) usando o portal do Azure

O AKS (Serviço de Kubernetes do Azure) é um serviço de Kubernetes gerenciado que permite implantar e gerenciar clusters rapidamente. Neste início rápido, você:

  • Implantar um cluster do AKS usando o portal do Azure.
  • Executar um aplicativo de vários contêineres de exemplo com um grupo de microsserviços e front-ends da Web simulando um cenário de varejo.

Observação

Para começar a provisionar rapidamente um cluster do AKS, este artigo inclui etapas para implantar um cluster com configurações padrão somente para fins de avaliação. Antes de implantar um cluster pronto para produção, recomendamos que você se familiarize com nossa arquitetura de referência de linha de base para considerar como ele se alinha aos seus requisitos de negócios.

Antes de começar

Este guia de início rápido pressupõe uma compreensão básica dos conceitos do Kubernetes. Para obter mais informações, confira Principais conceitos do Kubernetes para o AKS (Serviço de Kubernetes do Azure).

Observação

O pool de nós do Linux do Azure agora está disponível em geral (GA). Para saber mais sobre os benefícios e as etapas de implantação, confira a Introdução ao host de contêiner do Linux do Azure para AKS.

Criar um cluster AKS

  1. Entre no portal do Azure.

  2. Na home page do portal do Azure, selecione Criar um recurso.

  3. Na seção Categorias, selecione Contêineres>Serviço de Kubernetes do Azure (AKS).

  4. Na guia Básico, configure os seguintes valores:

    • Em Detalhes do projeto:
      • Selecione uma Assinatura do Azure.
      • Crie um Grupo de recursos do Azure, como myResourceGroup. Embora você possa selecionar um grupo de recursos existente, para fins de teste ou avaliação, recomendamos criar um grupo de recursos para hospedar temporariamente esses recursos e evitar afetar suas cargas de trabalho de produção ou desenvolvimento.
    • Em Detalhes do cluster:
      • Defina a Configuração predefinida do cluster como Desenvolvimento/Teste. Para obter mais detalhes sobre configurações predefinidas, confira Predefinições de configuração de cluster no portal do Azure.

        Observação

        Você pode alterar a configuração predefinida ao criar o cluster selecionando Comparar as configurações predefinidas e escolhendo uma opção diferente. Screenshot of Create AKS cluster - portal preset options.

      • Insira um nome do cluster do Kubernetes, como myAKSCluster.

      • Selecione uma Região para o cluster do AKS.

      • Defina as Zonas de disponibilidade como Nenhuma.

      • Defina o tipo de preço do AKS como Gratuito.

      • Deixe o valor padrão selecionado para a versão do Kubernetes.

      • Deixe a configuração Atualização automática definida como o valor recomendado, que é Habilitado com patch.

      • Deixe a configuração Autenticação e autorização definida como Contas locais com RBAC do Kubernetes.

        Screenshot showing how to configure an AKS cluster in Azure portal.

  5. Selecione Avançar. Na guia Pools de nós, adicione um novo pool de nós:

    • Selecione Adicionar Pool de nós.

    • Insira um Nome do pool de nós, como nplinux.

    • Para Modo, selecione Usuário.

    • Para o SKU do sistema operacional, selecione Ubuntu Linux.

    • Defina as Zonas de disponibilidade como Nenhuma.

    • Deixe a caixa de seleção Habilitar instâncias de Spot do Azure desmarcada.

    • Em Tamanho do nó, selecione Escolher um tamanho. Na página Selecionar um tamanho de VM, selecione D2s_v3 e escolha o botão Selecionar.

    • Deixe a configuração Método de dimensionamento definida como Dimensionamento Automático.

    • Deixe os campos Quantidade mínima de nós e Quantidade máxima de nós definidos como suas configurações padrão.

      Screenshot showing how to create a node pool running Ubuntu Linux.

  6. Deixe todas as configurações nas outras guias definidas para seus padrões, exceto para as configurações na guia Monitoramento. Por padrão, os recursos do Azure Monitor insights de contêiner, o serviço gerenciado do Azure Monitor para Prometheus e o Espaço Gerenciado do Azure para Grafana estão habilitados. Você pode economizar custos desabilitando-os.

  7. Selecione Examinar + criar para executar a validação na configuração do cluster. Após a conclusão da validação, selecione Criar para criar o cluster do AKS.

Leva alguns minutos para o cluster do AKS ser criado. Quando a implantação for concluída, navegue até o recurso:

  • Selecionando Ir para recurso ou
  • Navegando até o grupo de recursos de cluster do AKS e selecionando o recurso do AKS. Neste exemplo, você procura myResourceGroup e seleciona o recurso myAKSCluster.

Conectar-se ao cluster

Para gerenciar um cluster do Kubernetes, use o cliente de linha de comando do Kubernetes, kubectl. kubectl já está instalado se você usa o Azure Cloud Shell. Caso não esteja familiarizado com o Cloud Shell, revise a Visão Geral do Azure Cloud Shell.

Se você estiver usando o Cloud Shell, abra-o com o botão >_ na parte superior do portal do Azure. Se você estiver usando o PowerShell localmente, conecte-se ao Azure por meio do comando Connect-AzAccount. Se você estiver usando a CLI do Azure localmente, conecte-se ao Azure por meio do comando az login.

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

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. Verifique a conexão com o cluster usando kubectl get para retornar uma lista dos nós de cluster.

    kubectl get nodes
    

    A saída de exemplo a seguir mostra o único nó criado nas etapas anteriores. Verifique se que o status do nó é Pronto.

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-31718369-0   Ready    agent   6m44s   v1.15.10
    

Implantar o aplicativo

A fim de implantar o aplicativo, use um arquivo de manifesto para criar todos os objetos necessários para executar o Aplicativo da Loja do AKS. Um arquivo de manifesto do Kubernetes define o estado desejado de um cluster, por exemplo, as imagens de contêiner a serem executadas. O manifesto inclui as seguintes implantações e serviços do Kubernetes:

Screenshot of Azure Store sample architecture.

  • Frente de loja: Aplicativo Web para clientes visualizarem produtos e fazerem pedidos.
  • Serviço do produto: Mostra informações do produto.
  • Serviço de pedido: Realiza pedidos.
  • Rabbit MQ: Fila de mensagens de uma fila de pedidos.

Observação

Não é recomendável executar contêineres com estado, como o Rabbit MQ, sem armazenamento persistente para produção. Eles são usados aqui para simplificar, mas recomendamos o uso de serviços gerenciados, como o Azure CosmosDB ou Barramento de Serviço do Azure.

  1. No Cloud Shell, abra um editor e crie um arquivo chamado aks-store-quickstart.yaml.

  2. Cole o seguinte manifesto no editor:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: rabbitmq
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: rabbitmq
      template:
        metadata:
          labels:
            app: rabbitmq
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: rabbitmq
            image: mcr.microsoft.com/mirror/docker/library/rabbitmq:3.10-management-alpine
            ports:
            - containerPort: 5672
              name: rabbitmq-amqp
            - containerPort: 15672
              name: rabbitmq-http
            env:
            - name: RABBITMQ_DEFAULT_USER
              value: "username"
            - name: RABBITMQ_DEFAULT_PASS
              value: "password"
            resources:
              requests:
                cpu: 10m
                memory: 128Mi
              limits:
                cpu: 250m
                memory: 256Mi
            volumeMounts:
            - name: rabbitmq-enabled-plugins
              mountPath: /etc/rabbitmq/enabled_plugins
              subPath: enabled_plugins
          volumes:
          - name: rabbitmq-enabled-plugins
            configMap:
              name: rabbitmq-enabled-plugins
              items:
              - key: rabbitmq_enabled_plugins
                path: enabled_plugins
    ---
    apiVersion: v1
    data:
      rabbitmq_enabled_plugins: |
        [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0].
    kind: ConfigMap
    metadata:
      name: rabbitmq-enabled-plugins
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: rabbitmq
    spec:
      selector:
        app: rabbitmq
      ports:
        - name: rabbitmq-amqp
          port: 5672
          targetPort: 5672
        - name: rabbitmq-http
          port: 15672
          targetPort: 15672
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: order-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: order-service
      template:
        metadata:
          labels:
            app: order-service
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: order-service
            image: ghcr.io/azure-samples/aks-store-demo/order-service:latest
            ports:
            - containerPort: 3000
            env:
            - name: ORDER_QUEUE_HOSTNAME
              value: "rabbitmq"
            - name: ORDER_QUEUE_PORT
              value: "5672"
            - name: ORDER_QUEUE_USERNAME
              value: "username"
            - name: ORDER_QUEUE_PASSWORD
              value: "password"
            - name: ORDER_QUEUE_NAME
              value: "orders"
            - name: FASTIFY_ADDRESS
              value: "0.0.0.0"
            resources:
              requests:
                cpu: 1m
                memory: 50Mi
              limits:
                cpu: 75m
                memory: 128Mi
          initContainers:
          - name: wait-for-rabbitmq
            image: busybox
            command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done;']
            resources:
              requests:
                cpu: 1m
                memory: 50Mi
              limits:
                cpu: 75m
                memory: 128Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: order-service
    spec:
      type: ClusterIP
      ports:
      - name: http
        port: 3000
        targetPort: 3000
      selector:
        app: order-service
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: product-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: product-service
      template:
        metadata:
          labels:
            app: product-service
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: product-service
            image: ghcr.io/azure-samples/aks-store-demo/product-service:latest
            ports:
            - containerPort: 3002
            resources:
              requests:
                cpu: 1m
                memory: 1Mi
              limits:
                cpu: 1m
                memory: 7Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: product-service
    spec:
      type: ClusterIP
      ports:
      - name: http
        port: 3002
        targetPort: 3002
      selector:
        app: product-service
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: store-front
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: store-front
      template:
        metadata:
          labels:
            app: store-front
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: store-front
            image: ghcr.io/azure-samples/aks-store-demo/store-front:latest
            ports:
            - containerPort: 8080
              name: store-front
            env:
            - name: VUE_APP_ORDER_SERVICE_URL
              value: "http://order-service:3000/"
            - name: VUE_APP_PRODUCT_SERVICE_URL
              value: "http://product-service:3002/"
            resources:
              requests:
                cpu: 1m
                memory: 200Mi
              limits:
                cpu: 1000m
                memory: 512Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: store-front
    spec:
      ports:
      - port: 80
        targetPort: 8080
      selector:
        app: store-front
      type: LoadBalancer
    

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

    Se você criar e salvar o arquivo YAML localmente, poderá carregar o arquivo de manifesto no diretório padrão no CloudShell selecionando o botão Carregar/Baixar arquivos e selecionando o arquivo no sistema de arquivos local.

  3. Implante o aplicativo usando o comando kubectl apply. Além disso, especifique o nome do manifesto YAML:

    kubectl apply -f aks-store-quickstart.yaml
    

    A saída de exemplo a seguir mostra as implantações e os serviços:

    deployment.apps/rabbitmq created
    service/rabbitmq created
    deployment.apps/order-service created
    service/order-service created
    deployment.apps/product-service created
    service/product-service created
    deployment.apps/store-front created
    service/store-front created
    

Testar o aplicativo

Quando o aplicativo é executado, um serviço de Kubernetes expõe o front-end do aplicativo à Internet. A conclusão desse processo pode levar alguns minutos.

  1. Verifique o status dos pods implantados usando o comando kubectl get pods. Faça com que todos os pods estejam Running antes de continuar.

    kubectl get pods
    
  2. Verifique se há um endereço IP público para o aplicativo de store-front. Monitore o andamento usando o comando kubectl get service com o argumento --watch.

    kubectl get service store-front --watch
    

    A saída EXTERNAL-IP do serviço store-front será mostrada inicialmente como pendente:

    NAME          TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    store-front   LoadBalancer   10.0.100.10   <pending>     80:30025/TCP   4h4m
    

    Quando o endereço EXTERNAL-IP for alterado de pendente para um endereço IP público real, use CTRL-C para interromper o processo de inspeção do kubectl.

    A seguinte saída de exemplo mostra um endereço IP público válido atribuído ao serviço:

    NAME          TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)        AGE
    store-front   LoadBalancer   10.0.100.10   20.62.159.19   80:30025/TCP   4h5m
    
  3. Abra um navegador da Web no endereço IP externo do serviço para conferir o aplicativo do Microsoft Azure Store em ação.

    Screenshot of AKS Store sample application.

Excluir o cluster

Se você não planeja seguir o tutorial do AKS, limpe os recursos desnecessários para evitar cobranças do Azure.

  1. No portal do Azure, navegue até o grupo de recursos do cluster do AKS.

  2. Selecione Excluir grupo de recursos.

  3. Insira o nome do grupo de recursos a ser excluído e selecione Excluir>Excluir.

    Observação

    O cluster do AKS foi criado com uma identidade gerenciada atribuída pelo sistema. Essa identidade é gerenciada pela plataforma e não requer remoção.

Próximas etapas

Neste início rápido, você implantou um cluster do Kubernetes e um simples aplicativo com vários contêineres. Esse aplicativo de exemplo é apenas para fins de demonstração e não representa todas as melhores práticas para aplicativos do Kubernetes. Para obter diretrizes sobre como criar soluções completas com o AKS para produção, consulte Diretrizes sobre a solução AKS.

Para saber mais sobre o AKS e percorrer um código completo de exemplo de implantação, prossiga para o tutorial de cluster do Kubernetes.