(VERALTET) DC/OS-Containerverwaltung über die Marathon-REST-API

Warnung

Azure Container Service (ACS) wird ausgemustert. Für ACS werden keine neuen Features oder Funktionen mehr hinzugefügt. Sämtliche APIs, Portalfunktionen, CLI-Befehle und Dokumentationen werden als veraltet gekennzeichnet.

Weitere Informationen finden Sie unter Einstellung von Azure Container Service am 31. Januar 2020.

Es wird empfohlen, eine der folgenden Azure Marketplace-Lösungen bereitzustellen:

Wenn Sie Kubernetes verwenden möchten, finden Sie weitere Informationen unter Azure Kubernetes Service.

DC/OS stellt eine Umgebung für die Bereitstellung und Skalierung geclusterter Workloads bereit und abstrahiert die zugrunde liegende Hardware. Zusätzlich zu DC/OS ist auch ein Framework vorhanden, mit dem die Planung und Ausführung von Computeworkloads verwaltet wird. Es sind zwar Frameworks für viele gängige Workloads verfügbar, dieses Dokument bietet jedoch eine Einführung in das Erstellen und Skalieren von Containerbereitstellungen mithilfe der Marathon-REST-API.

Voraussetzungen

Bevor Sie diese Beispiele durcharbeiten, benötigen Sie einen DC/OS-Cluster, der im Azure Container Service konfiguriert ist. Sie müssen auch über Remoteverbindungen mit diesem Cluster verfügen. Weitere Informationen zu diesen Elementen finden Sie in den folgenden Artikeln:

Zugriff auf die DC/OS-APIs

Nachdem Sie mit dem Azure Container Service Cluster verbunden sind, können Sie über die REST-APIs auf DC/OS und verwandte REST-APIs zugreifen. http://localhost:local-port. Bei den Beispielen in diesem Dokument wird davon ausgegangen, dass das Tunneling über Port 80 erfolgt. Beispielsweise können die Marathonendpunkte beginnend mit URIs erreicht werden. http://localhost/marathon/v2/.

Weitere Informationen zu den verschiedenen APIs finden Sie in der Mesosphere-Dokumentation für die Marathon-API und die Chronos-API sowie in der Apache-Dokumentation für die Mesos Scheduler-API.

Erfassen von Informationen von DC/OS und Marathon

Erfassen Sie vor dem Bereitstellen von Containern im DC/OS-Cluster einige Informationen zum DC/OS-Cluster, z.B. die Namen und den Status der DC/OS-Agents. Fragen Sie dazu den master/slaves-Endpunkt der DC/OS-REST-API ab. Wenn alles geklappt hat, gibt die Abfrage eine Liste mit DC/OS-Agents und jeweils einigen Eigenschaften zurück.

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

Verwenden Sie nun den Marathon-/apps-Endpunkt, um aktuelle Anwendungsbereitstellungen im DC/OS-Cluster zu überprüfen. Im Falle eines neuen Clusters wird ein leeres Array für Apps angezeigt.

curl localhost/marathon/v2/apps

{"apps":[]}

Bereitstellen eines Containers im Docker-Format

Sie stellen Container im Docker-Format mit der Marathon-REST-API über eine JSON-Datei bereit, die die vorgesehene Bereitstellung beschreibt. Im folgenden Beispiel wird ein Nginx-Container für einen privaten Agent im Cluster bereitgestellt.

{
  "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" }
      ]
    }
  }
}

Speichern Sie zum Bereitstellen eines Containers im Docker-Format die JSON-Datei an einem zugänglichen Speicherort. Führen Sie als Nächstes den folgenden Befehl aus, um den Container bereitzustellen. Geben Sie den Namen der JSON-Datei an (in diesem Beispiel: marathon.json).

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

Die Ausgabe sieht in etwa wie folgt aus:

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

Wenn Sie jetzt Marathon auf Anwendungen abfragen, erscheint diese neue Anwendung in der Ausgabe.

