(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:

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:

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:

Nginx from container

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'

Volgende stappen