Criar 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ê implantará um cluster do AKS que executa contêineres do Windows Server 2019 usando a CLI do Azure. Também implanta um aplicativo de exemplo do ASP.NET em um contêiner do Windows Server para o cluster.
Este artigo 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).
Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.
Pré-requisitos
Use o ambiente Bash no Azure Cloud Shell. Para saber mais, confira Início rápido do Azure Cloud Shell – Bash.
Se preferir executar os comandos de referência da CLI localmente, instale a CLI do Azure. Para execuções no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para saber mais, confira Como executar a CLI do Azure em um contêiner do Docker.
Se estiver usando uma instalação local, entre com a CLI do Azure usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas no terminal. Para ver outras opções de entrada, confira Conectar-se com a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar extensões com a CLI do Azure.
Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para fazer a atualização para a versão mais recente, execute az upgrade.
Este artigo exige a versão 2.0.64 ou posterior da CLI do Azure. Se você está usando o Azure Cloud Shell, a versão mais recente já está instalada.
A identidade que você está usando para criar o cluster tem as permissões mínimas apropriadas. Para obter mais detalhes sobre acesso e identidade do AKS, consulte Opções de acesso e identidade para o AKS (Serviço de Kubernetes do Azure).
Se tiver várias assinaturas do Azure, selecione a ID da assinatura adequada para cobrança dos recursos usando o comando az account.
Limitações
As seguintes limitações se aplicam quando você cria e gerencia clusters do AKS com suporte a vários pools de nós:
- Não é possível excluir o primeiro pool de nós.
As seguintes limitações adicionais se aplicam aos pools de nós do Windows Server:
- O cluster AKS pode ter um máximo de dez pools de nós.
- O cluster AKS pode ter um máximo de 100 nós em cada pool de nós.
- O nome do pool de nós do Windows Server tem um limite de seis caracteres.
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 eastus.
Observação
Este artigo usa a sintaxe do Bash para os comandos deste tutorial. Se você estiver usando o Azure Cloud Shell, verifique se a lista suspensa no canto superior esquerdo da janela do Cloud Shell está definida como Bash.
az group create --name myResourceGroup --location eastus
A seguinte saída de exemplo 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 AKS
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 plug-in de rede CNI do Azure (avançado). Para obter informações mais detalhadas para ajudar a planejar os intervalos de sub-rede e as considerações de rede necessárias, confira configurar a rede do CNI do Azure. Use o comando az aks create para criar um cluster do AKS chamado myAKSCluster. Esse comando criará os recursos de rede necessários, caso ainda não existam.
- O cluster está configurado com dois nós.
- Os parâmetros
--windows-admin-passworde--windows-admin-usernamedefinem as credenciais de administrador para qualquer nó do Windows Server no cluster e devem atender aos requisitos de senha do Windows Server. Se o parâmetro--windows-admin-passwordnão for especificado, será solicitado que você forneça um valor. - O pool de nós usa
VirtualMachineScaleSets.
Observação
Para verificar se o seu cluster está operando de maneira confiável, execute pelo menos dois nós no pool de nós padrão.
Crie um nome de usuário para usá-lo como as credenciais de administrador nos nós do Windows Server no seu cluster. Os comandos a seguir solicitam um nome de usuário e o definem como WINDOWS_USERNAME para uso em um comando posterior (lembre-se de que os comandos deste artigo são inseridos em um shell do Bash).
echo "Please enter the username to use as administrator credentials for Windows Server nodes on your cluster: " && read WINDOWS_USERNAME
Crie o seu cluster e não deixe de especificar o parâmetro --windows-admin-username. O comando de exemplo a seguir cria um cluster usando o valor WINDOWS_USERNAME definido no comando anterior. Como alternativa, você pode fornecer um nome de usuário diferente diretamente no parâmetro, em vez de usar WINDOWS_USERNAME. O comando a seguir também solicitará que você crie uma senha para as credenciais de administrador dos nós do Windows Server no seu cluster. Como alternativa, você pode usar o parâmetro --windows-admin-password e especificar ali seu próprio valor.
az aks create \
--resource-group myResourceGroup \
--name myAKSCluster \
--node-count 2 \
--enable-addons monitoring \
--generate-ssh-keys \
--windows-admin-username $WINDOWS_USERNAME \
--vm-set-type VirtualMachineScaleSets \
--network-plugin azure
Observação
Se você receber um erro de validação de senha, verifique se a senha que você definiu atende aos requisitos de senha do Windows Server. Se a senha atender aos requisitos, tente criar o 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 do administrador ao definir --vm-set-type VirtualMachineScaleSets e --network-plugin azure, o nome de usuário será definido como azureuser e a senha será definida como um valor aleatório.
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 obter mais detalhes, confira Perguntas frequentes sobre pools de nós do Windows Server.
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 de alguns minutos para ser provisionado. Aguarde até dez minutos nesses casos.
Adicionar um pool de nós do Windows Server 2019
Por padrão, um cluster AKS é criado com um pool de nós que pode executar contêineres do Linux. Use o comando az aks nodepool add para adicionar mais um pool de nós que pode executar contêineres do Windows Server juntamente com o pool de nós do Linux.
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--os-type Windows \
--name npwin \
--node-count 1
O comando acima 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.
Adicionar um pool de nós do Windows Server 2022 (versão prévia)
Ao criar um pool de nós do Windows, o sistema operacional padrão será Windows Server 2019. Para usar nós do Windows Server 2022, você precisará especificar um tipo de SKU do SO de Windows2022.
Importante
As versões prévias do recurso AKS estão disponíveis em uma base de autoatendimento e aceitação. As versõ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 prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:
Instalar a extensão aks-preview
Você também precisa de aks-preview, a extensão da CLI do Azure versão 0.5.68 ou posterior. Instale a extensão da CLI do Azure aks-preview usando o comando az extension add ou instale qualquer atualização disponível usando o comando az extension update.
# Install the aks-preview extension
az extension add --name aks-preview
# Update the extension to make sure you have the latest version installed
az extension update --name aks-preview
Registrar a versão prévia do recurso AKSWindows2022Preview
Para usar o recurso, você também deve habilitar o sinalizador de recursos AKSWindows2022Preview em sua assinatura.
Registre o sinalizador de recursos AKSWindows2022Preview usando o comando az feature register, conforme mostrado no seguinte exemplo:
az feature register --namespace "Microsoft.ContainerService" --name "AKSWindows2022Preview"
Demora alguns minutos para o status exibir Registrado. Verifique o status do registro usando o comando lista de funcionalidades az.
az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AKSWindows2022Preview')].{Name:name,State:properties.state}"
Quando estiver pronto, atualize o registro do provedor de recursos Microsoft.ContainerService usando o comando az provider register:
az provider register --namespace Microsoft.ContainerService
Use o comando az aks nodepool add para adicionar um pool de nós do Windows Server 2022:
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--os-type Windows \
--os-sku Windows2022 \
--name npwin \
--node-count 1
Opcional: usar containerd com pools de nós do Windows Server
A partir do Kubernetes versão 1.20 e superior, você pode especificar containerd como o runtime de contêiner para pools de nós do Windows Server 2019. Começando no Kubernetes 1.23, o contêiner será o runtime de contêiner padrão do Windows.
Importante
Ao usar containerd com pools de nós do Windows Server 2019:
- O painel de controle e os pools de nós do Windows Server 2019 devem usar o Kubernetes versão 1.20 ou superior.
- Ao criar ou atualizar um pool de nós para executar contêineres do Windows Server, o valor padrão para
--node-vm-sizeé Standard_D2s_v3 que era o tamanho mínimo recomendado para pools de nós do Windows Server 2019 antes do Kubernetes 1.20. O tamanho mínimo recomendado para pools de nós do Windows Server 2019 usandocontainerdé Standard_D4s_v3. Ao definir o parâmetro--node-vm-size, confira a lista de tamanhos de VM restritos. - É altamente recomendável que você use taints ou rótulos com seus pools de nós do Windows Server 2019 que executam
containerde tolerations ou seletores de nós com suas implantações para garantir que as cargas de trabalho sejam agendadas corretamente.
Adicionar um pool de nós do Windows Server com containerd
Use o comando az aks nodepool add para adicionar um pool de nós que pode executar contêineres do Windows Server com o runtime containerd.
Observação
Se você não especificar o cabeçalho personalizado WindowsContainerRuntime=containerd, o pool de nós usará o Docker como o runtime do contêiner.
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--os-type Windows \
--name npwcd \
--node-vm-size Standard_D4s_v3 \
--kubernetes-version 1.20.5 \
--aks-custom-headers WindowsContainerRuntime=containerd \
--node-count 1
O comando acima cria um novo pool de nós do Windows Server usando containerd como o runtime chamado npwcd e adiciona-o 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.
Atualizar um pool de nós do Windows Server existente para containerd
Use o comando az aks nodepool upgrade para atualizar um pool de nós específico do Docker para containerd.
az aks nodepool upgrade \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name npwd \
--kubernetes-version 1.20.7 \
--aks-custom-headers WindowsContainerRuntime=containerd
O comando acima atualiza um pool de nós chamado npwd para o runtime containerd.
Para atualizar todos os pools de nós existentes em um cluster para usar o runtime containerd para todos os pools de nós Windows Server:
az aks upgrade \
--resource-group myResourceGroup \
--name myAKSCluster \
--kubernetes-version 1.20.7 \
--aks-custom-headers WindowsContainerRuntime=containerd
O comando acima atualiza todos pools de nós Windows Server no runtime myAKSCluster para usar o runtime containerd.
Observação
Depois de atualizar todos os pools de nós Windows Server existentes para usar o runtime containerd, o Docker ainda será o runtime padrão ao adicionar novos pools de nós Windows Server.
Conectar-se ao cluster
Para gerenciar um cluster do Kubernetes, use kubectl, o cliente de linha de comando do Kubernetes. Se você usar o Azure Cloud Shell, o kubectl já estará instalado. Para instalar o kubectl localmente, use o comando az aks install-cli:
az aks install-cli
Para configurar o kubectl para se conectar ao cluster do Kubernetes, use 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
Para verificar a conexão com o cluster, use o comando kubectl get para retornar uma lista dos nós de 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 é Pronto:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
aks-nodepool1-12345678-vmss000000 Ready agent 34m v1.20.7 10.240.0.4 <none> Ubuntu 18.04.5 LTS 5.4.0-1046-azure containerd://1.4.4+azure
aks-nodepool1-12345678-vmss000001 Ready agent 34m v1.20.7 10.240.0.35 <none> Ubuntu 18.04.5 LTS 5.4.0-1046-azure containerd://1.4.4+azure
aksnpwcd123456 Ready agent 9m6s v1.20.7 10.240.0.97 <none> Windows Server 2019 Datacenter 10.0.17763.1879 containerd://1.4.4+unknown
aksnpwin987654 Ready agent 25m v1.20.7 10.240.0.66 <none> Windows Server 2019 Datacenter 10.0.17763.1879 docker://19.3.14
Observação
O runtime do contêiner para cada pool de nós é mostrado em CONTAINER-RUNTIME. Observe que aksnpwin987654 começa com docker://, o que significa que ele está usando Docker para o runtime do contêiner. Observe que aksnpwcd123456 começa com containerd://, o que significa que ele está usando 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, um manifesto é usado 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.
Crie um arquivo chamado sample.yaml e copie a definição YAML a seguir. Se você usar o Azure Cloud Shell, esse arquivo poderá ser criado usando code, vi ou nano, como se você estivesse trabalhando em um sistema físico ou virtual:
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
Implante o aplicativo usando o comando kubectl apply e especifique o nome do manifesto YAML:
kubectl apply -f sample.yaml
A seguinte saída de exemplo mostra a Implantação e o Serviço criado com êxito:
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 de alguns minutos para ser provisionado. Aguarde até dez minutos nesses casos.
Para monitorar o andamento, use o comando kubectl get service com o argumento --watch.
kubectl get service sample --watch
Inicialmente, o EXTERNAL-IP para o serviço de exemplo é mostrado 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 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:
sample LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
Para ver o aplicativo de exemplo em ação, abra um navegador da Web no endereço IP externo do serviço.
Observação
Se você receber o erro de tempo limite de conexão ao tentar carregar a página, verifique se o aplicativo de exemplo está pronto usando o comando [kubectl get pods --watch]. Às vezes, o contêiner do Windows não será iniciado no momento em que o endereço IP externo estiver disponível.
Excluir cluster
Para evitar encargos do Azure, se você não planeja passar pelos tutoriais a seguir, use o comando az group delete para remover o grupo de recursos, o serviço de contêiner e todos os recursos relacionados.
az group delete --name myResourceGroup --yes --no-wait
Observação
Se o cluster do AKS tiver sido criado com a identidade gerenciada atribuída pelo sistema (opção de identidade padrão usada neste guia de início rápido), a identidade será gerenciada pela plataforma e não exigirá remoção.
Próximas etapas
Neste artigo, você implantou um cluster do Kubernetes e um aplicativo ASP.NET de exemplo em um contêiner do Windows Server para ele.
Para saber mais sobre o AKS e percorrer um código completo de exemplo de implantação, prossiga para o tutorial de cluster Kubernetes.
