(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:
- Controller di dominio/sistema operativo Mesosphere
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:
- Distribuire un cluster del servizio Azure Container
- Connettersi a un cluster del servizio Azure Container
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:
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'