Distribuire un'app Linux

Si applica a: AKS su Windows Server

Questa guida descrive come distribuire un'applicazione multi-container che include un front-end web e un'istanza di database Redis nel cluster Kubernetes in AKS su Windows Server. Si apprenderà anche come testare e ridimensionare l'app.

Questa guida pratica presuppone una conoscenza di base dei concetti di Kubernetes. Per altre informazioni, vedere Concetti di base di Kubernetes.

Prima di iniziare

Verificare di disporre dei prerequisiti seguenti:

  • Un cluster AKS con almeno un nodo di lavoro Linux attivo e funzionante.
  • Un file kubeconfig per accedere al cluster.
  • Il modulo PowerShell AksHci è installato. Per altre informazioni, vedere Install-AksHci.

Quando si eseguono le procedure:

  • Eseguire i comandi in una finestra di PowerShell aperta con privilegi amministrativi.
  • Assicurarsi che i carichi di lavoro specifici del sistema operativo siano assegnati all'host del container appropriato. Se il cluster Kubernetes comprende nodi di lavoro Linux e Windows, è possibile usare selettori di nodi oppure vincoli e tolleranze. Per ulteriori informazioni, vedere Uso di selettori di nodo, taint e tolleranze.

Note

La distribuzione di un cluster di destinazione che condivide una rete con un altro cluster di destinazione può causare conflitti di indirizzi IP del servizio di bilanciamento del carico. I conflitti di indirizzi IP possono verificarsi se si distribuiscono due carichi di lavoro che usano porte diverse nei cluster di destinazione che condividono lo stesso AksHciClusterNetwork oggetto. A causa del modo in cui gli indirizzi IP e le mappature delle porte sono assegnati all'interno di HA Proxy, ciò può portare all'assegnazione di indirizzi IP duplicati. In questo caso, uno o entrambi i carichi di lavoro possono riscontrare problemi di connettività di rete casuali fino a quando non si distribuiscono nuovamente i carichi di lavoro. Quando si distribuiscono nuovamente i carichi di lavoro, è possibile usare la stessa porta, che assegna un indirizzo IP del servizio a ogni carico di lavoro oppure è possibile ridribuire i carichi di lavoro nei cluster di destinazione che usano oggetti diversi AksHciClusterNetwork .

Distribuire l'app

Un file manifesto di Kubernetes definisce uno stato desiderato per il cluster, ad esempio quali immagini di container eseguire. Questa esercitazione usa un manifesto per creare tutti gli oggetti necessari per eseguire l'app di voto Azure. Questo manifest include due deployment Kubernetes: uno per le app Python di esempio Azure Vote e l'altro per un'istanza Redis. Vengono creati anche due servizi Kubernetes: un servizio interno per l'istanza di Redis e un servizio esterno per accedere all'app Azure Vote da Internet.

Creare un file denominato azure-vote.yaml e copiare/incollare la definizione YAML seguente:

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

Distribuire l'app usando il kubectl apply comando e specificare il nome del manifesto YAML:

kubectl apply -f azure-vote.yaml

L'esempio di output seguente mostra i deployment e i servizi creati con successo:

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

Testare l'app

Quando l'app viene eseguita, un servizio Kubernetes espone il front-end dell'app a Internet. Questo processo può richiedere alcuni minuti.

Per monitorare lo stato di avanzamento, usare il kubectl get service comando con l'argomento --watch :

kubectl get service azure-vote-front --watch

Inizialmente, l'indirizzo EXTERNAL-IP per il servizio azure-vote-front viene visualizzato come in sospeso:

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

Quando l'indirizzo EXTERNAL-IP passa dall'indirizzo IP in sospeso a un indirizzo IP pubblico effettivo, usare CTRL-C per arrestare il processo di kubectl controllo. L'output di esempio seguente mostra un indirizzo IP pubblico valido assegnato al servizio:

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

Per visualizzare l'app Azure Vote in azione, aprire un browser Web all'indirizzo IP esterno del servizio.

Schermata della pagina iniziale dell'applicazione Azure Voting App distribuita in un cluster Kubernetes in Azure.

Ridimensionare i pod dell'applicazione

Abbiamo creato una sola replica del front-end dell'app Azure Voting e dell'istanza Redis. Per visualizzare il numero e lo stato dei pod nel cluster, usare il kubectl get comando :

kubectl get pods -n default

Il seguente output di esempio mostra un pod front-end e un 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

Per modificare il numero di pod nella distribuzione azure-vote-front , usare il kubectl scale comando . L'esempio seguente aumenta il numero di pod front-end a 5:

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

Esegui kubectl get pods di nuovo per verificare che siano stati creati pod aggiuntivi. Dopo circa un minuto i pod aggiuntivi sono disponibili nel 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

Passaggi successivi

Usare Monitoraggio di Azure per monitorare il cluster e l'applicazione