使用自定义 Marathon 实例部署服务

ENTERPRISE

使用基本的非本地 Marathon 实例

本专题描述了如何部署具有独立角色、保留和配额的非本地 Marathon 实例。本程序不支持 密钥 或细粒度 ACL。如果需要这些功能,您必须使用自定义非本地 Marathon 程序

先决条件:

第 1 步 - 保留资源

在此步骤中,保留 Mesos 资源。选择 静态动态 保留的程序。

静态保留

警告:此程序将关闭节点上运行的所有任务。

  1. SSH 到专用代理节点。

    1. dcos node ssh --master-proxy --mesos-id=<agent-id>
  2. 导航至 /var/lib/dcos 并创建一个名为 mesos-slave-common 且含有这些内容的文件,其中 <myrole> 是您的角色名称。

    1. MESOS_DEFAULT_ROLE='<myrole>'
  3. 停止专用代理节点:

    1. sudo sh -c 'systemctl kill -s SIGUSR1 dcos-mesos-slave && systemctl stop dcos-mesos-slave'
  4. 将节点重新添加到集群。

    1. 重新加载 systemd 配置。

      1. sudo systemctl daemon-reload
    2. 删除代理节点上的 latest 元数据指针:

      1. ⁠⁠⁠⁠sudo rm /var/lib/mesos/slave/meta/slaves/latest
    3. 使用新配置的属性和资源规范启动代理。

      1. sudo systemctl start dcos-mesos-slave

      可以使用以下命令检查状态:

      1. sudo systemctl status dcos-mesos-slave
  5. 对每个附加节点重复上述步骤。

动态保留

使用 Mesos ID 为非本地 Marathon 实例保留资源 (<mesos-id>), user ID (<userid>), role (<myrole>), and ports (<begin-port> and <end-port>) 。

  1. curl -i -k \
  2. -H "Authorization: token=`dcos config show core.dcos_acs_token`" \
  3. -H "Content-Type: application/json" \
  4. -H "Accept: application/json" \
  5. -d '{
  6. "type": "RESERVE_RESOURCES",
  7. "reserve_resources": {
  8. "agent_id": {
  9. "value": "<mesos-id>"
  10. },
  11. "resources": [
  12. {
  13. "type": "SCALAR",
  14. "name": "cpus",
  15. "reservation": {
  16. "principal": "<userid>"
  17. },
  18. "role": "<myrole>",
  19. "scalar": {
  20. "value": 1.0
  21. }
  22. },
  23. {
  24. "type": "SCALAR",
  25. "name": "mem",
  26. "reservation": {
  27. "principal": "<userid>"
  28. },
  29. "role": "<myrole>",
  30. "scalar": {
  31. "value": 512.0
  32. }
  33. },
  34. {
  35. "type": "RANGES",
  36. "name": "ports",
  37. "reservation": {
  38. "principal": "<userid>"
  39. },
  40. "role": "<myrole>",
  41. "ranges": {
  42. "range": [
  43. {
  44. "begin": <begin-port>,
  45. "end": <end-port>
  46. }
  47. ]
  48. }
  49. }
  50. ]
  51. }
  52. }' \
  53. -X POST "`dcos config show core.dcos_url`/mesos/api/v1"

# 第 2 步 - 安装具有分配角色的非本地 Marathon 实例

在此步骤中,非本地 Marathon 实例安装在 DC/OS上,并分配了 Mesos 角色。

  1. 创建自定义 JSON 配置文件并另存为 marathon-config.json。此文件用于安装自定义非本地 Marathon 实例。

    1. {"marathon": {
    2. "mesos-role": "<myrole>",
    3. "role": "<myrole>",
    4. "default-accepted-resource-roles": "*,<myrole>"
    5. }
    6. }
  2. 通过指定的自定义 JSON 配置(marathon-config.json)安装来自 Universe 的 Marathon 软件包。

    1. dcos package install --options=marathon-config.json marathon

第 3 步 - 创建 Marathon 服务帐户

此步骤创建了 Marathon 服务帐户。Marathon 服务账户可能是可选或必填项,具体取决于您的 安全模式

安全模式Marathon 服务帐户
禁用可选
宽容可选
严格必填
  1. 创建 2048 位 RSA 公私密钥对 (<private-key>.pem and <public-key>.pem),将每个值保存到当前目录中的单独文件中。

    1. dcos security org service-accounts keypair <private-key>.pem <public-key>.pem
  2. 创建名为 <service-account-id>, with the public key specified (<public-key>.pem)的新服务帐户。

    1. dcos security org service-accounts create -p <public-key>.pem -d "Non-native Marathon service account" <service-account-id>

第 4 步 - 分配权限(仅限严格模式)

在此步骤中,权限被分配至 Marathon-on-Marathon 实例。在严格模式下需要权限,而在其他安全模式将其忽略即可。

所有 CLI 命令也可通过 IAM API 执行。

安全模式权限
禁用不可用
宽容不可用
严格必填

