Implantar um contêiner do Windows Server em um cluster do Serviço Kubernetes do Azure (AKS) usando a CLI do Azure

O Serviço Kubernetes do Azure (AKS) é um serviço Kubernetes gerenciado que permite implantar e gerenciar clusters rapidamente. Neste artigo, você usa a CLI do Azure para implantar um cluster AKS que executa contêineres do Windows Server. Você também implanta um aplicativo de exemplo de ASP.NET em um contêiner do Windows Server no cluster.

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).

  • Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Guia de início rápido para Bash no Azure Cloud Shell.

  • 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.

  • Este artigo requer a versão 2.0.64 ou posterior da CLI do Azure. Se você estiver usando o Azure Cloud Shell, a versão mais recente já está instalada lá.
  • Verifique se a identidade que você está usando para criar seu cluster tem as permissões mínimas apropriadas. Para obter mais detalhes sobre acesso e identidade para AKS, consulte Opções de acesso e identidade para o Serviço Kubernetes do Azure (AKS).
  • Se você tiver várias assinaturas do Azure, selecione a ID de assinatura apropriada na qual os recursos devem ser cobrados usando o comando az account set .

Criar um grupo de recursos

Um grupo de recursos do Azure é um grupo lógico no qual os recursos do Azure são implantados e gerenciados. Quando cria um grupo de recursos, é-lhe pedido que especifique uma localização. Esse local é onde os metadados do grupo de recursos são armazenados e onde seus recursos são executados no Azure se você não especificar outra região durante a criação do recurso.

  • Crie um grupo de recursos usando o comando az group create . O exemplo seguinte cria um grupo de recursos com o nome myResourceGroup na localização eastus. Insira este comando e outros comandos neste artigo em um shell BASH:

    az group create --name myResourceGroup --location eastus
    

    A saída de exemplo a seguir mostra o grupo de recursos criado com êxito:

    {
      "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
      "location": "eastus",
      "managedBy": null,
      "name": "myResourceGroup",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null,
      "type": null
    }
    

Criar um cluster do AKS

Nesta seção, criamos um cluster AKS com a seguinte configuração:

Para criar o cluster AKS com a CLI do Azure, siga estas etapas:

  1. Crie um nome de usuário para usar como credenciais de administrador para os nós do Windows Server em seu cluster. Os comandos a seguir solicitam um nome de usuário e o definem como WINDOWS_USERNAME para uso em um comando posterior.

    echo "Please enter the username to use as administrator credentials for Windows Server nodes on your cluster: " && read WINDOWS_USERNAME
    
  2. Crie uma senha para o nome de usuário de administrador que você criou na etapa anterior. A senha deve ter no mínimo 14 caracteres e atender aos requisitos de complexidade de senha do Windows Server.

    echo "Please enter the password to use as administrator credentials for Windows Server nodes on your cluster: " && read WINDOWS_PASSWORD
    
  3. Crie seu cluster usando o comando az aks create e especifique os --windows-admin-username parâmetros e --windows-admin-password . O comando de exemplo a seguir cria um cluster usando o valor de WINDOWS_USERNAME você definiu no comando anterior. Como alternativa, você pode fornecer um nome de usuário diferente diretamente no parâmetro em vez de usá WINDOWS_USERNAME.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --node-count 2 \
        --enable-addons monitoring \
        --generate-ssh-keys \
        --windows-admin-username $WINDOWS_USERNAME \
        --windows-admin-password $WINDOWS_PASSWORD \
        --vm-set-type VirtualMachineScaleSets \
        --network-plugin azure
    

    Após alguns minutos, o comando conclui e retorna informações formatadas em JSON sobre o cluster. Ocasionalmente, o cluster pode levar mais do que alguns minutos para ser provisionado. Aguarde até 10 minutos para provisionamento.

    Se você receber um erro de validação de senha e a senha definida atender aos requisitos de comprimento e complexidade, tente criar seu grupo de recursos em outra região. Em seguida, tente criar o cluster com o novo grupo de recursos.

    Se você não especificar um nome de usuário e senha de administrador ao criar o pool de nós, o nome de usuário será definido como azureuser e a senha será definida como um valor aleatório. Para obter mais informações, consulte Como alterar a senha de administrador para nós do Windows Server no meu cluster?.

    O nome de usuário do administrador não pode ser alterado, mas você pode alterar a senha de administrador que o cluster AKS usa para nós do Windows Server usando az aks updateo . Para obter mais informações, consulte Perguntas frequentes sobre pools de nós do Windows Server.

    Para executar um cluster AKS que ofereça suporte a pools de nós para contêineres do Windows Server, seu cluster precisa usar uma política de rede que use o plug-in de rede CNI (avançado) do Azure. O --network-plugin azure parâmetro especifica o Azure CNI.

Adicionar um conjunto de nós

Por padrão, um cluster AKS é criado com um pool de nós que pode executar contêineres Linux. Você deve adicionar outro pool de nós que possa executar contêineres do Windows Server ao lado do pool de nós do Linux.

O Windows Server 2022 é o sistema operacional padrão para o Kubernetes versões 1.25.0 e superiores. O Windows Server 2019 é o sistema operacional padrão para versões anteriores. Se você não especificar uma SKU de sistema operacional específica, o Azure criará o novo pool de nós com a SKU padrão para a versão do Kubernetes usada pelo cluster.

