Criar contêineres do Windows Server
Aplica-se a: Azure Local, versão 23H2
Este artigo descreve como usar a CLI do Azure para implantar um pool de nós em um cluster do AKS existente que executa contêineres do Windows Server. Ele também descreve como implantar um aplicativo de exemplo ASP.NET em um contêiner do Windows Server no cluster.
Pré-requisitos
Crie um cluster do AKS seguindo as instruções em Como criar clusters do AKS.
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.
Adicione um pool de nós com hosts de contêiner do Windows usando o az aksarc nodepool add
comando com o parâmetro --os-type Windows
. Se o SKU do sistema operacional não for especificado, o pool de nós será definido como o sistema operacional padrão com base na versão do Kubernetes do cluster. 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.
- Para usar o Windows Server 2019, especifique os seguintes parâmetros:
os-type
definido comoWindows
.os-sku
definido comoWindows2019
.
- Para usar o Windows Server 2022, especifique os seguintes parâmetros:
os-type
definido comoWindows
.os-sku
definido comoWindows2022
(opcional).
O comando a seguir cria um novo pool de nós chamado $mynodepool
e o adiciona a $myAKSCluster
um nó do Windows Server 2022:
az aksarc nodepool add --resource-group $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --node-count 1 --os-type Windows --os-sku Windows2022
Conecte-se ao cluster do AKS
Agora você pode se conectar ao cluster do Kubernetes executando o az connectedk8s proxy
comando no computador local. Certifique-se de entrar no Azure antes de executar este comando. Se você tiver várias assinaturas do Azure, selecione a ID de assinatura apropriada usando o comando az account set.
Esse comando baixa o kubeconfig do cluster do Kubernetes para o computador local e abre um canal de conexão de proxy para o cluster do Kubernetes local. O canal fica aberto enquanto esse comando for executado. Deixe esse comando ser executado enquanto você quiser acessar o cluster. Se o comando atingir o tempo limite, feche a janela CLI, abra uma nova e execute o comando novamente.
Você deve ter permissões de Colaborador no grupo de recursos que hospeda o cluster do AKS para executar o seguinte comando com êxito:
az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config
Saída esperada:
Proxy is listening on port 47011
Merged "aks-workload" as current context in .\aks-arc-kube-config
Start sending kubectl requests on 'aks-workload' context using kubeconfig at .\aks-arc-kube-config
Press Ctrl+C to close proxy.
Mantenha essa sessão em execução e conecte-se ao cluster do Kubernetes a partir de um terminal/prompt de comando diferente. Verifique se você pode se conectar ao cluster do Kubernetes executando o comando kubectl get. Este comando retorna uma lista dos nós do cluster:
kubectl get node -A --kubeconfig .\aks-arc-kube-config
A saída de exemplo a seguir mostra o nó criado nas etapas anteriores. Verifique se que o status do nó é Pronto:
NAME STATUS ROLES AGE VERSION
moc-lesdc78871d Ready control-plane 6d8h v1.26.3
moc-lupeeyd0f8c Ready <none> 6d8h v1.26.3
moc-ww2c8d5ranw Ready <none> 7m18s v1.26.3
Implantar o aplicativo
Um arquivo de manifesto do Kubernetes define o estado desejado de um cluster, por exemplo, as imagens de contêiner a serem executadas.
Você pode usar um manifesto YAML 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 para acessar o aplicativo pela Internet.
O aplicativo de exemplo 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 posterior. O arquivo de manifesto do Kubernetes também deve definir um seletor de nó para garantir que os pods do aplicativo de exemplo ASP.NET sejam agendados em um nó que possa executar contêineres do Windows Server.
Crie um arquivo chamado sample.yaml e copie a seguinte definição 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, confira Implantações e manifestos YAML.
Implante o aplicativo usando o comando kubectl apply e especifique o nome do manifesto YAML:
kubectl apply -f sample.yaml --kubeconfig .\\aks-arc-kube-config
A saída de exemplo a seguir mostra que a implantação e o serviço foram criados 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 do que alguns minutos para ser provisionado. Aguarde até 10 minutos para o provisionamento.
Monitore o andamento usando o comando kubectl get service com o argumento
--watch
.kubectl get service sample --watch --kubeconfig .\aks-arc-kube-config
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 mudar de pendente para um endereço IP, use CTRL-C para interromper o processo de inspeção 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
Veja o aplicativo de exemplo em ação abrindo um navegador da Web para o endereço IP externo e a porta do serviço de exemplo .
Se você receber um tempo limite de conexão ao tentar carregar a página, verifique se o aplicativo de exemplo está pronto usando o
kubectl get pods --watch
comando. Às vezes, o contêiner do Windows não será iniciado no momento em que o endereço IP externo estiver disponível.
Excluir pool de nós
Exclua o pool de nós usando o az akshybrid nodepool delete
comando:
az aksarc nodepool delete -g $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --no-wait