Implantar um contêiner do Windows Server em um cluster AKS (Serviço de Kubernetes do Azure) usando o PowerShell
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á Azure PowerShell 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).
-
Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.
Para facilitar o uso, experimente o ambiente do PowerShell no Azure Cloud Shell. Para obter mais informações, confira Início Rápido para Azure Cloud Shell.
Se você deseja usar o PowerShell localmente, instale o módulo Az PowerShell e conecte-se à sua conta do Azure usando o cmdlet Connect-AzAccount. Execute os comandos com privilégios administrativos. Para obter mais informações, consulte Instalar o Azure PowerShell.
Certifique-se de que a identidade que você está usando para criar seu cluster tenha 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 você tiver mais de uma assinatura do Azure, defina a assinatura que deseja usar para o início rápido chamando o cmdlet Set-AzContext. Para obter mais informações, confira Gerenciar as assinaturas do Azure com o Azure PowerShell.
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.
Para criar um grupo de recursos, use o cmdlet New-AzResourceGroup. O exemplo a seguir cria um grupo de recursos chamado myResourceGroup na região eastus.
New-AzResourceGroup -Name myResourceGroup -Location eastus
A saída de amostra a seguir mostra o grupo de recursos criado com sucesso:
ResourceGroupName : myResourceGroup
Location : eastus
ProvisioningState : Succeeded
Tags :
ResourceId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup
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 nó é uma máquina virtual (VM) do Azure que executa os componentes do nó do Kubernetes e o runtime do contêiner.
- Os parâmetros
-WindowsProfileAdminUserName
e-WindowsProfileAdminUserPassword
definem as credenciais de administrador para qualquer nó do Windows Server no cluster e devem atender aos requisitos de complexidade de senha do Windows Server. - O pool de nós usa
VirtualMachineScaleSets
.
Para criar o cluster do AKS com o Azure PowerShell, siga estas etapas:
Crie as credenciais de administrador para seus contêineres do Windows Server usando o comando a seguir. Esse comando solicita que você insira um
WindowsProfileAdminUserName
eWindowsProfileAdminUserPassword
. A senha deve ter no mínimo 14 caracteres e atender aos requisitos de complexidade de senha do Windows Server.$AdminCreds = Get-Credential ` -Message 'Please create the administrator credentials for your Windows Server containers'
Crie o cluster usando o cmdlet New-AzAksCluster e especifique os parâmetros
WindowsProfileAdminUserName
eWindowsProfileAdminUserPassword
.New-AzAksCluster -ResourceGroupName myResourceGroup ` -Name myAKSCluster ` -NodeCount 2 ` -NetworkPlugin azure ` -NodeVmSetType VirtualMachineScaleSets ` -WindowsProfileAdminUserName $AdminCreds.UserName ` -WindowsProfileAdminUserPassword $secureString ` -GenerateSshKey
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, veja 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 obter mais informações, veja as Perguntas frequentes do 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)][azure-cni]. O parâmetro
-NetworkPlugin 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.
- Pool de nós do Windows (SKU padrão)
- Pool de nós do Windows Server 2022
- Pool de nós do Windows Server 2019
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 do Windows Server usando o cmdlet New-AzAksNodePool. 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 New-AzAksCluster
:
New-AzAksNodePool -ResourceGroupName myResourceGroup `
-ClusterName myAKSCluster `
-VmSetType VirtualMachineScaleSets `
-OsType Windows `
-Name npwin
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. Se você instalar o kubectl
localmente, poderá usar o cmdlet Install-AzAzAksCliTool
.
Configure
kubectl
para se conectar ao cluster do Kubernetes usando o cmdlet Import-AzAksCredential. Este comando baixa as credenciais e configura a CLI do Kubernetes para usá-las.Import-AzAksCredential -ResourceGroupName myResourceGroup -Name myAKSCluster
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 exemplo de saída a seguir mostra todos os nós do cluster. Verifique se o status de todos os nós é Pronto:
NAME STATUS ROLES AGE VERSION aks-nodepool1-20786768-vmss000000 Ready agent 22h v1.27.7 aks-nodepool1-20786768-vmss000001 Ready agent 22h v1.27.7 aksnpwin000000 Ready agent 21h v1.27.7
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.
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.
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.
Verifique o status dos pods implantados usando o comando kubectl get pods. Faça com que todos os pods estejam
Running
antes de continuar.kubectl get pods
Monitore o andamento usando o comando kubectl get service com o argumento
--watch
.kubectl get service sample --watch
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 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 dokubectl
. A seguinte saída de exemplo mostra um endereço de 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 seu serviço.
Excluir recursos
Se você não planeja passar pelo tutorial do AKS, exclua o cluster para evitar incorrer em encargos do Azure. Chame o cmdlet Remove-AzResourceGroup para remover o grupo de recursos, o serviço de contêiner e todos os recursos relacionados.
Remove-AzResourceGroup -Name myResourceGroup
Observação
O cluster do AKS foi criado com uma identidade gerenciada atribuída pelo sistema (a opção de identidade padrão neste início rápido). A plataforma do Azure gerencia essa identidade, portanto, ela não requer remoção.
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.
Azure Kubernetes Service