Tutorial: Implementar aplicações do Windows no Serviço Azure Kubernetes no Azure Stack HCITutorial: Deploy Windows applications in Azure Kubernetes Service on Azure Stack HCI

Neste tutorial, você implementa uma aplicação de amostra ASP.NET num recipiente do Windows Server para o cluster Kubernetes.In this tutorial, you deploy an ASP.NET sample application in a Windows Server container to the Kubernetes cluster. Em seguida, você vê como testar e escalar a sua aplicação.You then see how to test and scale your application. Este tutorial pressupõe uma compreensão básica dos conceitos de Kubernetes.This tutorial assumes a basic understanding of Kubernetes concepts. Para mais informações, consulte os conceitos fundamentais da Kubernetes para o Serviço Azure Kubernetes no Azure Stack HCI.For more information, see Kubernetes core concepts for Azure Kubernetes Service on Azure Stack HCI.

Before you beginBefore you begin

Verifique se tem os seguintes requisitos prontos:Verify you have the following requirements ready:

  • Um serviço Azure Kubernetes no cluster HCI Azure Stack HCI com pelo menos um nó de trabalhador do Windows que está a funcionar.An Azure Kubernetes Service on Azure Stack HCI cluster with at least one Windows worker node that is up and running.
  • Um ficheiro kubeconfig para aceder ao cluster.A kubeconfig file to access the cluster.
  • Instale o serviço Azure Kubernetes no módulo Azure Stack HCI PowerShell.Have the Azure Kubernetes Service on Azure Stack HCI PowerShell module installed.
  • Executar os comandos neste documento numa janela administrativa powerShell.Run the commands in this document in a PowerShell administrative window.
  • Certifique-se de que as cargas de trabalho específicas do SO aterram no hospedeiro de contentores apropriado.Ensure that OS specific workloads land on the appropriate container host. Se tiver um cluster de nós de nó de Nó de Linux e Windows, pode utilizar seletores de nó ou manchas e tolerâncias.If you have a mixed Linux and Windows worker nodes Kubernetes cluster, you can either use node selectors or taints and tolerations. Para obter mais informações, consulte a utilização de seletores de nó e manchas e tolerâncias.For more information, see using node selectors and taints and tolerations.

Implementar a aplicaçãoDeploy the application

Um ficheiro manifesto kubernetes define um estado desejado para o cluster, como as imagens do recipiente a executar.A Kubernetes manifest file defines a desired state for the cluster, such as what container images to run. Neste artigo, é utilizado um manifesto para criar todos os objetos necessários para executar a aplicação de amostra ASP.NET num recipiente do Windows Server.In this article, a manifest is used to create all objects needed to run the ASP.NET sample application in a Windows Server container. Este manifesto inclui uma implementação de Kubernetes para a aplicação de amostra ASP.NET e um serviço externo de Kubernetes para aceder à aplicação a partir da internet.This manifest includes a Kubernetes deployment for the ASP.NET sample application and an external Kubernetes service to access the application from the internet.

A aplicação ASP.NET amostra é fornecida como parte das amostras-quadro .NET e funciona num recipiente do Windows Server.The ASP.NET sample application is provided as part of the .NET Framework Samples and runs in a Windows Server container. O Serviço Azure Kubernetes no Azure Stack HCI exige que os contentores do Windows Server sejam baseados em imagens do Windows Server 2019.Azure Kubernetes Service on Azure Stack HCI requires Windows Server containers to be based on images of Windows Server 2019.

O ficheiro manifesto Kubernetes também deve definir um seletor de nó para dizer ao seu cluster AKS para executar o seu ASP.NET pod da aplicação da amostra num nó que pode executar recipientes do Windows Server.The Kubernetes manifest file must also define a node selector to tell your AKS cluster to run your ASP.NET sample application's pod on a node that can run Windows Server containers.

Crie um ficheiro nomeado sample.yaml e copie na seguinte definição YAML.Create a file named sample.yaml and copy in the following YAML definition.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample
  labels:
    app: sample
spec:
  replicas: 1
  template:
    metadata:
      name: sample
      labels:
        app: sample
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": windows
      containers:
      - name: sample
        image: mcr.microsoft.com/dotnet/framework/samples:aspnetapp
        resources:
          limits:
            cpu: 1
            memory: 800M
          requests:
            cpu: .1
            memory: 300M
        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

Implemente a aplicação utilizando o kubectl apply comando e especifique o nome do seu manifesto YAML:Deploy the application using the kubectl apply command and specify the name of your YAML manifest:

kubectl apply -f sample.yaml

A saída de exemplo a seguir mostra a implementação e o serviço criado com sucesso:The following example output shows the deployment and service created successfully:

deployment.apps/sample created
service/sample created

Testar a aplicaçãoTest the application

Quando a aplicação é executado, um serviço Kubernetes expõe a linha frontal da aplicação para a internet.When the application runs, a Kubernetes service exposes the application front end to the internet. Este processo pode demorar alguns minutos a concluir.This process can take a few minutes to complete. Ocasionalmente, o serviço pode demorar mais do que alguns minutos a providenciar.Occasionally the service can take longer than a few minutes to provision. Deixe até 10 minutos nestes casos.Allow up to 10 minutes in these cases.

Para monitorizar o progresso, use o kubectl get service comando com o --watch argumento.To monitor progress, use the kubectl get service command with the --watch argument.

kubectl get service sample --watch

Inicialmente, o EXTERNAL-IP para o serviço de amostragem é apresentado como pendente.Initially the EXTERNAL-IP for the sample service is shown as 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 público real, use CTRL-C para parar o processo do kubectl relógio.When the EXTERNAL-IP address changes from pending to an actual public IP address, use CTRL-C to stop the kubectl watch process. A saída de exemplo a seguir mostra um endereço IP público válido atribuído ao serviço:The following example output shows a valid public IP address assigned to the service:

NAME    TYPE           CLUSTER-IP   EXTERNAL-IP     PORT(S)        AGE
sample  LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   2m

Para ver a aplicação da amostra em ação, abra um navegador web para o endereço IP externo do seu serviço.To see the sample app in action, open a web browser to the external IP address of your service.

Imagem de navegação para ASP.NET aplicação da amostra

Se receber um tempo limite de ligação ao tentar carregar a página, verifique se a aplicação da amostra está pronta com kubectl get pods --watch comando.If you receive a connection timeout when trying to load the page, verify if the sample app is ready with kubectl get pods --watch command. Por vezes, o endereço IP externo está disponível antes do recipiente das janelas ter começado.Sometimes, the external IP address is available before the windows container has started.

Cápsulas de aplicação em escalaScale application pods

Criámos uma única réplica da aplicação front-end.We have created a single replica of the application front-end. Para ver o número e o estado das cápsulas no seu cluster, utilize o kubectl get comando da seguinte forma:To see the number and state of pods in your cluster, use the kubectl get command as follows:

kubectl get pods -n default

Para alterar o número de cápsulas na colocação da amostra, utilize o kubectl scale comando.To change the number of pods in the sample deployment, use the kubectl scale command. O exemplo a seguir aumenta o número de cápsulas frontais para 3:The following example increases the number of front-end pods to 3:

kubectl scale --replicas=3 deployment/sample

Corra kubectl get pods novamente para verificar se foram criadas cápsulas adicionais.Run kubectl get pods again to verify that additional pods have been created. Um ou dois minutos depois, os pods adicionais estão disponíveis no seu cluster:After a minute or so, the additional pods are available in your cluster:

kubectl get pods -n default

Passos seguintesNext steps