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

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

  • Implemente um cluster do AKS com o portal do Azure.
  • Execute 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.

Nota

Para começar a provisionar rapidamente um cluster AKS, este artigo inclui etapas para implantar um cluster com configurações padrão apenas 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 ela se alinha aos seus requisitos de negócios.

Antes de começar

Este guia de introdução parte do princípio de que possui conhecimentos básicos dos conceitos do Kubernetes. Para obter mais informações, consulte Conceitos principais do Kubernetes para o Serviço Kubernetes do Azure (AKS).

Nota

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, consulte a Introdução ao Host de Contêiner Linux do Azure para AKS.

Criar um cluster do AKS

  1. Inicie sessão 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 Kubernetes do Azure (AKS).

  4. Na guia Noções básicas, defina as seguintes configurações:

    • Em Detalhes do projeto:
      • Assinatura: selecione a assinatura do Azure que você deseja usar para este cluster AKS.
      • Grupo de recursos: selecione Criar novo, insira um nome de grupo de recursos, como myResourceGroup, e selecione Ok. Embora você possa selecionar um grupo de recursos existente, para fins de teste ou avaliação, recomendamos a criação de 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:
      • Configuração predefinida do cluster: Selecione Desenvolvimento/Teste. Para obter mais detalhes sobre configurações predefinidas, consulte Predefinições de configuração de cluster no portal do Azure.

        Nota

        Você pode alterar a configuração predefinida ao criar seu cluster selecionando Comparar predefinições e escolhendo uma opção diferente. Captura de ecrã de Criar cluster AKS - opções predefinidas do portal.

      • Nome do cluster Kubernetes: insira um nome de cluster, como myAKSCluster.

      • Região: selecione uma região, como East US 2.

      • Zonas de disponibilidade: Selecione Nenhum.

      • Nível de preço do AKS: Selecione Gratuito.

      • Deixe os valores padrão para as configurações restantes e selecione Avançar.

        Captura de ecrã a mostrar como configurar um cluster AKS no portal do Azure.

  5. Na guia Pools de nós, defina as seguintes configurações:

    • Selecione Adicionar pool de nós e insira um nome de pool de nós, como nplinux.

    • Modo: Selecione Usuário.

    • OS SKU: Selecione Ubuntu Linux.

    • Zonas de disponibilidade: Selecione Nenhum.

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

    • Tamanho do nó: selecione Escolher um tamanho. Na página Selecionar um tamanho de VM, selecione D2s_v3 e, em seguida, selecione Selecionar.

    • Deixe os valores padrão para as configurações restantes e selecione Adicionar.

      Captura de tela mostrando como criar um pool de nós executando o Ubuntu Linux.

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

    A criação do cluster do AKS demora alguns minutos. Quando a implantação estiver concluída, navegue até o recurso selecionando Ir para o recurso ou navegando até o grupo de recursos do cluster AKS e selecionando o recurso AKS.

Ligar ao cluster

Você usa o cliente de linha de comando do Kubernetes, kubectl, para gerenciar clusters do Kubernetes. kubectl já está instalado se você usar o Azure Cloud Shell. Se você não estiver familiarizado com o Cloud Shell, consulte 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 Connect-AzAccount comando. Se você estiver usando a CLI do Azure localmente, conecte-se ao Azure por meio do az login comando.

  1. 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 myResourceGroup --name myAKSCluster
    
  2. Verifique a conexão com o cluster usando kubectl get para retornar uma lista dos nós do cluster.

    kubectl get nodes
    

    A saída de exemplo seguinte mostra o nó único criado nos passos anteriores. Verifique se o status do nó é Pronto.

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

Implementar a aplicação

Você usa um arquivo de manifesto para criar todos os objetos necessários para executar o aplicativo AKS Store. Um arquivo de manifesto do Kubernetes define o estado desejado de um cluster, como quais imagens de contêiner devem ser executadas. O manifesto inclui as seguintes implantações e serviços do Kubernetes:

Captura de ecrã da arquitetura de exemplo da Loja Azure.

  • Vitrine: aplicativo Web para que os clientes visualizem produtos e façam pedidos.
  • Serviço do produto: Mostra as informações do produto.
  • Serviço de pedidos: Faz pedidos.
  • Rabbit MQ: Fila de mensagens para uma fila de pedidos.

Nota

Não recomendamos a execução de contêineres com monitoração de 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 o Azure Service Bus.

  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, consulte Implantações e manifestos YAML.

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

  3. Implante o aplicativo usando o kubectl apply comando e especifique o nome do seu 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 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.

  1. Verifique o status dos pods implantados usando o kubectl get pods comando. Certifique-se de que todos os pods estão Running antes de prosseguir.

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

    kubectl get service store-front --watch
    

    A saída EXTERNAL-IP para o store-front serviço inicialmente mostra 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 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:

    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 seu serviço para ver o aplicativo da Loja Azure em ação.

    Captura de ecrã da aplicação de exemplo AKS Store.

Eliminar o cluster

Se você não planeja passar pela série de tutoriais do AKS, limpe recursos desnecessários para evitar cobranças do Azure.

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

  2. Selecione Eliminar grupo de recursos.

  3. Introduza o nome do grupo de recursos a eliminar e, em seguida, selecione Eliminar>Eliminar.

    Nota

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

Próximos passos

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

Para saber mais sobre o AKS e percorrer um exemplo completo de código para implantação, continue para a série de tutoriais do cluster Kubernetes.