curl localhost/marathon/v2/apps

Zugreifen auf den Container

Sie können überprüfen, ob Nginx in einem Container auf einem der privaten Agents im Cluster ausgeführt wird. Um den Host und Port zu ermitteln, auf denen der Container ausgeführt wird, fragen Sie Marathon nach den ausgeführten Aufgaben ab:

curl localhost/marathon/v2/tasks

Ermitteln Sie in der Ausgabe den Wert von host (eine IP-Adresse wie 10.32.0.x) und den Wert von ports.

Stellen Sie jetzt eine SSH-Terminalverbindung (keine getunnelte Verbindung) mit dem Verwaltungs-FQDN des Clusters her. Führen Sie nach dem Herstellen der Verbindung die folgende Anforderung aus, wobei Sie für host und ports die richtigen Werte angeben:

curl http://host:ports

Die Ausgabe des Nginx-Servers sieht in etwa wie folgt aus:

Nginx from container

Skalieren der Container

Sie können die Marathon-API verwenden, um Anwendungsbereitstellungen horizontal hoch- oder herunterzuskalieren. Im vorherigen Beispiel haben Sie eine Instanz einer Anwendung bereitgestellt. Wir führen hierfür jetzt das horizontale Hochskalieren auf drei Instanzen einer Anwendung durch. Hierzu erstellen Sie eine JSON-Datei, indem Sie den folgenden JSON-Text verwenden und an einem zugänglichen Speicherort speichern.

{ "instances": 3 }

Führen Sie über die getunnelte Verbindung folgenden Befehl aus, um die Anwendung horizontal hochzuskalieren.

Hinweis

Der URI lautet „http://localhost/marathon/v2/apps/“, gefolgt von der ID der zu skalierenden Anwendung. Wenn Sie das hier bereitgestellte Nginx-Beispiel verwenden, wäre der URI http://localhost/marathon/v2/apps/nginx.

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

Fragen Sie den Marathon-Endpunkt zum Schluss auf Anwendungen ab. Wie Sie sehen, sind nun drei Nginx-Container vorhanden.

curl localhost/marathon/v2/apps

Entsprechende PowerShell-Befehle

Sie können diese Aktionen auch durchführen, indem Sie PowerShell-Befehle in einem Windows-System verwenden.

Führen Sie den folgenden Befehl aus, um Informationen zum DC/OS-Cluster zu erfassen, z.B. Agent-Namen und -Status:

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

Sie stellen Container im Docker-Format mit Marathon über eine JSON-Datei bereit, die die vorgesehene Bereitstellung beschreibt. Im folgenden Beispiel wird der Nginx-Container bereitgestellt. Dabei wird Port 80 des DC/OS-Agents an Port 80 des Containers gebunden.

{
  "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" }
      ]
    }
  }
}

Speichern Sie zum Bereitstellen eines Containers im Docker-Format die JSON-Datei an einem zugänglichen Speicherort. Führen Sie als Nächstes den folgenden Befehl aus, um den Container bereitzustellen. Geben Sie den Pfad zur JSON-Datei an (in diesem Beispiel marathon.json).

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

Sie können auch die Marathon-API verwenden, um Anwendungsbereitstellungen horizontal hoch- oder herunterzuskalieren. Im vorherigen Beispiel haben Sie eine Instanz einer Anwendung bereitgestellt. Wir führen hierfür jetzt das horizontale Hochskalieren auf drei Instanzen einer Anwendung durch. Hierzu erstellen Sie eine JSON-Datei, indem Sie den folgenden JSON-Text verwenden und an einem zugänglichen Speicherort speichern.

{ "instances": 3 }

Führen Sie den folgenden Befehl aus, um die Anwendung horizontal hochzuskalieren:

Hinweis

Der URI lautet „http://localhost/marathon/v2/apps/“, gefolgt von der ID der zu skalierenden Anwendung. Wenn Sie das hier bereitgestellte Nginx-Beispiel verwenden, wäre der 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'

Nächste Schritte