(已淘汰) 透過 Marathon REST API 的 DC/OS 容器管理

警告

Azure Container Service (ACS) 即將淘汰。 ACS 不會再新增任何新的特性或功能。 所有 API、入口網站體驗、CLI 命令和文件均會標示為已淘汰。

如需詳細資訊,請參閱 Azure.com 上的 Azure Container Service 淘汰通知

建議您部署下列其中一種 Azure Marketplace 解決方案:

如果您想要使用 Kubernetes,請參閱 Azure Kubernetes Service

DC/OS 提供環境來部署及調整叢集工作負載,同時將基礎硬體抽象化。 在 DC/OS 之上有架構會管理排程和執行計算工作負載。 雖然許多常見的工作負載都有可用的架構,但這份文件只能讓您使用 Marathon REST API 來開始建立及調整容器部署。

必要條件

在練習這些範例之前,您需要 Azure 容器服務中設定的 DC/OS 叢集。 您也需要有此叢集的遠端連線。 如需這些項目的詳細資訊,請參閱下列文章。

存取 DC/OS API

連線到 Azure Container Service 叢集之後,您可以透過 存取 DC/OS 和相關 REST API http://localhost:local-port. 本文件中的範例假設您的通道為連接埠 80。 例如,Marathon 端點可以從開頭的 URI 到達 http://localhost/marathon/v2/.

如需各種 API 的詳細資訊,請參閱 Marathon APIChronos API 的 Mesosphere 文件,以及 Mesos 排程器 API 的 Apache 文件。

從 DC/OS 和 Marathon 收集資訊

將容器部署至 DC/OS 叢集之前,請收集 DC/OS 叢集的一些相關資訊,例如 DC/OS 代理程式的名稱和狀態。 若要這樣做,請查詢 DC/OS REST API 的 master/slaves 端點。 如果一切順利,查詢會傳回 DC/OS 代理程式清單及每個代理程式的數個屬性。

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

現在,使用 Marathon /apps 端點來檢查目前部署至 DC/OS 叢集的應用程式。 如果這是新的叢集,您會看到空的應用程式陣列。

curl localhost/marathon/v2/apps

{"apps":[]}

部署 Docker 格式化容器

您可以使用描述預期部署的 JSON 檔案透過 Marathon REST API 部署 Docker 格式化容器。 下列範例會將 Nginx 容器部署到叢集內的私人 Agent。

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

若要部署 Docker 格式的容器,請將 JSON 檔案儲存在可存取的位置。 接下來,若要部署容器,請執行下列命令。 指定 JSON 檔案的名稱 (在此範例中是 marathon.json)。

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

輸出大致如下:

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

現在,如果您查詢 Marathon 中的應用程式,這個新的應用程式會顯示在輸出中。

curl localhost/marathon/v2/apps

存取容器

您可以確認 Nginx 是在叢集其中一個私人 Agent 的容器中執行。 若要尋找容器執行所在的主機和連接埠,請向 Marathon 查詢執行中的工作︰

curl localhost/marathon/v2/tasks

尋找輸出中的 host 值 (類似 10.32.0.x 的 IP 位址),以及 ports 值。

現在以 SSH 從終端機連線 (非通道連線) 到叢集的管理 FQDN。 連線之後請提出下列要求,以替換正確的 hostports 值:

curl http://host:ports

Nginx 伺服器的輸出大致如下:

Nginx from container

調整容器的大小

您也可以使用 Marathon API 來相應放大或相應縮小應用程式部署。 在前面的範例中,您已部署一個應用程式執行個體。 讓我們將其相應放大為三個應用程式執行個體。 若要這樣做,請使用下列 JSON 文字建立 JSON 檔案,並將它儲存在可存取的位置。

{ "instances": 3 }

從通道連線執行下列命令來相應放大應用程式。

注意

URI 是 http://localhost/marathon/v2/apps/ 後接要調整的應用程式的識別碼。 如果您使用此處提供的 Nginx 範例,URI 會是 http://localhost/marathon/v2/apps/nginx.

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

最後,向 Marathon 端點查詢應用程式。 您會看到現在有三個 Nginx 容器。

curl localhost/marathon/v2/apps

對等的 PowerShell 命令

您可以在 Windows 系統上使用 PowerShell 命令來執行這些相同的動作。

若要收集 DC/OS 叢集的相關資訊 (例如代理程式名稱和代理程式狀態),請執行下列命令:

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

您可以使用描述預期部署的 JSON 檔案透過 Marathon 部署 Docker 格式化容器。 下列範例將會部署 Nginx 容器,並將 DC/OS 代理程式的連接埠 80 繫結至容器的連接埠 80。

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

若要部署 Docker 格式的容器,請將 JSON 檔案儲存在可存取的位置。 接下來,若要部署容器,請執行下列命令。 指定 JSON 檔案的路徑 (在此範例中是 marathon.json)。

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

您也可以使用 Marathon API 來相應放大或相應縮小應用程式部署。 在前面的範例中,您已部署一個應用程式執行個體。 讓我們將其相應放大為三個應用程式執行個體。 若要這樣做,請使用下列 JSON 文字建立 JSON 檔案,並將它儲存在可存取的位置。

{ "instances": 3 }

執行下列命令來相應放大應用程式:

注意

URI 是 http://localhost/marathon/v2/apps/ 後接要調整的應用程式的識別碼。 如果您使用此處提供的 Nginx 範例,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'

下一步