为用户授予权限 <uid> to launch Mesos tasks that will execute as Linux user nobody。 要允许作为不同 Linux 用户执行任务,请将 nobody 替换为该用户的 Linux 用户 ID。例如,如需以 Linux 用户 bob 身份启动任务,请将 nobody 替换为以下的 bob。 请注意, nobodyroot 是默认出现在所有代理上的,但如果指定了自定义 bob 用户,必须在可以执行这些任务的每个代理上手动创建(使用 adduser 或类似实用程序)。

  1. dcos security org users grant <uid> dcos:mesos:master:task:user:nobody create --description "Tasks can execute as Linux user nobody"
  2. dcos security org users grant <uid> dcos:mesos:master:framework:role:<myrole> create --description "Controls the ability of <myrole> to register as a framework with the Mesos master"
  3. dcos security org users grant <uid> dcos:mesos:master:reservation:role:<myrole> create --description "Controls the ability of <myrole> to reserve resources"
  4. dcos security org users grant <uid> dcos:mesos:master:volume:role:<myrole> create --description "Controls the ability of <myrole> to access volumes"
  5. dcos security org users grant <uid> dcos:mesos:master:reservation:principal:<uid> delete --description "Controls the ability of <uid> to reserve resources"
  6. dcos security org users grant <uid> dcos:mesos:master:task:app_id:/ create--description "Controls the ability to launch tasks"
  7. dcos security org users grant <uid> dcos:mesos:master:volume:principal:<uid> delete --description "Controls the ability of <uid> to access volumes"

第 5 步 - 授予用户对非本地 Marathon 的访问权限

在此步骤中,用户被授权访问非本地 Marathon 实例。

  1. 以具有 superuser 权限的用户身份登录 DC/OS Web 界面。

登录

图 1. DC/OS Web 界面登录画面。

  1. 选择 Organization 并选择 UsersGroups

  2. 选择要授予权限的用户名或组名。

添加 cory 权限

图 2. 选择用户或组权限

  1. 权限 选项卡中,单击 添加权限

  2. 单击 INSERT PERMISSION STRING 以切换对话框。

添加权限

图 3. 添加权限。

  1. Permissions Strings 字段中复制并粘贴权限。根据您的[安全模式]选择权限字符串(/cn/1.11/security/ent/#security-modes)。

已禁用

  • 完整权限

    1. dcos:adminrouter:service:<service-name> full
    2. dcos:service:marathon:<service-name>:services:/ full
    3. dcos:adminrouter:ops:mesos full
    4. dcos:adminrouter:ops:slave full
  • 禁用安全模式不支持访问单个服务或组。

宽容

  • 完整权限

    1. dcos:adminrouter:service:<service-name> full
    2. dcos:service:marathon:<service-name>:services:/ full
    3. dcos:adminrouter:ops:mesos full
    4. dcos:adminrouter:ops:slave full
  • 访问单个服务或组

    指定服务或组 (<service-or-group>) and action (<action>). 行动可以是 创建, 读取, 更新, 删除, 要么 完整. 例如,要允许多个操作,请使用逗号分隔它们: dcos:service:marathon:<service-name>:services:/<service-or-group> read,update

    1. dcos:adminrouter:service:<service-name> full
    2. dcos:service:marathon:<service-name>:services:/<service-or-group> <action>
    3. dcos:adminrouter:ops:mesos full
    4. dcos:adminrouter:ops:slave full

严格

  • 完整权限

    1. dcos:adminrouter:service:<service-name> full
    2. dcos:service:marathon:<service-name>:services:/ full
    3. dcos:adminrouter:ops:mesos full
    4. dcos:adminrouter:ops:slave full
    5. dcos:mesos:agent:executor:app_id:/ read
    6. dcos:mesos:agent:framework:role:<myrole> read
    7. dcos:mesos:agent:sandbox:app_id:/ read
    8. dcos:mesos:agent:task:app_id:/ read
    9. dcos:mesos:master:executor:app_id:/ read
    10. dcos:mesos:master:framework:role:<myrole> read
    11. dcos:mesos:master:task:app_id:/ read
  • 访问单个服务或组

    指定服务或组 (<service-or-group>), 服务名称 (<service-name>), 角色 (<myrole>), 和行动 (<action>). 行动可以是创建, 读取, 更新, 删除, 要么 完整. 例如,要允许多个操作,请使用逗号分隔它们: dcos:service:marathon:<service-name>:services:/<service-or-group> read, update

    1. dcos:adminrouter:service:<service-name> full
    2. dcos:service:marathon:<service-name>:services:/<service-or-group> <action>
    3. dcos:adminrouter:ops:mesos full
    4. dcos:adminrouter:ops:slave full
    5. dcos:mesos:agent:executor:app_id:/<service-or-group> read
    6. dcos:mesos:agent:framework:role:<myrole> read
    7. dcos:mesos:agent:sandbox:app_id:/<service-or-group> read
    8. dcos:mesos:agent:task:app_id:/<service-or-group> read
    9. dcos:mesos:master:executor:app_id:/<service-or-group> read
    10. dcos:mesos:master:framework:role:<myrole> read
    11. dcos:mesos:master:task:app_id:/<service-or-group> read
  1. 单击 ADD PERMISSIONS,然后单击 Close

第 6 步 - 访问非本地 Marathon 实例

在此步骤中,您以授权用户身份登录非本地 Marathon DC/OS 服务。

  1. 启动非本地 Marathon 接口,位于:http://<master-public-ip>/service/<service-name>/.

  2. 输入您的用户名和密码,然后单击 登录

Log in DC/OS

图 4. DC/OS Web 界面登录

成功了!

Marathon on Marathon

图 5. 操作成功的画面。