(DEPRECATO) Bilanciare il carico dei contenitori in un cluster DC/OS del servizio Azure Container

Avviso

Il servizio Azure Container (ACS) è deprecato. Non saranno aggiunte nuove funzionalità al servizio Azure Container. Tutte le API, l'esperienza del portale, i comandi dell'interfaccia della riga di comando e la documentazione sono contrassegnate come deprecate.

Per altre informazioni, vedere l'annuncio di deprecazione del servizio Azure Container su Azure.com.

È consigliabile distribuire una delle soluzioni di Azure Marketplace seguenti:

Se si vuole usare Kubernetes, vedere Servizio Azure Kubernetes.

Questo articolo illustra come creare un servizio di bilanciamento del carico interno in un servizio Azure Container gestito di tipo DC/OS con Marathon-LB. Questa configurazione supporta la scalabilità orizzontale delle applicazioni e consente anche di sfruttare i cluster di agenti pubblici e privati inserendo i servizi di bilanciamento del carico nel cluster pubblico e i contenitori di applicazioni nel cluster privato. In questa esercitazione:

  • Configurare un servizio di bilanciamento del carico Marathon
  • Distribuire un'applicazione tramite il bilanciamento del carico
  • Configurare Azure Load Balancer

È necessario un cluster del controller di dominio/sistema operativo del servizio contenitore di Azure per completare i passaggi in questa esercitazione. Se necessario, questo esempio di script può crearne uno.

Questa esercitazione richiede l'interfaccia della riga di comando di Azure 2.0.4 o versioni successive. Eseguire az --version per trovare la versione. Se è necessario eseguire l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

Usare Azure Cloud Shell

Azure Cloud Shell è un ambiente di shell interattivo ospitato in Azure e usato tramite il browser. È possibile usare Bash o PowerShell con Cloud Shell per usare i servizi di Azure. È possibile usare i comandi preinstallati di Cloud Shell per eseguire il codice contenuto in questo articolo senza dover installare strumenti nell'ambiente locale.

Per avviare Azure Cloud Shell:

Opzione Esempio/Collegamento
Selezionare Prova nell'angolo superiore destro di un blocco di codice. La selezione di Prova non comporta la copia automatica del codice in Cloud Shell. Esempio di Prova per Azure Cloud Shell
Passare a https://shell.azure.com o selezionare il pulsante Avvia Cloud Shell per aprire Cloud Shell nel browser. Avviare Cloud Shell in una nuova finestra
Selezionare il pulsante Cloud Shell nella barra dei menu nell'angolo in alto a destra del portale di Azure. Pulsante Cloud Shell nel portale di Azure

Per eseguire il codice di questo articolo in Azure Cloud Shell:

  1. Avviare Cloud Shell.

  2. Selezionare il pulsante Copia in un blocco di codice per copiare il codice.

  3. Incollare il codice nella sessione di Cloud Shell premendo CTRL+MAIUSC+V in Windows e Linux o CMD+MAIUSC+V in macOS.

  4. Premere INVIO per eseguire il codice.

Panoramica del bilanciamento del carico

In un cluster DC/OS del servizio Azure Container esistono due livelli di bilanciamento del carico:

Azure Load Balancer offre punti di ingresso pubblici, ovvero i punti accessibili per gli utenti finali. Questa funzionalità viene fornita automaticamente dal servizio Azure Container ed è configurata per impostazione predefinita in modo da esporre le porte 80, 443 e 8080.

Il servizio di bilanciamento del carico Marathon (marathon-lb) indirizza le richieste in ingresso a istanze del contenitore che gestiscono tali richieste. Quando i contenitori che mettono a disposizione il servizio Web vengono ridimensionati, marathon-lb si adatta in modo dinamico. Questo servizio di bilanciamento del carico non viene fornito per impostazione predefinita nel servizio contenitore, ma è semplice da installare.

Configurare il servizio di bilanciamento del carico Marathon

Il servizio di bilanciamento del carico Marathon si riconfigura in base ai contenitori distribuiti. È anche resiliente in caso di perdita di un contenitore o di un agente. In questi casi, Apache Mesos riavvia il contenitore in un'altra posizione e marathon-lb si adatta.

Passare a https://shell.azure.com per aprire Cloud Shell nel browser.

Eseguire il comando seguente per installare il servizio di bilanciamento del carico Marathon nel cluster dell'agente pubblico.

dcos package install marathon-lb

Distribuire un'applicazione con bilanciamento del carico

Ora che il pacchetto marathon-lb è disponibile, è possibile distribuire un contenitore di applicazioni di cui si vuole bilanciare il carico.

Innanzitutto, ottenere il nome di dominio completo degli agenti esposti pubblicamente.

az acs list --resource-group myResourceGroup --query "[0].agentPoolProfiles[0].fqdn" --output tsv

Creare poi un file denominato hello-web.json e copiarvi il contenuto seguente. L'etichetta HAPROXY_0_VHOST deve essere aggiornata con il nome di dominio completo degli agenti DC/OS.

{
  "id": "web",
  "container": {
    "type": "DOCKER",
    "docker": {
      "image": "yeasy/simple-web",
      "network": "BRIDGE",
      "portMappings": [
        { "hostPort": 0, "containerPort": 80, "servicePort": 10000 }
      ],
      "forcePullImage":true
    }
  },
  "instances": 3,
  "cpus": 0.1,
  "mem": 65,
  "healthChecks": [{
      "protocol": "HTTP",
      "path": "/",
      "portIndex": 0,
      "timeoutSeconds": 10,
      "gracePeriodSeconds": 10,
      "intervalSeconds": 2,
      "maxConsecutiveFailures": 10
  }],
  "labels":{
    "HAPROXY_GROUP":"external",
    "HAPROXY_0_VHOST":"YOUR FQDN",
    "HAPROXY_0_MODE":"http"
  }
}

Usare l'interfaccia della riga di comando di DC/OS per eseguire l'applicazione. Per impostazione predefinita, Marathon distribuisce l'applicazione nel cluster privato. Ciò significa che la distribuzione di cui sopra è accessibile solo tramite il servizio di bilanciamento del carico, che corrisponde in genere al comportamento desiderato.

dcos marathon app add hello-web.json

Una volta distribuita l'applicazione, passare al nome di dominio completo del cluster dell'agente per visualizzare l'applicazione con bilanciamento del carico.

Immagine dell'applicazione con bilanciamento del carico

Configurare Azure Load Balancer

Per impostazione predefinita, Azure Load Balancer espone le porte 80, 8080 e 443. Se si usa una di queste tre porte, come nell'esempio precedente, non è necessario eseguire alcuna operazione. Dovrebbe essere possibile accedere al nome FQDN del servizio di bilanciamento del carico dell'agente e, ogni volta che si esegue l'aggiornamento, si accederà a uno dei tre server Web in modalità round robin.

Se si usa una porta diversa, è necessario aggiungere una regola di round robin e un probe nel servizio di bilanciamento del carico per la porta usata. È possibile eseguire questa operazione dall'interfaccia della riga di comando di Azure con i comandi azure network lb rule create e azure network lb probe create.

Passaggi successivi

In questa esercitazione è stata illustrata la funzionalità di bilanciamento del carico nel servizio contenitore di Azure sia con il servizio di bilanciamento del carico Marathon che con Azure Load Balancer, incluse le azioni seguenti:

  • Configurare un servizio di bilanciamento del carico Marathon
  • Distribuire un'applicazione tramite il bilanciamento del carico
  • Configurare Azure Load Balancer

Passare alla prossima esercitazione per informazioni sull'integrazione dell'archiviazione di Azure con DC/OS in Azure.