Bilanciare il carico dei contenitori in un cluster DC/OS del servizio contenitore di AzureLoad balance containers in an Azure Container Service DC/OS cluster

Questo articolo illustra come creare un servizio di bilanciamento del carico interno in un servizio contenitore di Azure gestito di tipo DC/OS con Marathon-LB.In this article, we explore how to create an internal load balancer in a DC/OS managed Azure Container Service using Marathon-LB. Questa configurazione supporta la scalabilità orizzontale delle applicazioniThis configuration enables you to scale your applications horizontally. 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.It also allows you to take advantage of the public and private agent clusters by placing your load balancers on the public cluster and your application containers on the private cluster. In questa esercitazione si apprenderà come:In this tutorial, you:

  • Configurare un servizio di bilanciamento del carico MarathonConfigure a Marathon Load Balancer
  • Distribuire un'applicazione tramite il bilanciamento del caricoDeploy an application using the load balancer
  • Configurare Azure Load BalancerConfigure and Azure load balancer

È necessario un cluster DC/OS del servizio contenitore di Azure per completare i passaggi in questa esercitazione.You need an ACS DC/OS cluster to complete the steps in this tutorial. Se necessario, questo script di esempio può crearne uno appositamente.If needed, this script sample can create one for you.

Questa esercitazione richiede l'interfaccia della riga di comando di Azure 2.0.4 o versioni successive.This tutorial requires the Azure CLI version 2.0.4 or later. Eseguire az --version per trovare la versione.Run az --version to find the version. Se è necessario eseguire l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure 2.0.If you need to upgrade, see Install Azure CLI 2.0.

Avviare Azure Cloud ShellLaunch Azure Cloud Shell

Azure Cloud Shell è una shell Bash gratuita che può essere eseguita direttamente nel portale di Azure.The Azure Cloud Shell is a free Bash shell that you can run directly within the Azure portal. Include l'interfaccia della riga di comando di Azure preinstallata e configurata per l'uso con l'account.It has the Azure CLI preinstalled and configured to use with your account. Fare clic sul pulsante Cloud Shell nel menu nel riquadro in alto a destra nel portale di Azure.Click the Cloud Shell button on the menu in the upper-right of the Azure portal.

Cloud ShellCloud Shell

Il pulsante avvia una shell interattiva che è possibile usare per eseguire i passaggi di questo argomento:The button launches an interactive shell that you can use to run the steps in this topic:

Screenshot che mostra la finestra di Cloud Shell nel portaleScreenshot showing the Cloud Shell window in the portal

Panoramica del bilanciamento del caricoLoad balancing overview

In un cluster DC/OS del servizio contenitore di Azure esistono due livelli di bilanciamento del carico:There are two load-balancing layers in an Azure Container Service DC/OS cluster:

Azure Load Balancer offre punti di ingresso pubblici, ovvero i punti accessibili per gli utenti finali.Azure Load Balancer provides public entry points (the ones that end users access). Questa funzionalità viene fornita automaticamente dal servizio contenitore di Azure ed è configurata per impostazione predefinita in modo da esporre le porte 80, 443 e 8080.An Azure LB is provided automatically by Azure Container Service and is, by default, configured to expose port 80, 443 and 8080.

Il servizio di bilanciamento del carico Marathon (marathon-lb) indirizza le richieste in ingresso a istanze del contenitore che gestiscono tali richieste.The Marathon Load Balancer (marathon-lb) routes inbound requests to container instances that service these requests. Quando i contenitori che mettono a disposizione il servizio Web vengono ridimensionati, marathon-lb si adatta in modo dinamico.As we scale the containers providing our web service, the marathon-lb dynamically adapts. Questo servizio di bilanciamento del carico non viene fornito per impostazione predefinita nel servizio contenitore, ma è semplice da installare.This load balancer is not provided by default in your Container Service, but it is easy to install.

Configurare il servizio di bilanciamento del carico MarathonConfigure Marathon Load Balancer

Il servizio di bilanciamento del carico Marathon si riconfigura in base ai contenitori distribuiti.Marathon Load Balancer dynamically reconfigures itself based on the containers that you've deployed. È 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.It's also resilient to the loss of a container or an agent - if this occurs, Apache Mesos restarts the container elsewhere and marathon-lb adapts.

Eseguire il comando seguente per installare il servizio di bilanciamento del carico Marathon nel cluster dell'agente pubblico.Run the following command to install the marathon load balancer on the public agent's cluster.

dcos package install marathon-lb

Distribuire un'applicazione con bilanciamento del caricoDeploy load balanced application

Ora che il pacchetto marathon-lb è disponibile, è possibile distribuire un contenitore di applicazioni di cui si vuole bilanciare il carico.Now that we have the marathon-lb package, we can deploy an application container that we wish to load balance.

Innanzitutto, ottenere il nome di dominio completo degli agenti esposti pubblicamente.First, get the FQDN of the publicly exposed agents.

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.Next, create a file named hello-web.json and copy in the following contents. L'etichetta HAPROXY_0_VHOST deve essere aggiornata con il nome di dominio completo degli agenti DC/OS.The HAPROXY_0_VHOST label needs to be updated with the FQDN of the DC/OS agents.

{
  "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.Use the DC/OS CLI to run the application. Per impostazione predefinita, Marathon distribuisce l'applicazione nel cluster privato.By default Marathon deploys the the applicaton to the private cluster. Ciò significa che la distribuzione di cui sopra è accessibile solo tramite il servizio di bilanciamento del carico, che corrisponde in genere al comportamento desiderato.This means that the above deployment is only accessible via your load balancer, which is usually the desired behavior.

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.Once the application has been deployed, browse to the FQDN of the agent cluster to view load balanced application.

Immagine dell'applicazione con bilanciamento del carico

Configurare Azure Load BalancerConfigure Azure Load Balancer

Per impostazione predefinita, Azure Load Balancer espone le porte 80, 8080 e 443.By default, Azure Load Balancer exposes ports 80, 8080, and 443. Se si usa una di queste tre porte, come nell'esempio precedente, non è necessario eseguire alcuna operazione.If you're using one of these three ports (as we do in the above example), then there is nothing you need to do. 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.You should be able to hit your agent load balancer's FQDN, and each time you refresh, you'll hit one of your three web servers in a round-robin fashion.

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.If you use a different port, you need to add a round-robin rule and a probe on the load balancer for the port that you used. È 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.You can do this from the Azure CLI, with the commands azure network lb rule create and azure network lb probe create.

Passaggi successiviNext steps

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:In this tutorial, you learned about load balancing in ACS with both the Marathon and Azure load balancers including the following actions:

  • Configurare un servizio di bilanciamento del carico MarathonConfigure a Marathon Load Balancer
  • Distribuire un'applicazione tramite il bilanciamento del caricoDeploy an application using the load balancer
  • Configurare Azure Load BalancerConfigure and Azure load balancer

Passare alla prossima esercitazione per informazioni sull'integrazione dell'archiviazione di Azure con DC/OS in Azure.Advance to the next tutorial to learn about integrating Azure storage with DC/OS in Azure.