(AFGESCHAFT) DC/OS-containerbeheer via de Marathon REST API
Waarschuwing
Azure Container Service (ACS) wordt afgeschaft. Er worden geen nieuwe functies of functionaliteit meer aan ACS toegevoegd. Alles van de API's, portal, CLI-opdrachten en documentatie is gemarkeerd als afgeschaft.
Zie voor meer informatie de aankondiging over de afschaffing van Azure Container Service op Azure.com.
U wordt aangeraden een van de volgende Azure Marketplace oplossingen te implementeren:
- Mesosphere DC/OS
Zie Azure Kubernetes Service als u Kubernetes wilt gebruiken.
DC/OS biedt een omgeving voor het implementeren en schalen van geclusterde werkbelastingen terwijl de onderliggende hardware wordt onttrokken. Op de DC/OS ligt een framework dat de planning en uitvoering van rekenworkloads regelt. Hoewel frameworks beschikbaar zijn voor veel populaire workloads, kunt u in dit document containerimplementaties maken en schalen met behulp van de Marathon REST API.
Vereisten
Voer het uitvoeren van deze voorbeelden hebt u een DC/OS-cluster nodig dat is geconfigureerd in Azure Container Service. U hebt ook een externe verbinding met dit cluster nodig. Zie de volgende artikelen voor meer informatie over deze items:
- Een Azure Container Service-cluster implementeren
- Verbinding maken met een Azure Container Service-cluster
Toegang tot de DC/OS-API's
Nadat u verbinding hebt gemaakt met het Azure Container Service-cluster, hebt u toegang tot de DC/OS en gerelateerde REST API's via http://localhost:local-port. In de voorbeelden in dit document wordt ervan uitgegaan dat u poort 80 gebruikt. De Marathon-eindpunten kunnen bijvoorbeeld worden bereikt bij URI's die beginnen met http://localhost/marathon/v2/.
Zie voor meer informatie over de verschillende API's de Mesosphere-documentatie voor de Marathon API en de Chronos API, en de Apache-documentatie voor de Mesos Scheduler API.
Informatie verzamelen van DC/OS en Marathon
Voordat u containers implementeert in het DC/OS-cluster, verzamelt u informatie over het DC/OS-cluster, zoals de namen en status van de DC/OS-agents. U doet dit door een query uit te voeren op het master/slaves
-eindpunt van de DC/OS REST API. Als alles goed gaat, wordt met de query een lijst geretourneerd van DC/OS-agents en de verschillende eigenschappen voor elke agent.
curl https://localhost/mesos/master/slaves
Gebruik nu het Marathon /apps
-eindpunt om te controleren op huidige implementaties naar het DC/OS-cluster. Als dit een nieuw cluster is, ziet u een lege matrix voor apps.
curl localhost/marathon/v2/apps
{"apps":[]}
Een met Docker ingedeelde container implementeren
U implementeert Docker-geformatteerde containers via de Marathon REST API met behulp van een JSON-bestand dat de beoogde implementatie beschrijft. In het volgende voorbeeld wordt een Nginx-container geïmplementeerd in een privéagent in het 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" }
]
}
}
}
Als u een met Docker opgemaakte container wilt implementeren, slaat u het JSON-bestand op een toegankelijke locatie op. Voer vervolgens de volgende opdracht uit om de container te implementeren Geef de naam op van het JSON-bestand (marathon.json
in dit voorbeeld).
curl -X POST https://localhost/marathon/v2/apps -d @marathon.json -H "Content-type: application/json"
De uitvoer lijkt op het volgende:
{"version":"2015-11-20T18:59:00.494Z","deploymentId":"b12f8a73-f56a-4eb1-9375-4ac026d6cdec"}
Als u in Marathon toepassingen opvraagt via een query, wordt deze nieuwe toepassing in de uitvoer weergegeven.
curl localhost/marathon/v2/apps
De container bereiken
U kunt controleren of de Nginx wordt uitgevoerd in een container op een van de privéagenten in het cluster. Als u de host en poort wilt vinden waarop de container wordt uitgevoerd, voert u een query uit op Marathon voor de actieve taken:
curl localhost/marathon/v2/tasks
Zoek de waarde van host
in de uitvoer (een IP-adres dat vergelijkbaar is met 10.32.0.x
) en de waarde van ports
.
Maak nu een SSH-terminalverbinding (geen tunnelverbinding) met de beheer-FQDN van het cluster. Nadat u verbinding hebt gemaakt, voert u de volgende aanvraag uit, waarbij u de juiste waarden vervangt doorhost
:ports
curl http://host:ports
De uitvoer van de Nginx-server is vergelijkbaar met het volgende:
Uw containers schalen
U kunt de Marathon-API gebruiken om toepassingsimplementaties uit te schalen of in te schalen. In het vorige voorbeeld hebt u één exemplaar van een toepassing geïmplementeerd. Laten we dit uitschalen naar drie exemplaren van een toepassing. Dit doet u door een JSON-bestand te maken met behulp van de volgende JSON-tekst en dit op een toegankelijke locatie op te slaan.
{ "instances": 3 }
Voer vanuit uw tunnelverbinding de volgende opdracht uit om de toepassing uit te schalen.
Notitie
De URI wordt http://localhost/marathon/v2/apps/ gevolgd door de id van de toepassing die moet worden geschaald. Als u het Nginx-voorbeeld gebruikt dat hier wordt opgegeven, is de URI http://localhost/marathon/v2/apps/nginx.
curl https://localhost/marathon/v2/apps/nginx -H "Content-type: application/json" -X PUT -d @scale.json
Voer tenslotte een query voor toepassingen uit op het Marathon-eindpunt. U zult zien dat er nu drie Nginx-containers zijn.
curl localhost/marathon/v2/apps
Vergelijkbare PowerShell-opdrachten
U kunt dezelfde acties uitvoeren met behulp van PowerShell-opdrachten in een Windows-systeem.
Voer de volgende opdracht uit om informatie te verzamelen over het DC/OS-cluster, zoals agentnamen en agentstatus:
Invoke-WebRequest -Uri https://localhost/mesos/master/slaves
U implementeert met Docker ingedeelde containers via Marathon met behulp van een JSON-bestand waarin het doel van de implementatie wordt beschreven. In het volgende voorbeeld wordt de Nginx-container geïmplementeerd, met een binding van poort 80 van de DC/OS-agent naar poort 80 van de container.
{
"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" }
]
}
}
}
Als u een met Docker opgemaakte container wilt implementeren, slaat u het JSON-bestand op een toegankelijke locatie op. Voer vervolgens de volgende opdracht uit om de container te implementeren Geef het pad naar het JSON-bestand op (marathon.json
in dit voorbeeld).
Invoke-WebRequest -Method Post -Uri https://localhost/marathon/v2/apps -ContentType application/json -InFile 'c:\marathon.json'
U kunt ook de Marathon API gebruiken om in implementaties van toepassingen uit of in te schalen. In het vorige voorbeeld hebt u één exemplaar van een toepassing geïmplementeerd. Laten we dit uitschalen naar drie exemplaren van een toepassing. Dit doet u door een JSON-bestand te maken met behulp van de volgende JSON-tekst en dit op een toegankelijke locatie op te slaan.
{ "instances": 3 }
Voer de volgende opdracht uit om de toepassing uit te schalen:
Notitie
De URI wordt http://localhost/marathon/v2/apps/ gevolgd door de id van de toepassing die moet worden geschaald. Als u het Nginx-voorbeeld gebruikt dat hier wordt opgegeven, is de URI http://localhost/marathon/v2/apps/nginx.
Invoke-WebRequest -Method Put -Uri https://localhost/marathon/v2/apps/nginx -ContentType application/json -InFile 'c:\scale.json'