Compartilhar via


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 como Windows.
    • os-sku definido como Windows2019.
  • Para usar o Windows Server 2022, especifique os seguintes parâmetros:
    • os-type definido como Windows.
    • os-sku definido como Windows2022 (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.

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

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

  1. 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
    
  2. 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 .

    Captura de tela mostrando ASP.NET aplicativo 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

Próximas etapas

Visão geral do AKS habilitado pelo Arc