Esercitazione: Distribuire un'app Linux

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

Questa esercitazione descrive come distribuire un'app multi-contenitore che include un front-end Web e un'istanza di database Redis nel cluster Kubernetes abilitato da Azure Arc. Si apprenderà anche come testare e ridimensionare l'app.

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

Prima di iniziare

Verificare che siano pronti i requisiti seguenti:

  • Un cluster del servizio Azure Kubernetes con almeno un nodo di lavoro Linux in esecuzione e in esecuzione.
  • File kubeconfig per accedere al cluster.
  • Il modulo AksHci PowerShell è installato. Per altre informazioni, vedere Install-AksHci.

Quando si esegue le procedure di esercitazione:

  • Eseguire i comandi in una finestra di PowerShell aperta con privilegi amministrativi.
  • Assicurarsi che i carichi di lavoro specifici del sistema operativo vengano terreni nell'host contenitore appropriato. Se il cluster Kubernetes include una combinazione di nodi di lavoro Linux e Windows, è possibile usare i selettore di nodi o le taints e le tolerazioni. Per altre informazioni, vedere uso di selettore di nodi e taints e tolerations.

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 HA, 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 finché 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 distribuire nuovamente 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 di Kubernetes: una per le app Python di voto di Azure di esempio e l'altra per un'istanza Redis. Vengono creati anche due servizi Kubernetes: un servizio interno per l'istanza Redis e un servizio esterno per accedere all'app Azure Vote da Internet.

Create 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: mcr.microsoft.com/azuredocs/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 l'app front-end a Internet. Il processo potrebbe richiedere alcuni minuti.

Per monitorare lo stato di avanzamento, usare il comando con l'argomento kubectl get service--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 cambia da in sospeso a un indirizzo IP pubblico effettivo, usare CTRL-C per arrestare il kubectl processo di watch. 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 vedere in azione l'app Azure Vote, aprire un Web browser all'indirizzo IP esterno del servizio.

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

Ridimensionare i pod dell'applicazione

È stata creata una singola replica dell'istanza front-end dell'app di voto di Azure 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 altri pod. 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