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

ENTERPRISE

使用基础非本地 Marathon 实例

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

前提条件:

第 1 步 - 保留资源

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

静态保留

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

  1. SSH 到专用代理节点。

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

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

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

    1. 重新加载 systemd 配置。

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

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

      sudo systemctl start dcos-mesos-slave
      

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

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

动态保留

使用指定的 Mesos ID(<mesos-id>)、用户 ID(<userid>)、角色(<myrole>)和端口(<begin-port> 和 <end-port>)为非本机 Marathon 实例保留资源。

curl -i -k \
      -H "Authorization: token=`dcos config show core.dcos_acs_token`" \
      -H "Content-Type: application/json" \
      -H "Accept: application/json" \
      -d '{
  "type": "RESERVE_RESOURCES",
  "reserve_resources": {
    "agent_id": {
      "value": "<mesos-id>"
    },
    "resources": [
      {
        "type": "SCALAR",
        "name": "cpus",
        "reservation": {
          "principal": "<userid>"
        },
        "role": "<myrole>",
        "scalar": {
          "value": 1.0
        }
      },
      {
        "type": "SCALAR",
        "name": "mem",
        "reservation": {
          "principal": "<userid>"
        },
        "role": "<myrole>",
        "scalar": {
          "value": 512.0
        }
      },
      {
        "type": "RANGES",
        "name": "ports",
        "reservation": {
          "principal": "<userid>"
        },
        "role": "<myrole>",
        "ranges": {
          "range": [
            {
              "begin": <begin-port>,
              "end": <end-port>
            }
          ]
        }
      }
    ]
  }
}' \
      -X POST "`dcos config show core.dcos_url`/mesos/api/v1"

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

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

  1. 创建自定义 JSON 配置文件并另存为 marathon-config.json. 此文件用于安装自定义非本地 Marathon 实例。
    {"marathon": {
     "mesos-role": "<myrole>",
     "role": "<myrole>",
     "default-accepted-resource-roles": "*,<myrole>"
     }
    }
    
  2. 通过指定的自定义 JSON 配置(Catalog)安装来自 marathon-config.json). 的 Marathon 包。
    dcos package install --options=marathon-config.json marathon
    

第 3 步 - 创建 Marathon 服务帐户

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

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

    dcos security org service-accounts keypair <private-key>.pem <public-key>.pem
    
  2. 创建一个名为 <service-account-id> 的新服务帐户,并指定公钥(<public-key>.pem).

    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]执行。(/mesosphere/dcos/cn/2.0/security/ent/iam-api/).

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

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

dcos security org users grant <uid> dcos:mesos:master:task:user:nobody create --description "Tasks can execute as Linux user nobody"
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"
dcos security org users grant <uid> dcos:mesos:master:reservation:role:<myrole> create --description "Controls the ability of <myrole> to reserve resources"
dcos security org users grant <uid> dcos:mesos:master:volume:role:<myrole> create --description "Controls the ability of <myrole> to access volumes"
dcos security org users grant <uid> dcos:mesos:master:reservation:principal:<uid> delete --description "Controls the ability of <uid> to reserve resources"
dcos security org users grant <uid> dcos:mesos:master:task:app_id:/ create--description "Controls the ability to launch tasks"
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 界面登录画面。

  2. 选择组织,然后选择用户或组。

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

    添加 cory 权限

    图 2. 选择用户或组权限

  4. 在 权限 选项卡中,单击 添加权限。

  5. 单击插入权限字符串以切换对话框。

    添加权限

    图 3. 添加权限。

  6. 在权限字符串字段中复制并粘贴权限。根据您的[安全模式]选择权限字符串。(/mesosphere/dcos/cn/2.0/security/ent/#security-modes).

    宽容

    • 完整权限

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

      指定服务或组 (<service-or-group>) 和操作 (<action>). 操作可以是 create、 read、 update、delete 或 full. 若要允许多个操作,请使用逗号分隔它们,例如: dcos:service:marathon:<service-name>:services:/<service-or-group> read,update.

      dcos:adminrouter:service:<service-name> full
      dcos:service:marathon:<service-name>:services:/<service-or-group> <action>
      dcos:adminrouter:ops:mesos full
      dcos:adminrouter:ops:slave full
      

    严格

    • 完整权限

      dcos:adminrouter:service:<service-name> full
      dcos:service:marathon:<service-name>:services:/ full
      dcos:adminrouter:ops:mesos full
      dcos:adminrouter:ops:slave full
      dcos:mesos:agent:executor:app_id:/ read
      dcos:mesos:agent:framework:role:<myrole> read
      dcos:mesos:agent:sandbox:app_id:/ read
      dcos:mesos:agent:task:app_id:/ read
      dcos:mesos:master:executor:app_id:/ read
      dcos:mesos:master:framework:role:<myrole> read
      dcos:mesos:master:task:app_id:/ read
      
    • 访问单个服务或组

      指定服务或组(<service-or-group>)、服务名称(<service-name>)、角色(<myrole>)和操作(<action>). 操作可以是 create、 read、 update、delete 或 full. 若要允许多个操作,请使用逗号分隔它们,例如: dcos:service:marathon:<service-name>:services:/<service-or-group> read,update.

      dcos:adminrouter:service:<service-name> full
      dcos:service:marathon:<service-name>:services:/<service-or-group> <action>
      dcos:adminrouter:ops:mesos full
      dcos:adminrouter:ops:slave full
      dcos:mesos:agent:executor:app_id:/<service-or-group> read
      dcos:mesos:agent:framework:role:<myrole> read
      dcos:mesos:agent:sandbox:app_id:/<service-or-group> read
      dcos:mesos:agent:task:app_id:/<service-or-group> read
      dcos:mesos:master:executor:app_id:/<service-or-group> read
      dcos:mesos:master:framework:role:<myrole> read
      dcos:mesos:master:task:app_id:/<service-or-group> read
      
  7. 单击 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 登录屏幕

    成功了!

    Marathon on Marathon

    图 5. 操作成功的画面。