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 AKS existente que executa contêineres do Windows Server. Ele também descreve como implantar um aplicativo de exemplo de ASP.NET em um contêiner do Windows Server para o cluster.
Pré-requisitos
Crie um cluster AKS seguindo as instruções em Como criar clusters AKS.
Adicionar um conjunto de nós
Por padrão, um cluster Kubernetes é criado com um pool de nós que pode executar contêineres Linux. Você deve adicionar outro pool de nós que possa executar contêineres do Windows Server ao lado do 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 a SKU do sistema operacional não for especificada, o pool de nós será definido como o sistema operacional padrão com base na versão do cluster do Kubernetes. O Windows Server 2022 é o sistema operacional padrão para o Kubernetes versões 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 com um nó do $myAKSCluster
Windows Server 2022:
az aksarc nodepool add --resource-group $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --node-count 1 --os-type Windows --os-sku Windows2022
Conectar-se ao cluster AKS
Agora você pode se conectar ao cluster do Kubernetes executando o comando da az connectedk8s proxy
sua máquina 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 .
Este comando baixa o kubeconfig do cluster Kubernetes para a máquina local e abre um canal de conexão proxy para o cluster Kubernetes local. O canal fica aberto enquanto este comando for executado. Deixe esse comando ser executado pelo tempo que você quiser acessar seu cluster. Se o comando atingir o tempo limite, feche a janela da CLI, abra uma nova e execute o comando novamente.
Você deve ter permissões de Colaborador no grupo de recursos que hospeda o cluster AKS para executar o seguinte comando com êxito:
az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config
Resultado esperado:
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 esta 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 o status do nó está 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
Implementar a aplicação
Um arquivo de manifesto do Kubernetes define o estado desejado de um cluster, como quais imagens de contêiner devem ser 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 Kubernetes para acessar o aplicativo da 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 superior. 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 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 obter um detalhamento dos arquivos de manifesto YAML, consulte Implantações e manifestos YAML.
Implante o aplicativo usando o comando kubectl apply e especifique o nome do seu 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 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.
Monitore o progresso usando o comando kubectl get service com o
--watch
argumento.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 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 mudar de pendente para um endereço IP, use CTRL-C para parar o processo de observação kubectl. A saída de exemplo a seguir 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, deverá verificar se o aplicativo de exemplo está pronto usando o
kubectl get pods --watch
comando. Às vezes, o contêiner do Windows não é iniciado no momento em que seu endereço IP externo está 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