Esercizio - Distribuire un'applicazione nel cluster del servizio Azure Kubernetes

Completato

In questo esercizio verrà distribuito il sito Web della società come app di test nel servizio Azure Kubernetes (AKS). Il sito Web è un sito Web statico con uno stack di tecnologie sottostanti HTML, CSS e JavaScript. Non riceve così tante richieste come gli altri servizi e rappresenta un modo sicuro per testare le opzioni di distribuzione.

Nota

Il codice per l'app Web è disponibile in questo repository GitHub se si vuole esplorare ulteriormente il codice sorgente. Inoltre, questa app di esempio viene distribuita solo in un pool di nodi Linux.

Importante

Per completare questo esercizio è necessaria una sottoscrizione di Azure propria e potrebbero essere applicati costi. Se non si ha già una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

Creare un manifesto della distribuzione

Si crea un file manifesto della distribuzione per distribuire l'applicazione. Il file manifesto consente di definire il tipo di risorsa che si vuole distribuire e tutti i dettagli associati al carico di lavoro.

Kubernetes raggruppa i contenitori in strutture logiche denominate pod, non intelligenti. Le implementazioni aggiungono l'intelligenza mancante per creare la tua applicazione. A questo punto è possibile creare un file di distribuzione.

  1. Nel computer usare un editor di testo come Visual Studio Code e copiare e incollare il codice YAML seguente in un file denominato deployment.yaml e salvare il file.

    # deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
    spec:
      selector:
        matchLabels:
          app: contoso-website
      template:
        metadata:
          labels:
            app: contoso-website
        spec:
          nodeSelector:
            kubernetes.io/os: linux
          containers:
            - image: mcr.microsoft.com/mslearn/samples/contoso-website
              name: contoso-website
              resources:
                requests:
                  cpu: 100m
                  memory: 128Mi
                limits:
                  cpu: 250m
                  memory: 256Mi
              ports:
                - containerPort: 80
                  name: http
    
    • Vengono usate due chiavi per definire le apiVersion e kind del manifest che si sta per creare. Per ulteriori informazioni su apiVersion e su quali valori inserire in questa chiave, consultare la documentazione ufficiale sulle distribuzioni di Kubernetes.
    • name è il nome della distribuzione. Usalo per identificare e interrogare le informazioni della distribuzione quando si usa kubectl.
    • La definizione del template definisce le informazioni sui pod all'interno del file manifesto. Il modello viene inserito nel file manifesto sotto la sezione delle specifiche della distribuzione.
    • Chiave labels per consentire alle distribuzioni di trovare e raggruppare i pod.
    • In un cluster del servizio Azure Kubernetes con pool di nodi Linux e Windows, il manifesto della distribuzione definisce un nodeSelector oggetto per indicare al cluster del servizio Azure Kubernetes di eseguire il pod dell'applicazione di esempio in un nodo che può eseguire contenitori Linux. I nodi Linux non possono eseguire contenitori Windows e viceversa.
    • La chiave containers è una matrice di specifiche del contenitore poiché un pod può avere uno o più contenitori. Le specifiche definiscono image, name, resources, ports e altre informazioni importanti sul contenitore. Per tutti i pod in esecuzione verrà usato il nome contoso-website-<UUID>, dove UUID è un ID generato per identificare tutte le risorse in modo univoco.
    • È consigliabile definire una quantità minima e massima di risorse che l'app è autorizzata a usare dal cluster. Usare la chiave resources per specificare queste informazioni. La sezione della risorsa consente di specificare la quantità minima di risorsa come richiesta e la quantità massima di risorse come limite.
    • Le porte che questo contenitore espone esternamente tramite il parametro ports. La chiave ports è una matrice di oggetti e ciò significa che un contenitore in un pod può esporre più porte con più nomi. Assegnare un nome alla porta usando la name chiave . L'assegnazione di un nome alle porte consente di modificare la porta esposta senza modificare i file che fanno riferimento a tale porta.
  2. Caricare deployment.yaml nella sessione di Cloud Shell selezionando Gestisci file>Carica.

Applicare il manifesto

  1. In Cloud Shell eseguire il comando kubectl apply per inviare il manifesto della distribuzione al cluster.

    kubectl apply -f ./deployment.yaml
    

    Il comando dovrebbe restituire un output simile all'esempio seguente.

    deployment.apps/contoso-website created
    
  2. Eseguire il comando kubectl get deploy per verificare se la distribuzione è stata completata correttamente.

    kubectl get deploy contoso-website
    

    Il comando dovrebbe restituire una tabella simile all'esempio seguente.

    NAME              READY   UP-TO-DATE   AVAILABLE   AGE
    contoso-website   1/1     1            1           19s
    
  3. Eseguire il comando kubectl get pods per verificare se il pod è in esecuzione.

    kubectl get pods
    

    Il comando dovrebbe restituire una tabella simile all'esempio seguente.

    NAME                               READY   STATUS    RESTARTS   AGE
    contoso-website-1c2b3b4b5b-dzsvm   1/1     Running   0          68s