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

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

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

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

Próximos passos

Visão geral do AKS ativado pelo Arc