Partilhar via


Criar contêineres do Windows Server

Aplica-se a: AKS no Azure Local

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 adiciona um nó do Windows Server 2022 a $myAKSCluster:

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 podes conectar-te ao cluster Kubernetes executando o comando az connectedk8s proxy na tua 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 seguinte saída de exemplo 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ós para garantir que os pods do aplicativo de exemplo ASP.NET sejam agendados em nós que possam 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 uma análise dos ficheiros de manifesto YAML, consulte Implementaçõ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 utilizando 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 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 monitorização do 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 e acedendo ao endereço IP externo e à 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.

Eliminar grupo 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