Mesos 1.0.x 版本新的功能或改动
Mesos 1.0.x 版本新的功能或改动:
- 在 Mesos 1.0 以前,以
SSL_
为前缀的环境变量用于控制 libprocess 的 SSL。然而这些变量我们发现会与一些库或者程序(比如:openssl, curl 等)产生冲突。所以在Mesos 1.0 这个版本中, 将用LIBPROCESS_SSL_*
来代替SSL_*
- 在 Mesos 1.0 以前,Mesos agent 会递归地改变挂载到容器中的持久卷的所属属性,在 Mesos 1.0 中,将改成非递归方式。
- Mesos 1.0 在 ContainerConfig 中删除了驼峰式大小写的 protobuf 字段。具体可见:(
include/mesos/slave/isolator.proto
)
- required ExecutorInfo executorInfo = 1;
- optional TaskInfo taskInfo = 2;
- 默认情况下 executors 将不再从 Agent 中继承环境变量。但我们可以显示的在 Agent 上,用
--executor-environment-variables
flag 来指定哪些环境变量可以被 executor 继承。 Mesos 生成的环境变量比如:$MESOS_, $LIBPROCESS_
将不会受影响。如果在 executor 中未指定 $PATH,将使用默认的值/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- 资源分配器 (allocator) metric 名字发生改变,由原先的
allocator/event_queue_dispatches
变成了allocator/mesos/event_queue_dispatches
- 废弃
--docker_stop_timeout
这个配置项。 - 将使用 ExecutorInfo.labels 字段来代替 ExecutorInfo.source
- 废弃所有与 slave 相关的叫法,统一叫成 agent,在 WebUI 中,会废弃包含
slave
关键字的 sandbox 连接。在 mesos-cli 上将看不到 slave 这个子命令项了。 - 今后 mesos 不会在为 agent 指定
work_dir
这个 flag 的默认值,所以一定要指定,否则 agent 会立即退出。 - 使用 Json 格式的证书文件,废弃文本形式的。
- 之前如果使用了持久卷,在销毁该卷的时候,不会把其上的数据删除掉,这个功能现在已经实现了,也即会一并删除。
- Mesos 1.0 修改了如下的 endpoints 的 HTTP 状态返回码,即将
200 OK
改成202 Accepted
- /reserve
- /unreserve
- /create-volumes
- /destroy-volumes
- 为
Scheduler API
和v1 Scheduler HTTP API
中的CommandInfo.URI
新添加了output_file
字段 - 为向后兼容, 将
scheduler.proto
和executor.proto
中的Call
与Event
枚举类型由required
修改成了optional
。 - 在容器资源使用信息中添加了非终端任务元数据。
- 删除
/observe
HTTP endpoint - Mesos 1.0 将废弃
SET_QUOTA_WITH_ROLE
和DESTROY_QUOTA_WITH_PRINCIPAL
操作,采用UPDATE_QUOTA_WITH_ROLE
来替代。同时,也用UpdateQuota
ACL 来替代SetQuota
和RemoveQuota
ACL。 另外,引进了新的GET_QUOTA_WITH_ROLE
操作和get_quotas
ACL 用于控制哪些 principal 可查询给定的 roles 的 quota 状态。 这个将会对本地授权者产生如下影响:
update_quotas
不能与set_quotas
或remove_quotas
同时使用,否则会出错。- 如果之前使用了
set_quotas
或者remove_quotas
那么 operators 必须先升级 mesos binary, 之后这些操作才能起作用。 - 当确定升级完成后,operator 应该用
update_quotas
来代替set_quotas
和remove_quotas
- 在升级完成后, operator 可以用
get_quotas
来控制哪些 principal 可查询给定的 roles 的 quota 状态
- Mesos 1.0 包含了几个关于 authorizer 的变动,特别影响到了 autorizer modules:
- authorizer 接口被重构了用于去耦合 ACL 的定义语言。此外,也增加了获取
ObjectApprover
的选项。ObjectApprover
可以同步检查给定Object
的授权,因此可以用于授权若干或大量Objects
,他们需要采用基于授权的 request 来复制。 注意:这个对于授权模块来说是一个 breaking change - 基于 HTTP endpoint 的授权可以使 operator 限制哪些集群状态可以让授权用户看到。比如
/state
,operator 可以让授权的用户只看到正在运行的 frameworks, tasks, or executors 的子状态。 - 在
autorization:Request
的 protobuf 中,subject
和object
属性改成了可选项。如果没有设置这些,则只允许有ANY
语义的 ACL 请求。注意:这个对于授权模块来说是一个 semantic change
- authorizer 接口被重构了用于去耦合 ACL 的定义语言。此外,也增加了获取
- Mesos 为 authorization 提供了若干 HTTP endpoints. 注意:其中的一些 HTTP endpoint 是用于 Web UI 的,因此在有授权开启的集群中需要为 Web UI 设置 ACL 属性。
- 粗粒度授权的 endpoints 有:
- /files/debug
- /logging/toggle
- /metrics/snapshot
- /slave(id)/containers
- /slave(id)/monitor/statistics
- 如果在定义 ACLs 时使用了 permissive:false 那么列出的这些 HTTP endpoints, 将会停止工作,除非为 get_endpoints 操作定义了 ACLs。