Distribuire un'app Linux

Si applica a: Servizio Azure Kubernetes in Azure Stack HCI 22H2, servizio Azure Kubernetes in Windows Server

Questa guida descrive come distribuire un'app multi-contenitore che include un front-end Web e un'istanza di database Redis nel cluster Kubernetes nel servizio Azure Kubernetes abilitato da Azure Arc. 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.

Operazioni preliminari

Verificare di disporre dei prerequisiti seguenti:

  • Un cluster del servizio Azure Kubernetes con almeno un nodo di lavoro Linux in esecuzione.
  • Un file kubeconfig per accedere al cluster.
  • Viene installato il modulo Azure KubernetesHci di PowerShell. 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 si adattino all'host contenitore appropriato. Se il cluster Kubernetes ha una combinazione di nodi di lavoro Linux e Windows, è possibile usare selettori di nodo o taints e tolleranze. Per altre informazioni, vedere Uso di selettori di nodo e taints e tolleranze.

Nota

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 i mapping delle porte vengono allocati all'interno del proxy a disponibilità elevata, può causare l'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 Kubernetes definisce uno stato desiderato per il cluster, ad esempio le immagini del contenitore da eseguire. Questa esercitazione usa un manifesto per creare tutti gli oggetti necessari per eseguire l'app Di voto di Azure. Questo manifesto include due distribuzioni kubernetes: una per le app Python di azure Vote di esempio e l'altra per un'istanza di 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'output di esempio seguente mostra le distribuzioni e i servizi creati correttamente:

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, 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.

Screenshot della home page dell'applicazione Azure Voting App distribuita in un cluster Kubernetes in Azure.

Ridimensionare i pod dell'applicazione

È stata creata una singola replica dell'istanza front-end di Azure Voting App e Redis. Per visualizzare il numero e lo stato dei pod nel cluster, usare il kubectl get comando :

kubectl get pods -n default

L'output di esempio seguente illustra 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

Eseguire 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