Implementar uma aplicação Linux

Aplica-se para: AKS no Windows Server

Este guia descreve como implementar uma aplicação multi-contentor que inclua uma interface web e uma instância de base de dados Redis no seu cluster Kubernetes no AKS no Windows Server. Também aprende a testar e escalar a sua aplicação.

Este guia prático assume uma compreensão básica dos conceitos do Kubernetes. Para mais informações, consulte os conceitos centrais do Kubernetes.

Antes de começares

Verifique se tem os seguintes pré-requisitos:

  • Um cluster do AKS com pelo menos um nó de trabalho Linux em execução e operacional.
  • Um arquivo kubeconfig para acessar o cluster.
  • O módulo PowerShell AksHci está instalado. Para mais informações, consulte Install-AksHci.

Quando executar os procedimentos:

  • Executa os comandos numa janela PowerShell aberta com privilégios administrativos.
  • Certifique-se de que as cargas de trabalho específicas do SO aterrissem no host de contêiner apropriado. Se o seu cluster do Kubernetes tiver uma mistura de nós de trabalho Linux e Windows, pode utilizar seletores de nós ou taints e tolerations. Para obter mais informações, consulte Usando seletores de nó e manchas e tolerâncias.

Note

A implementação de um cluster alvo que partilha uma rede com outro cluster alvo pode levar a conflitos de endereços IP do balanceador de carga. Conflitos de endereços IP podem ocorrer se implementares duas cargas de trabalho que usam portas diferentes em clusters alvo que partilham o mesmo AksHciClusterNetwork objeto. Devido à forma como os endereços IP e os mapeamentos de portas são alocados dentro do Proxy HA, pode levar à atribuição de endereços IP duplicados. Se isso ocorrer, uma ou ambas as cargas de trabalho podem encontrar problemas aleatórios de conectividade de rede até que você reimplante suas cargas de trabalho. Quando reimplantas as tuas cargas de trabalho, podes usar a mesma porta, que atribui um endereço IP de serviço a cada carga de trabalho, ou podes redistribuir as cargas de trabalho em clusters alvo que usam objetos diferentes AksHciClusterNetwork .

Implantar o aplicativo

Um arquivo de manifesto do Kubernetes define um estado desejado para o cluster, como quais imagens de contêiner devem ser executadas. Este tutorial usa um manifesto para criar todos os objetos necessários para correr a aplicação de voto do Azure. Este manifesto inclui duas implementações Kubernetes: uma para as aplicações Azure Vote Python de exemplo, e outra para uma instância Redis. São também criados dois serviços Kubernetes: um serviço interno para a instância Redis e um serviço externo para aceder à aplicação Azure Vote a partir da internet.

Crie um ficheiro chamado azure-vote.yaml e copie/cole a seguinte definição YAML:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: azure-vote-back
spec:
  replicas: 1
  selector:
    matchLabels:
      app: azure-vote-back
  template:
    metadata:
      labels:
        app: azure-vote-back
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: azure-vote-back
        image: redis
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        ports:
        - containerPort: 6379
          name: redis
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-back
spec:
  ports:
  - port: 6379
  selector:
    app: azure-vote-back
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: azure-vote-front
spec:
  replicas: 1
  selector:
    matchLabels:
      app: azure-vote-front
  template:
    metadata:
      labels:
        app: azure-vote-front
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: azure-vote-front
        image: <path to image>/azure-vote-front:v1
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        ports:
        - containerPort: 80
        env:
        - name: REDIS
          value: "azure-vote-back"
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-front
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: azure-vote-front

Implementa a aplicação usando o kubectl apply comando e especifica o nome do teu manifesto YAML:

kubectl apply -f azure-vote.yaml

O seguinte exemplo mostra implementações e serviços que foram criados com sucesso:

deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created

Testar a aplicação

Quando a aplicação corre, um serviço Kubernetes expõe a interface da aplicação à internet. Este processo pode demorar alguns minutos a concluir.

Para monitorar o progresso, use o kubectl get service comando com o --watch argumento:

kubectl get service azure-vote-front --watch

Inicialmente, o EXTERNAL-IP do serviço azure-vote-front é apresentado como pendente:

NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27      <pending>     80:30572/TCP   22m

Quando o endereço IP EXTERNO muda de pendente para um endereço IP público real, use CTRL-C para interromper o kubectl processo de vigilância. A saída de exemplo a seguir mostra um endereço IP público válido atribuído ao serviço:

NAME               TYPE           CLUSTER-IP   EXTERNAL-IP     PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   24m

Para ver o aplicativo Azure Vote em ação, abra um navegador da Web para o endereço IP externo do seu serviço.

Captura de ecrã da página inicial da aplicação Azure Voting App, implementada num cluster Kubernetes no Azure.

Dimensionar pods de aplicação

Criámos uma única réplica da interface da aplicação de votação do Azure e da instância do Redis. Para ver o número e o estado dos pods no seu cluster, use o kubectl get comando:

kubectl get pods -n default

O seguinte exemplo de saída mostra um pod front-end e um pod back-end:

NAME                                READY     STATUS    RESTARTS   AGE
azure-vote-back-6bdcb87f89-g2pqg    1/1       Running   0          25m
azure-vote-front-84c8bf64fc-cdq86   1/1       Running   0          25m

Para alterar o número de pods na implementação azure-vote-front, use o comando kubectl scale. O exemplo seguinte aumenta o número de pods front-end para 5:

kubectl scale --replicas=5 deployment/azure-vote-front

Execute kubectl get pods novamente para verificar se foram criados pods adicionais. Depois de cerca de um minuto, os pods adicionais estão disponíveis no seu cluster.

kubectl get pods -n default
Name                                READY   STATUS    RESTARTS   AGE
azure-vote-back-6bdcb87f89-g2pqg    1/1     Running   0          31m
azure-vote-front-84c8bf64fc-cdq86   1/1     Running   0          31m
azure-vote-front-84c8bf64fc-56h64   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-djkp8   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-jmmvs   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-znc6z   1/1     Running   0          80s

Passos seguintes

Usar o Azure Monitor para monitorar seu cluster e aplicativo