Partilhar via


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 pressupõe que tem conhecimentos básicos sobre os conceitos do Kubernetes. Para obter mais informações, consulte Conceitos principais do Kubernetes para o Serviço Kubernetes do Azure (AKS).

  • 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 az account set comando. Para obter mais informações, consulte Como gerenciar assinaturas do Azure – CLI do Azure.
  • Se estiveres a usar --os-sku Windows2025, precisas de instalar a extensão aks-preview e registar o flag de pré-visualização. A versão mínima é 18.0.0b40.

Instalar a aks-preview extensão

Importante

Os recursos de pré-visualização do AKS estão disponíveis numa base de autosserviço e adesão voluntária. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões de teste do AKS são parcialmente cobertas pelo suporte ao cliente numa base de melhor esforço. Assim sendo, estas funcionalidades não se destinam ao uso em produção. Para obter mais informações, consulte os seguintes artigos de suporte:

  1. Instale a aks-preview extensão da CLI do Azure usando o az extension add comando.
az extension add --name aks-preview
  1. Atualize para a versão mais recente da extensão usando o az extension update comando. O Windows Server 2025 requer um mínimo de 18.0.0b40.
az extension update --name aks-preview

Registar o sinalizador de funcionalidade AksWindows2025Preview

  1. Use o comando [AksWindows2025Preview][az-feature-register] para registar o az feature register flag de funcionalidade.
az feature register --name AksWindows2025Preview --namespace Microsoft.ContainerService
  1. Verifique o status do registro usando o comando [az feature show][az-feature-show]. Leva alguns minutos para que o status mostre Registrado.
az feature show --name AksWindows2025Preview --namespace Microsoft.ContainerService
  1. Quando o status indicar Registrado, atualizar o registo do fornecedor de recursos Microsoft.ContainerService usando o comando [az provider register][az-provider-register].

    az provider register --namespace Microsoft.ContainerService
    

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 a seguir cria um grupo de recursos chamado myResourceGroup no local WestUS2 .

    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export REGION="canadacentral"
    export MY_RESOURCE_GROUP_NAME="myAKSResourceGroup$RANDOM_SUFFIX"
    az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
    

    Resultados:

    {
      "id": "/subscriptions/xxxxx-xxxxx-xxxxx-xxxxx/resourceGroups/myResourceGroupxxxxx",
      "location": "WestUS2",
      "managedBy": null,
      "name": "myResourceGroupxxxxx",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null,
      "type": "Microsoft.Resources/resourceGroups"
    }
    

Criar um cluster do AKS

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

  • O cluster é configurado com dois nós para garantir que ele opere de forma confiável. Um é uma máquina virtual (VM) do Azure que executa os componentes do nó Kubernetes e o tempo de execução do contentor.
  • Os parâmetros --windows-admin-password e --windows-admin-username definem as credenciais de administrador para qualquer nó do Windows Server no cluster e devem satisfazer os requisitos de palavra-passe do Windows Server.
  • O conjunto de nós usa VirtualMachineScaleSets.

Use as seguintes etapas para criar o cluster AKS com a CLI do Azure:

  1. Crie um nome de usuário para usar como credenciais de administrador para os nós do Windows Server em seu cluster.

    export WINDOWS_USERNAME="winadmin"
    
  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.

    export WINDOWS_PASSWORD=$(echo "P@ssw0rd$(openssl rand -base64 10 | tr -dc 'A-Za-z0-9!@#$%^&*()' | cut -c1-6)")
    
  3. Crie seu cluster usando o az aks create comando e especifique os --windows-admin-username parâmetros e --windows-admin-password . O comando de exemplo a seguir cria um cluster usando os valores de WINDOWS_USERNAME e WINDOWS_PASSWORD definidos nos comandos anteriores. Um sufixo aleatório é anexado ao nome do cluster para exclusividade.

    export MY_AKS_CLUSTER="myAKSCluster$RANDOM_SUFFIX"
    az aks create \
        --resource-group $MY_RESOURCE_GROUP_NAME \
        --name $MY_AKS_CLUSTER \
        --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 demorar mais do que alguns minutos a 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 as Perguntas frequentes sobre o Windows Server

    Não pode alterar o nome de utilizador de administrador, mas pode alterar a palavra-passe de administrador que o cluster AKS utiliza para nós do Windows Server utilizando az aks update. Para obter mais informações, consulte Perguntas frequentes sobre o 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, todos os clusters AKS são criados com um pool de nós que pode executar contêineres Linux. Você deve adicionar um pool de nós do Windows que possa executar contêineres do Windows Server ao lado do pool de nós do Linux. Para verificar se você tem um pool de nós do Windows no cluster, pode exibir os nós no cluster usando o kubectl get nodes -o wide comando.

