Share via


Criar contentores do Windows Server

Aplica-se a: Azure Stack HCI, versão 23H2

Neste artigo, vai utilizar a CLI do Azure para implementar um conjunto de nós num cluster do AKS existente que executa contentores do Windows Server. Também implementa um ASP.NET aplicação de exemplo num contentor do Windows Server no cluster.

Pré-requisitos

Crie um cluster do AKS ao seguir as instruções em Como criar clusters do AKS.

Adicionar um conjunto de nós

Por predefinição, é criado um cluster do Kubernetes com um conjunto de nós que pode executar contentores do Linux. Tem de adicionar outro conjunto de nós que possa executar contentores do Windows Server juntamente com o conjunto de nós do Linux.

Adicione um conjunto de nós com anfitriões de contentores do Windows com o az aksarc nodepool add comando com o parâmetro --os-type Windows. Se o SKU do sistema operativo não for especificado, o conjunto de nós está definido para o SO predefinido com base na versão do Kubernetes do cluster. O Windows Server 2022 é o sistema operativo predefinido para as versões 1.25.0 e superiores do Kubernetes. O Windows Server 2019 é o SO predefinido para versões anteriores.

  • Para utilizar o Windows Server 2019, especifique os seguintes parâmetros:
    • os-type defina como Windows.
    • os-sku defina como Windows2019.
  • Para utilizar o Windows Server 2022, especifique os seguintes parâmetros:
    • os-type defina como Windows.
    • os-sku definido como Windows2022 (opcional).

O comando seguinte cria um novo conjunto de nós com o nome $mynodepool e adiciona-o a $myAKSCluster um nó do Windows 2019.

az aksarc nodepool add --resource-group $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --node-count 1 --os-type Windows --os-sku Windows2019

Ligar ao cluster do AKS

Agora, pode ligar ao cluster do Kubernetes ao executar o comando a az connectedk8s proxy partir do seu computador local. Certifique-se de que inicia sessão no Azure antes de executar este comando. Se tiver várias subscrições do Azure, selecione o ID de subscrição adequado com o comando az account set .

Este comando transfere o kubeconfig do cluster do Kubernetes para o seu computador local e abre um canal de ligação proxy para o cluster do Kubernetes no local. O canal está aberto enquanto este comando for executado. Deixe que este comando seja executado enquanto quiser aceder ao cluster. Se o comando exceder o limite de tempo, feche a janela da CLI, abra uma nova e, em seguida, execute o comando novamente.

Tem de ter permissões de Contribuidor no grupo de recursos que aloja 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

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 ligue-se ao cluster do Kubernetes a partir de uma linha de comandos/terminal diferente. Verifique se consegue ligar ao cluster do Kubernetes ao executar o comando kubectl get. Este comando devolve uma lista dos nós de cluster:

kubectl get node -A --kubeconfig .\aks-arc-kube-config

O exemplo de saída seguinte mostra o nó criado nos passos anteriores. Certifique-se de que o estado 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

Implementar a aplicação

Um ficheiro de manifesto do Kubernetes define o estado pretendido de um cluster, como as imagens de contentor a executar.

Pode utilizar um manifesto YAML para criar todos os objetos necessários para executar o ASP.NET aplicação de exemplo num contentor do Windows Server. Este manifesto inclui uma implementação do Kubernetes para o ASP.NET aplicação de exemplo e um serviço do Kubernetes para aceder à aplicação a partir da Internet.

A aplicação de exemplo ASP.NET é fornecida como parte do .NET Framework exemplos e é executada num contentor do Windows Server. O AKS requer que os contentores do Windows Server se baseiem em imagens do Windows Server 2019 ou superior. O ficheiro de manifesto do Kubernetes também tem de definir um seletor de nós para garantir que os pods da aplicação de exemplo ASP.NET estão agendados num nó que pode executar contentores do Windows Server.

  1. Crie um ficheiro com o nome sample.yaml e copie na 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 uma discriminação dos ficheiros de manifesto YAML, veja Deployments and YAML manifests (Implementações e manifestos YAML).

  2. Implemente a aplicação com o comando kubectl apply e especifique o nome do seu manifesto YAML:

    kubectl apply -f sample.yaml --kubeconfig .\\aks-arc-kube-config
    

O resultado de exemplo seguinte mostra a implementação e o serviço criados com êxito:

deployment.apps/sample created
service/sample created

Testar a aplicação

Quando a aplicação é executada, um serviço do Kubernetes expõe o front-end da aplicação à Internet. Este processo pode demorar alguns minutos a concluir. Ocasionalmente, o serviço pode demorar mais do que alguns minutos a aprovisionar. Aguarde até 10 minutos para o aprovisionamento.

  1. Monitorize o progresso com o comando kubectl get service com o --watch argumento .

    kubectl get service sample --watch --kubeconfig .\aks-arc-kube-config
    

    Inicialmente, o resultado mostra o EXTERNAL-IP do 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, utilize CTRL-C para parar o processo de watch kubectl. O resultado de exemplo seguinte 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 a aplicação de exemplo em ação ao abrir um browser para o endereço IP externo e a porta do serviço de exemplo.

    Captura de ecrã a mostrar ASP.NET aplicação de exemplo.

    Se receber um tempo limite de ligação ao tentar carregar a página, deve verificar se a aplicação de exemplo está pronta com o kubectl get pods --watch comando . Por vezes, o contentor do Windows não é iniciado quando o endereço IP externo está disponível.

Eliminar conjunto de nós

Elimine o conjunto de nós com o az akshybrid nodepool delete comando .

az aksarc nodepool delete -g $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --no-wait

Passos seguintes

Neste artigo, implementou um conjunto de nós do Windows num cluster do AKS existente e implementou um ASP.NET aplicação de exemplo num contentor do Windows Server no mesmo.