Para usar o SKU do sistema operacional padrão, crie o pool de nós sem especificar um SKU do sistema operacional. O pool de nós é configurado para o sistema operacional padrão com base na versão do Kubernetes do cluster.

Adicione um pool de nós do Windows usando o az aks nodepool add comando. O comando a seguir cria um novo pool de nós chamado npwin e o adiciona ao myAKSCluster. O comando também usa a sub-rede padrão na rede virtual padrão criada durante a execução do az aks create. Uma SKU do sistema operacional não é especificada, portanto, o pool de nós é definido como o sistema operacional padrão com base na versão Kubernetes do cluster:

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --os-type Windows \
    --name npwin \
    --node-count 1

Ligar ao cluster

Você usa kubectl, o cliente de linha de comando do Kubernetes, para gerenciar seus clusters Kubernetes. Se você usa o Azure Cloud Shell, kubectl já está instalado. Se você quiser instalar e executar kubectl localmente, chame o comando az aks install-cli .

  1. Configure kubectl para se conectar ao cluster do Kubernetes usando o comando az aks get-credentials . 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 o comando kubectl get , que retorna uma lista dos nós do cluster.

    kubectl get nodes -o wide
    

    A saída de exemplo a seguir mostra todos os nós no cluster. Verifique se o status de todos os nós está Pronto:

    NAME                                STATUS   ROLES   AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                         KERNEL-VERSION      CONTAINER-RUNTIME
    aks-nodepool1-20786768-vmss000000   Ready    agent   22h   v1.27.7   10.224.0.4    <none>        Ubuntu 22.04.3 LTS               5.15.0-1052-azure   containerd://1.7.5-1
    aks-nodepool1-20786768-vmss000001   Ready    agent   22h   v1.27.7   10.224.0.33   <none>        Ubuntu 22.04.3 LTS               5.15.0-1052-azure   containerd://1.7.5-1
    aksnpwin000000                      Ready    agent   20h   v1.27.7   10.224.0.62   <none>        Windows Server 2022 Datacenter   10.0.20348.2159     containerd://1.6.21+azure
    

    Nota

    O tempo de execução do contêiner para cada pool de nós é mostrado em CONTAINER-RUNTIME. Os valores de tempo de execução do contêiner começam com containerd://, o que significa que cada um deles é usado containerd para o tempo de execução do contêiner.

Implementar a aplicação

Um arquivo de manifesto do Kubernetes define um estado desejado para o cluster, como quais imagens de contêiner devem ser executadas. Neste artigo, você usa um manifesto para criar todos os objetos necessários para executar o aplicativo de exemplo ASP.NET em um contêiner do Windows Server. Esse manifesto inclui uma implantação do Kubernetes para o aplicativo de exemplo ASP.NET e um serviço Kubernetes externo para acessar o aplicativo da Internet.

O aplicativo de exemplo de ASP.NET é fornecido como parte dos exemplos do .NET Framework e é executado em um contêiner do Windows Server. O AKS requer que os contêineres do Windows Server sejam baseados em imagens do Windows Server 2019 ou superior. O arquivo de manifesto do Kubernetes também deve definir um seletor de nó para dizer ao cluster AKS para executar o pod do aplicativo de exemplo ASP.NET em um nó que possa executar contêineres do Windows Server.

  1. Crie um arquivo nomeado sample.yaml e copie na seguinte definição de YAML.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sample
      labels:
        app: sample
    spec:
      replicas: 1
      template:
        metadata:
          name: sample
          labels:
            app: sample
        spec:
          nodeSelector:
            "kubernetes.io/os": windows
          containers:
          - name: sample
            image: mcr.microsoft.com/dotnet/framework/samples:aspnetapp
            resources:
              limits:
                cpu: 1
                memory: 800M
            ports:
              - containerPort: 80
      selector:
        matchLabels:
          app: sample
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: sample
    spec:
      type: LoadBalancer
      ports:
      - protocol: TCP
        port: 80
      selector:
        app: sample
    

    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.

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

    kubectl apply -f sample.yaml
    

    A saída de exemplo a seguir mostra a implantação e o serviço criados com êxito:

    deployment.apps/sample created
    service/sample 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. Ocasionalmente, o serviço pode levar mais do que alguns minutos para ser provisionado. Aguarde até 10 minutos para provisionamento.

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

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

    kubectl get service sample --watch
    

    Inicialmente, a saída mostra o EXTERNAL-IP para o serviço de exemplo como pendente:

    NAME               TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
    sample             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:

    sample  LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   2m
    
  3. Veja o aplicativo de exemplo em ação abrindo um navegador da Web para o endereço IP externo do seu serviço.

    Captura de tela da navegação para ASP.NET aplicativo de exemplo.

Eliminar recursos

Se você não planeja passar pelo tutorial do AKS, exclua seu cluster para evitar incorrer em cobranças do Azure.

Exclua seu grupo de recursos, serviço de contêiner e todos os recursos relacionados usando o comando az group delete .

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

Nota

O cluster AKS foi criado com identidade gerenciada atribuída ao sistema (a opção de identidade padrão usada neste início rápido). A plataforma Azure gerencia essa identidade, portanto, não requer remoção.

Próximos passos

Neste início rápido, você implantou um cluster Kubernetes e, em seguida, implantou um aplicativo de exemplo de ASP.NET em um contêiner do Windows Server 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 o tutorial do cluster do Kubernetes.