Para criar um pool de nós do Windows, é necessário especificar um OsType e um OsSku apropriados. Use as informações na tabela a seguir para determinar qual é apropriado para seu cluster:

OsType OsSku Predefinido Versões K8s suportadas Detalhes
windows Windows2025 Atualmente em pré-visualização. Não é predefinido. 1.32+ Padrões atualizados: containerd 2.0, a imagem da Geração 2 é usada por padrão.
windows Windows2022 Padrão no K8s 1.25-1.35 Não disponível no K8s 1.36+ Aposenta-se em março de 2027. Padrões atualizados: o FIPS está habilitado por padrão.
windows Windows2019 Padrão nas versões do K8s 1.24 e anteriores Não disponível no K8s 1.33+ Aposenta-se em março de 2026.

O Windows Server 2022 é o sistema operativo predefinido para as versões Kubernetes 1.25-1.35. 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.

Nota

  • O Windows Server 2019 encerra-se a 1 de março de 2026. Após essa data, o AKS deixará de produzir novas imagens de nó e não fornecerá atualizações de segurança. Após essa data, não poderá criar novos grupos de nós com o Windows Server 2019 em qualquer versão do Kubernetes. Todos os pools de nós existentes com o Windows Server 2019 não serão suportados. O Windows Server 2019 não é suportado no Kubernetes versão 1.33 e superiores. A partir de 1 de abril de 2027, o AKS irá remover todas as imagens de nós existentes para o Windows Server 2019, o que significa que as operações de escalabilidade falharão.
  • O Windows Server 2022 encerra-se a 15 de março de 2027. Após essa data, o AKS deixará de produzir novas imagens de nós ou fornecer patches de segurança. Após essa data, não poderá criar novos pools de nós com o Windows Server 2022 em nenhuma versão do Kubernetes. Todos os pools de nós existentes com o Windows Server 2022 não serão suportados. O Windows Server 2022 não é suportado na versão 1.36 do Kubernetes e superiores. A partir de 1 de abril de 2028, o AKS irá remover todas as imagens de node existentes para o Windows Server 2022, o que significa que as operações de escalonamento falharão.

Para mais informações, consulte as notas de versão do AKS. Para se manter atualizado sobre as versões mais recentes do sistema operacional Windows Server e saber mais sobre nosso roteiro do que está planejado para suporte no AKS, consulte nosso roteiro público do AKS.

  • Adicione um pool de nós do Windows usando o comando az aks nodepool add com um OsType especificado e OsSku. 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.

    az aks nodepool add \
      --resource-group $MY_RESOURCE_GROUP_NAME \
      --cluster-name $MY_AKS_CLUSTER \
      --os-type Windows \
      --os-sku Windows2022 \
      --name npwin \
      --node-count 1
    

    Este comando 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.

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, use o az aks install-cli 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 $MY_RESOURCE_GROUP_NAME --name $MY_AKS_CLUSTER
    
  2. Verifique a conexão com o cluster usando o kubectl get comando, que retorna uma lista dos nós do cluster.

    kubectl get nodes -o wide
    

    O exemplo de saída que se segue mostra todos os nós do grupo. 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 utiliza 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 ficheiro de manifesto do Kubernetes também deve definir um seletor de nós para indicar que o cluster AKS deve executar o pod da sua aplicação de exemplo ASP.NET em um nó que suporte a execução de 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 uma explicação dos ficheiros 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 kubectl apply comando 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 kubectl get pods comando. Certifique-se de que todos os pods estejam Running antes de prosseguir.

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

    while true; do
      export EXTERNAL_IP=$(kubectl get service sample -o jsonpath="{.status.loadBalancer.ingress[0].ip}" 2>/dev/null)
      if [[ -n "$EXTERNAL_IP" && "$EXTERNAL_IP" != "<pending>" ]]; then
        kubectl get service sample
        break
      fi
      echo "Still waiting for external IP assignment..."
      sleep 5
    done
    

    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   xx.xx.xx.xx    pending          xx:xxxx/TCP     2m
    
  3. 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": "sample",
      "TYPE": "LoadBalancer",
      "CLUSTER-IP": "10.0.37.27",
      "EXTERNAL-IP": "52.179.23.131",
      "PORT(S)": "80:30572/TCP",
      "AGE": "2m"
    }
    
  4. Veja o aplicativo de exemplo em ação abrindo um navegador da Web para o endereço IP externo do seu serviço após alguns minutos.

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

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.