(DEPRECATO) Gestione dei contenitori DC/OS tramite l'API REST Marathon

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.

DC/OS offre un ambiente di distribuzione e ridimensionamento dei carichi di lavoro cluster con l'astrazione dell'hardware sottostante. In DC/OS è disponibile anche un framework che gestisce la pianificazione e l'esecuzione dei carichi di lavoro di calcolo. Sono disponibili framework per molti dei carichi di lavoro più comuni. Questo documento illustra come iniziare a creare e ridimensionare le distribuzioni di contenitori usando l'API REST di Marathon.

Prerequisiti

Prima di eseguire questi esempi, è necessario avere un cluster DC/OS configurato nel servizio Azure Container. È necessaria anche la connettività remota a questo cluster. Per altre informazioni su questi elementi, vedere gli articoli indicati di seguito:

Accedere alle API di DC/OS

Dopo la connessione al cluster del servizio Azure Container, è possibile accedere al controller di dominio/sistema operativo e alle API REST correlate tramite http://localhost:local-port. Gli esempi riportati in questo documento presuppongono il tunneling sulla porta 80. Ad esempio, gli endpoint Marathon possono essere raggiunti agli URI che iniziano con http://localhost/marathon/v2/.

Per altre informazioni sulle varie API, vedere la documentazione di Mesosphere per l'API Marathon e l'API Chronos, nonché la documentazione di Apache per l'API dell'utilità di pianificazione Mesos.

Raccogliere informazioni da DC/OS e Marathon

Prima di distribuire contenitori nel cluster DC/OS, è necessario raccogliere informazioni relative a tale cluster, ad esempio il nome e lo stato degli agenti di DC/OS. A tale scopo, eseguire una query sull'endpoint master/slaves dell'API REST di DC/OS. Se la query riesce, verrà restituito un elenco di agenti di DC/OS e diverse proprietà per ognuno.

curl https://localhost/mesos/master/slaves

A questo punto, usare l'endpoint /apps di DC/OS per cercare le distribuzioni correnti dell'applicazione nel cluster DC/OS. Se si tratta di un nuovo cluster, viene visualizzata una matrice vuota di app.

curl localhost/marathon/v2/apps

{"apps":[]}

Distribuire un contenitore Docker formattato

I contenitori Docker formattati vengono distribuiti tramite l'API REST di Marathon usando un file JSON che descrive la distribuzione prevista. L'esempio seguente distribuisce un contenitore Nginx a un agente privato del cluster.

{
  "id": "nginx",
  "cpus": 0.1,
  "mem": 32.0,
  "instances": 1,
  "container": {
    "type": "DOCKER",
    "docker": {
      "image": "nginx",
      "network": "BRIDGE",
      "portMappings": [
        { "containerPort": 80, "servicePort": 9000, "protocol": "tcp" }
      ]
    }
  }
}

Per distribuire un contenitore Docker formattato, archiviare il file JSON in un percorso accessibile. Successivamente, eseguire il comando riportato di seguito per distribuire il contenitore. Specificare il nome del file JSON (marathon.json in questo esempio).

curl -X POST https://localhost/marathon/v2/apps -d @marathon.json -H "Content-type: application/json"

L'output è simile al seguente:

{"version":"2015-11-20T18:59:00.494Z","deploymentId":"b12f8a73-f56a-4eb1-9375-4ac026d6cdec"}

Se ora si esegue una query per cercare applicazioni in Marathon, la nuova applicazione viene visualizzata nell'output.

curl localhost/marathon/v2/apps

Raggiungere il contenitore

È possibile verificare che il Nginx sia in esecuzione in un contenitore su uno degli agenti privati del cluster. Per trovare l'host e la porta in cui è in esecuzione il contenitore, eseguire una query a Marathon per le attività in esecuzione:

curl localhost/marathon/v2/tasks

Trovare il valore di host nell'output (un indirizzo IP simile a 10.32.0.x) e il valore di ports.

Ora creare una connessione terminal SSH (non una connessione con tunnel) al FQDN di gestione del cluster. Quindi eseguire la richiesta seguente, sostituendo i valori corretti di host e ports:

curl http://host:ports

L'output del server di Nginx è simile al seguente:

Nginx from container

Ridimensionare i contenitori

L'API Marathon può essere usata per aumentare o ridurre il numero di istanze delle distribuzioni di applicazioni. Nell'esempio precedente è stata distribuita un'istanza di un'applicazione. Il numero di istanze dell'applicazione viene ora aumentato a tre. A tale scopo, creare un file JSON usando il testo JSON seguente e archiviarlo in un percorso accessibile.

{ "instances": 3 }

Dalla connessione con tunnel, eseguire il comando seguente per aumentare il numero di istanze dell'applicazione.

Nota

L'URI è http://localhost/marathon/v2/apps/ seguito dall'ID dell'applicazione da ridimensionare. Se si usa l'esempio Nginx fornito qui, l'URI sarà http://localhost/marathon/v2/apps/nginx.

curl https://localhost/marathon/v2/apps/nginx -H "Content-type: application/json" -X PUT -d @scale.json

Infine, eseguire una query per le istanze dell'applicazione nell'endpoint Marathon. Ora sono presenti tre contenitori Nginx.

curl localhost/marathon/v2/apps

Comandi di PowerShell equivalenti

È possibile eseguire queste stesse azioni usando i comandi di PowerShell in un sistema Windows.

Per raccogliere informazioni sul cluster DC/OS, ad esempio il nome e lo stato degli agenti, eseguire il comando seguente:

Invoke-WebRequest -Uri https://localhost/mesos/master/slaves

I contenitori Docker formattati vengono distribuiti tramite Marathon usando un file JSON che descrive la distribuzione prevista. L'esempio seguente mostra come distribuire il contenitore Nginx associando la porta 80 dell'agente di DC/OS alla porta 80 del contenitore.

{
  "id": "nginx",
  "cpus": 0.1,
  "mem": 32.0,
  "instances": 1,
  "container": {
    "type": "DOCKER",
    "docker": {
      "image": "nginx",
      "network": "BRIDGE",
      "portMappings": [
        { "containerPort": 80, "servicePort": 9000, "protocol": "tcp" }
      ]
    }
  }
}

Per distribuire un contenitore Docker formattato, archiviare il file JSON in un percorso accessibile. Successivamente, eseguire il comando riportato di seguito per distribuire il contenitore. Specificare il percorso del file JSON (marathon.json in questo esempio).

Invoke-WebRequest -Method Post -Uri https://localhost/marathon/v2/apps -ContentType application/json -InFile 'c:\marathon.json'

L'API Marathon può anche essere usata per aumentare o ridurre il numero di istanze delle distribuzioni di applicazioni. Nell'esempio precedente è stata distribuita un'istanza di un'applicazione. Il numero di istanze dell'applicazione viene ora aumentato a tre. A tale scopo, creare un file JSON usando il testo JSON seguente e archiviarlo in un percorso accessibile.

{ "instances": 3 }

Eseguire questo comando per aumentare il numero di istanze dell'applicazione:

Nota

L'URI è http://localhost/marathon/v2/apps/ seguito dall'ID dell'applicazione da ridimensionare. Se si usa l'esempio Nginx fornito qui, l'URI sarà http://localhost/marathon/v2/apps/nginx.

Invoke-WebRequest -Method Put -Uri https://localhost/marathon/v2/apps/nginx -ContentType application/json -InFile 'c:\scale.json'

Passaggi successivi