Compartilhar via


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

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

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

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

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. Ao criar um grupo de recursos, você é solicitado a especificar um local. Essa é a localização na qual os metadados do grupo de recursos são armazenados e na qual os recursos são executados no Azure, caso você não especifique outra região durante a criação de recursos.

  • 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 . Insira este comando e outros comandos neste artigo em um shell BASH:
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 AKS

Nesta seção, criamos um cluster do 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ó do Kubernetes e o runtime do contêiner.
  • 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 atender aos requisitos de senha do Windows Server.
  • O pool de nós usa VirtualMachineScaleSets.

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

  1. Crie um nome de usuário para usá-lo como as credenciais de administrador nos nós do Windows Server no seu cluster. (O exemplo original solicitado para entrada; neste Exec Doc, a variável de ambiente é definida de forma não interativa.)
export WINDOWS_USERNAME="winadmin"
  1. Crie uma senha para o nome de usuário do 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)")
  1. Crie seu cluster usando o comando az aks create e especifique os parâmetros --windows-admin-username 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 é acrescentado 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 será concluído e retornará informações no formato JSON sobre o cluster. Ocasionalmente, o cluster pode levar mais do que alguns minutos para ser provisionado. Aguarde até 10 minutos para o 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 do Windows Server

O nome de usuário do administrador não pode ser alterado, mas você pode alterar a senha de administrador que o cluster do AKS usa para nós do Windows Server usando az aks update. Para saber mais, confira Perguntas frequentes sobre o Windows Server.

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

Adicionar um pool de nós

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

O Windows Server 2022 é o sistema operacional padrão para versões do Kubernetes 1.25.0 e superiores. O Windows Server 2019 é o sistema operacional padrão para versões anteriores. Se você não especificar um SKU do sistema operacional específico, 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 está configurado para o sistema operacional padrão com base na versão do Kubernetes do cluster.

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

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

Conectar-se ao cluster

Para gerenciar um cluster do Kubernetes, use o kubectl, o cliente de linha de comando do Kubernetes. Se você usar o Azure Cloud Shell, o kubectl já estará instalado. Para instalar e executar kubectl localmente, chame o comando az aks install-cli.

  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 $MY_RESOURCE_GROUP_NAME --name $MY_AKS_CLUSTER
  1. Verifique a conexão com o cluster usando o comando kubectl get, que retorna uma lista dos nós de cluster.
kubectl get nodes -o wide

A saída de amostra a seguir mostra todos os nós no cluster. Verifique se o status de todos os nós é Ready (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

Observação

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

Implantar o aplicativo

Um arquivo de manifesto do Kubernetes define um estado desejado para o cluster, como as imagens de contêiner a serem 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 do Kubernetes externo para acessar ao aplicativo da Internet.

O aplicativo de exemplo ASP.NET é fornecido como parte das Amostras .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 posterior. O arquivo de manifesto Kubernetes também deve definir um seletor de nó para instruir o cluster AKS a executar o pod de seu aplicativo de exemplo ASP.NET em um nó que possa executar contêineres do Windows Server.

  1. Crie um arquivo chamado sample.yaml e copie a definição YAML a seguir.
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, 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.

  1. Implante o aplicativo usando o comando kubectl apply e especifique o nome do manifesto YAML.
kubectl apply -f sample.yaml

A saída de amostra a seguir mostra a implantação e o serviço criados com sucesso:

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

  1. Verifique o status dos pods implantados usando o comando kubectl get pods. Garanta que todos os pods estejam Running, antes de continuar.
kubectl get pods
  1. Monitore o andamento usando o comando kubectl get service com o argumento --watch.
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 pending:

NAME     TYPE           CLUSTER-IP     EXTERNAL-IP       PORT(S)        AGE
sample   LoadBalancer   xx.xx.xx.xx    pending          xx:xxxx/TCP     2m

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 de 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"
}

Consulte o aplicativo de exemplo em ação abrindo um navegador da Web para o endereço IP externo do serviço após alguns minutos.

Captura de tela que mostra a navegação para o aplicativo de exemplo do ASP.NET.

Próximas etapas

Neste início rápido, você implantou um cluster Kubernetes e implantou um aplicativo de amostra ASP.NET em um contêiner do Windows Server para ele. 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 para percorrer um exemplo completo de código para implantação, continue no tutorial do cluster Kubernetes.