(已弃用)通过 Marathon REST API 管理 DC/OS 容器
警告
Azure 容器服务 (ACS) 正在被弃用。 将不会向 ACS 添加任何新特性或新功能。 所有 API、门户体验、CLI 命令和文档均已标记为“已弃用”。
有关详细信息,请参阅 Azure.com 上的 Azure 容器服务弃用声明。
我们建议你部署以下 Azure 市场解决方案之一:
- Mesosphere DC/OS
如果想要使用 Kubernetes,请参阅 Azure Kubernetes 服务。
DC/OS 提供了一种环境,可进行群集工作负荷的部署和缩放,以及底层硬件的抽象化。 DC/OS 上方是一种管理计划和执行计算工作负荷的框架。 尽管框架可用于许多常见的工作负荷,本文档逐步讲解如何使用 Marathon REST API 创建和缩放容器部署。
先决条件
开始了解这些示例之前,需要一个在 Azure 容器服务中配置的 DC/OS 群集。 还需要具有到此群集的远程连接。 有关这些项目的详细信息,请参阅以下文章:
访问 DC/OS API
连接到 Azure 容器服务群集后,可以通过以下方式访问 DC/OS 和相关 REST API: http://localhost:local-port. 本文档中的示例假定在端口 80 上实现隧道连接。 例如,可以从 URI 开始访问 Marathon 终结点 http://localhost/marathon/v2/.
有关 Marathon API 和 Chronos 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 容器部署到群集中的专用代理。
{
"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 运行于群集中其中一个专用代理的容器中。 若要查找运行容器的的主机和端口,请查询正在运行的任务的 Marathon:
curl localhost/marathon/v2/tasks
在输出中查找 host
的值(类似于 10.32.0.x
的 IP 地址)和 ports
的值。
现在对群集的管理 FQDN 建立 SSH 终端连接,而不是隧道连接。 连接后,进行以下请求,从而替换 host
和 ports
的正确值:
curl http://host:ports
Nginx 服务器的输出与下面类似:
缩放容器
可以使用 Marathon API 来扩大或缩小应用程序部署。 在上一示例中,为应用程序部署了一个实例。 让我们进行扩展,扩大为三个实例。 为此,请使用以下 JSON 文本创建 JSON 文件,并将其存储在可访问的位置。
{ "instances": 3 }
从隧道连接运行以下命令来扩大应用程序。
注意
URI 为 http://localhost/marathon/v2/apps/,后接要缩放的应用程序 ID。 如果使用此处提供的 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 终结点。 此时可看到有 3 个 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/,后接要缩放的应用程序 ID。 如果使用此处提供的 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'