Skip to content

Commit 215a5de

Browse files
committed
Add mesos chapter
1 parent 2a66200 commit 215a5de

File tree

10 files changed

+377
-5
lines changed

10 files changed

+377
-5
lines changed

README.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,32 @@
11
Docker —— 从入门到实践
22
===============
33

4-
v0.4.2
4+
v0.5.0
55

66
[Docker](docker.com) 是个伟大的项目,它彻底释放了虚拟化的威力,极大降低了云计算资源供应的成本,同时让应用的分发、测试、部署和分发都变得前所未有的高效和轻松!
77

8-
本书既适用于具备基础 Linux 知识的 Docker 初学者,也希望可供理解原理和实现的高级用户参考。同时,书中给出的实践案例,可供在进行实际部署时借鉴。前六章为基础内容,供用户理解 Docker 的基本概念和操作;7 ~ 9 章介绍一些高级操作;第 10 章给出典型的应用场景和实践案例;11 ~ 13 章介绍关于 Docker 实现的相关技术。14 ~ 17章介绍相关的一些开源项目
8+
本书既适用于具备基础 Linux 知识的 Docker 初学者,也希望可供理解原理和实现的高级用户参考。同时,书中给出的实践案例,可供在进行实际部署时借鉴。前六章为基础内容,供用户理解 Docker 的基本概念和操作;7 ~ 9 章介绍一些高级操作;第 10 章给出典型的应用场景和实践案例;11 ~ 13 章介绍关于 Docker 实现的相关细节技术。后续章节则分别介绍一些相关的热门开源项目
99

1010
在线阅读:[GitBook](https://www.gitbook.io/book/yeasy/docker_practice)[DockerPool](http://dockerpool.com/static/books/docker_practice/index.html)
1111

1212
欢迎关注 DockerPool 社区微博 [@dockerpool](http://weibo.com/u/5345404432),或加入 DockerPool QQ 群(419042067),分享 Docker 资源,交流 Docker 技术。
1313

1414
![Docker 技术入门与实战](docker_primer.png)
1515

16-
[Docker 技术入门与实战](http://item.jd.com/11598400.html)》一书已经正式出版,包含大量第一手实战案例,欢迎大家阅读使用。
16+
[Docker 技术入门与实战](http://item.jd.com/11598400.html)》一书已经正式出版,包含大量第一手实战案例和更为深入的技术剖析,欢迎大家阅读使用。
1717

1818
* [China-Pub](http://product.china-pub.com/3770833)
1919
* [京东图书](http://item.jd.com/11598400.html)
2020
* [当当图书](http://product.dangdang.com/23620853.html)
2121
* [亚马逊图书](http://www.amazon.cn/%E5%9B%BE%E4%B9%A6/dp/B00R5MYI7C/ref=lh_ni_t?ie=UTF8&psc=1&smid=A1AJ19PSB66TGU)
2222

2323
## 主要版本历史
24-
* 0.5: 2015-?
24+
* 0.5: 2015-06-29
2525
* 添加 Compose 项目
2626
* 添加 Machine 项目
2727
* 添加 Swarm 项目
2828
* 完善 Kubernetes 项目内容
29+
* 添加 Mesos 项目内容
2930
* 0.4: 2015-05-08
3031
* 添加 Etcd 项目
3132
* 添加 Fig 项目
@@ -50,7 +51,7 @@ v0.4.2
5051
* 修正错别字和表达不通顺的地方。
5152

5253

53-
本书源码在 Github 上维护,欢迎参与[https://github.com/yeasy/docker_practice](https://github.com/yeasy/docker_practice)。贡献者 [名单](https://github.com/yeasy/docker_practice/graphs/contributors)
54+
Docker 自身仍在快速发展中,生态环境也在蓬勃成长。源码开源托管在 Github 上,欢迎参与维护[https://github.com/yeasy/docker_practice](https://github.com/yeasy/docker_practice)。贡献者 [名单](https://github.com/yeasy/docker_practice/graphs/contributors)
5455

5556
## 参加步骤
5657
* 在 GitHub 上 `fork` 到自己的仓库,如 `docker_user/docker_practice`,然后 `clone` 到本地,并设置用户信息。

SUMMARY.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@
105105
* [基本概念](kubernetes/concepts.md)
106106
* [kubectl 使用](kubernetes/kubectl.md)
107107
* [架构设计](kubernetes/design.md)
108+
* [Mesos 项目](mesos/README.md)
109+
* [简介](mesos/intro.md)
110+
* [安装与使用](mesos/installation.md)
111+
* [原理与架构](mesos/architecture.md)
112+
* [配置项解析](mesos/configuration.md)
108113
* [附录一:命令查询](appendix_command/README.md)
109114
* [附录二:常见仓库介绍](appendix_repo/README.md)
110115
* [Ubuntu](appendix_repo/ubuntu.md)

_images/marathon.png

13.3 KB
Loading

_images/mesos-architecture.png

45 KB
Loading

_images/mesos.png

28.2 KB
Loading

mesos/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Mesos 项目

mesos/architecture.md

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
## Mesos 基本原理与架构
2+
3+
首先,Mesos 自身只是一个资源调度框架,并非一整套完整的应用管理平台,本身是不能干活的。但是它可以比较容易的跟各种应用管理或者中间件平台整合,一起工作,提高资源使用效率。
4+
5+
### 架构
6+
![mesos-arch](../_images/mesos-architecture.png)
7+
master-slave 架构,master 使用 zookeeper 来做 HA。
8+
9+
master 单独运行在管理节点上,slave 运行在各个计算任务节点上。
10+
11+
各种具体任务的管理平台,即 framework 跟 master 交互,来申请资源。
12+
13+
14+
### 基本单元
15+
16+
#### master
17+
负责整体的资源调度和逻辑控制。
18+
19+
#### slave
20+
负责汇报本节点上的资源给 master,并负责隔离资源来执行具体的任务。
21+
22+
隔离机制当然就是各种容器机制了。
23+
24+
#### framework
25+
framework 是实际干活的,包括两个主要组件:
26+
27+
* scheduler:注册到主节点,等待分配资源;
28+
* executor:在 slave 节点上执行本framework 的任务。
29+
30+
framework 分两种:一种是对资源需求可以 scale up 或者 down 的(Hadoop、Spark);一种是对资源需求大小是固定的(MPI)。
31+
32+
### 调度
33+
对于一个资源调度框架来说,最核心的就是调度机制,怎么能快速高效的完成对某个 framework 资源的分配(最好是能猜到它的实际需求)。
34+
35+
#### 两层调度算法:
36+
master 先调度一大块资源给某个 framework,framework 自己再实现内部的细粒度调度。
37+
38+
调度机制支持插件。默认是 DRF。
39+
40+
#### 基本调度过程
41+
调度通过 offer 方式交互:
42+
43+
* master 提供一个 offer(一组资源) 给 framework;
44+
* framework 可以决定要不要,如果接受的话,返回一个描述,说明自己希望如何使用和分配这些资源(可以说明只希望使用部分资源,则多出来的会被 master 收回);
45+
* master 则根据 framework 的分配情况发送给 slave,以使用 framework 的 executor 来按照分配的资源策略执行任务。
46+
47+
#### 过滤器
48+
framework 可以通过过滤器机制告诉 master 它的资源偏好,比如希望分配过来的 offer 有哪个资源,或者至少有多少资源。
49+
50+
主要是为了加速资源分配的交互过程。
51+
52+
#### 回头机制
53+
master 可以通过回收计算节点上的任务来动态调整长期任务和短期任务的分布。
54+
55+
56+
### HA
57+
58+
#### master
59+
master 节点存在单点失效问题,所以肯定要上 HA,目前主要是使用 zookpeer 来热备份。
60+
61+
同时 master 节点可以通过 slave 和 framework 发来的消息重建内部状态(具体能有多快呢?这里不使用数据库可能是避免引入复杂度。)。
62+
63+
#### framework 通知
64+
framework 中相关的失效,master 将发给它的 scheduler 来通知。

mesos/configuration.md

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
## Mesos 配置项解析
2+
3+
Mesos 的 [配置项](http://mesos.apache.org/documentation/latest/configuration/) 可以通过启动时候传递参数或者配置目录下文件的方式给出(推荐方式,一目了然)。
4+
5+
分为三种类型:通用项(master 和 slave 都支持),只有 master 支持的,以及只有 slave 支持的。
6+
7+
8+
### 通用项
9+
* `--ip=VALUE` 监听的 IP 地址
10+
* `--firewall_rules=VALUE` endpoint 防火墙规则,`VALUE` 可以是 JSON 格式或者存有 JSON 格式的文件路径。
11+
* `--log_dir=VALUE` 日志文件路径,默认不存储日志到本地
12+
* `--logbufsecs=VALUE` buffer 多少秒的日志,然后写入本地
13+
* `--logging_level=VALUE` 日志记录的最低级别
14+
* `--port=VALUE` 监听的端口,master 默认是 5050,slave 默认是 5051。
15+
16+
### master 专属配置项
17+
* `--quorum=VALUE` 必备项,使用基于 replicated-Log 的注册表时,复制的个数
18+
* `--work_dir=VALUE` 必备项,注册表持久化信息存储位置
19+
* `--zk=VALUE` 必备项,zookeepr 的接口地址,支持多个地址,之间用逗号隔离,可以为文件路径
20+
* `--acls=VALUE` ACL 规则或所在文件
21+
* `--allocation_interval=VALUE` 执行 allocation 的间隔,默认为 1sec
22+
* `--allocator=VALUE` 分配机制,默认为 HierarchicalDRF
23+
* `--[no-]authenticate` 是否允许非认证过的 framework 注册
24+
* `--[no-]authenticate_slaves` 是否允许非认证过的 slaves 注册
25+
* `--authenticators=VALUE` 对 framework 或 salves 进行认证时的实现机制
26+
* `--cluster=VALUE` 集群别名
27+
* `--credentials=VALUE` 存储加密后凭证的文件的路径
28+
* `--external_log_file=VALUE` 采用外部的日志文件
29+
* `--framework_sorter=VALUE` 给定 framework 之间的资源分配策略
30+
* `--hooks=VALUE` master 中安装的 hook 模块
31+
* `--hostname=VALUE` master 节点使用的主机名,不配置则从系统中获取
32+
* `--[no-]log_auto_initialize` 是否自动初始化注册表需要的 replicated 日志
33+
* `--modules=VALUE` 要加载的模块,支持文件路径或者 JSON
34+
* `--offer_timeout=VALUE` offer 撤销的超时
35+
* `--rate_limits=VALUE` framework 的速率限制,比如 qps
36+
* `--recovery_slave_removal_limit=VALUE` 限制注册表恢复后可以移除或停止的 slave 数目,超出后 master 会失败,默认是 100%
37+
* `--slave_removal_rate_limit=VALUE slave` 没有完成健康度检查时候被移除的速率上限,例如 1/10mins 代表每十分钟最多有一个
38+
* `--registry=VALUE` 注册表的持久化策略,默认为 `replicated_log`,还可以为 `in_memory`
39+
* `--registry_fetch_timeout=VALUE` 访问注册表失败超时
40+
* `--registry_store_timeout=VALUE` 存储注册表失败超时
41+
* `--[no-]registry_strict` 是否按照注册表中持久化信息执行操作,默认为 false
42+
* `--roles=VALUE` 集群中 framework 可以所属的分配角色
43+
* `--[no-]root_submissions` root 是否可以提交 framework,默认为 true
44+
* `--slave_reregister_timeout=VALUE` 新的 lead master 节点选举出来后,多久之内所有的 slave 需要注册,超时的 salve 将被移除并关闭,默认为 10mins
45+
* `--user_sorter=VALUE` 在用户之间分配资源的策略,默认为 drf
46+
* `--webui_dir=VALUE` webui 实现的文件目录所在,默认为 `/usr/local/share/mesos/webui`
47+
* `--weights=VALUE` 各个角色的权重
48+
* `--whitelist=VALUE` 文件路径,包括发送 offer 的 slave 名单,默认为 None
49+
* `--zk_session_timeout=VALUE` session 超时,默认为 10secs
50+
* `--max_executors_per_slave=VALUE` 配置了 `--with-network-isolator` 时可用,限制每个 slave 同时执行任务个数
51+
52+
### slave 专属配置项
53+
* `--master=VALUE` 必备项,master 所在地址,或 zookeeper 地址,或文件路径,可以是列表
54+
* `--attributes=VALUE` 机器属性
55+
* `--authenticatee=VALUE` 跟 master 进行认证时候的认证机制
56+
* `--[no-]cgroups_enable_cfs` 采用 CFS 进行带宽限制时候对 CPU 资源进行限制,默认为 false
57+
* `--cgroups_hierarchy=VALUE` cgroups 的目录根位置,默认为 `/sys/fs/cgroup`
58+
* `--[no-]cgroups_limit_swap` 限制内存和 swap,默认为 false,只限制内存
59+
* `--cgroups_root=VALUE` 根 cgroups 的名称,默认为 mesos
60+
* `--container_disk_watch_interval=VALUE` 为容器进行硬盘配额查询的时间间隔
61+
* `--containerizer_path=VALUE` 采用外部隔离机制(`--isolation=external`)时候,外部容器机制执行文件路径
62+
* `--containerizers=VALUE` 可用的容器实现机制,包括 mesos、external、docker
63+
* `--credential=VALUE` 加密后凭证,或者所在文件路径
64+
* `--default_container_image=VALUE` 采用外部容器机制时,任务缺省使用的镜像
65+
* `--default_container_info=VALUE` 容器信息的缺省值
66+
* `--default_role=VALUE` 资源缺省分配的角色
67+
* `--disk_watch_interval=VALUE` 硬盘使用情况的周期性检查间隔,默认为 1mins
68+
* `--docker=VALUE` docker 执行文件的路径
69+
* `--docker_remove_delay=VALUE` 删除容器之前的等待时间,默认为 6hrs
70+
* `--[no-]docker_kill_orphans` 清除孤儿容器,默认为 true
71+
* `--docker_sock=VALUE` docker sock 地址,默认为 `/var/run/docker.sock`
72+
* `--docker_mesos_image=VALUE` 运行 slave 的 docker 镜像,如果被配置,docker 会假定 slave 运行在一个 docker 容器里
73+
* `--docker_sandbox_directory=VALUE` sandbox 映射到容器里的哪个路径
74+
* `--docker_stop_timeout=VALUE` 停止实例后等待多久执行 kill 操作,默认为 0secs
75+
* `--[no-]enforce_container_disk_quota` 是否启用容器配额限制,默认为 false
76+
* `--executor_registration_timeout=VALUE` 执行应用最多可以等多久再注册到 slave,否则停止它,默认为 1mins
77+
* `--executor_shutdown_grace_period=VALUE` 执行应用停止后,等待多久,默认为 5secs
78+
* `--external_log_file=VALUE` 外部日志文件
79+
* `--frameworks_home=VALUE` 执行应用前添加的相对路径,默认为空
80+
* `--gc_delay=VALUE` 多久清理一次执行应用目录,默认为 1weeks
81+
* `--gc_disk_headroom=VALUE` 调整计算最大执行应用目录年龄的硬盘留空量,默认为 0.1
82+
* `--hadoop_home=VALUE` hadoop 安装目录,默认为空,会自动查找 HADOOP_HOME 或者从系统路径中查找
83+
* `--hooks=VALUE` 安装在 master 中的 hook 模块列表
84+
* `--hostname=VALUE` slave 节点使用的主机名
85+
* `--isolation=VALUE` 隔离机制,例如 `posix/cpu,posix/mem`(默认)或者 `cgroups/cpu,cgroups/mem`
86+
* `--launcher_dir=VALUE` mesos 可执行文件的路径,默认为 `/usr/local/lib/mesos`
87+
* `--modules=VALUE` 要加载的模块,支持文件路径或者 JSON
88+
* `--perf_duration=VALUE` perf 采样时长,必须小于 perf_interval,默认为 10secs
89+
* `--perf_events=VALUE` perf 采样的事件
90+
* `--perf_interval=VALUE` perf 采样的时间间隔
91+
* `--recover=VALUE` 回复后是否重连上旧的执行应用
92+
* `--recovery_timeout=VALUE` slave 恢复时的超时,太久则所有相关的执行应用将自行退出,默认为 15mins
93+
* `--registration_backoff_factor=VALUE` 跟 master 进行注册时候的重试时间间隔算法的因子,默认为 1secs,采用随机指数算法,最长 1mins
94+
* `--resource_monitoring_interval=VALUE` 周期性监测执行应用资源使用情况的间隔,默认为 1secs
95+
* `--resources=VALUE` 每个 slave 可用的资源
96+
* `--slave_subsystems=VALUE` slave 运行在哪些 cgroup 子系统中,包括 memory,cpuacct 等,缺省为空
97+
* `--[no-]strict` 是否认为所有错误都不可忽略,默认为 true
98+
* `--[no-]switch_user` 用提交任务的用户身份来运行,默认为 true
99+
* `--fetcher_cache_size=VALUE` fetcher 的 cache 大小,默认为 2 GB
100+
* `--fetcher_cache_dir=VALUE` fetcher cache 文件存放目录,默认为 /tmp/mesos/fetch
101+
* `--work_dir=VALUE` framework 的工作目录,默认为 /tmp/mesos
102+
103+
下面的选项需要配置 `--with-network-isolator` 一起使用
104+
* `--ephemeral_ports_per_container=VALUE` 分配给一个容器的临时端口,默认为 1024
105+
* `--eth0_name=VALUE` public 网络的接口名称,如果不指定,根据主机路由进行猜测
106+
* `--lo_name=VALUE` loopback 网卡名称
107+
* `--egress_rate_limit_per_container=VALUE` 每个容器的 egress 流量限制速率
108+
* `--[no-]network_enable_socket_statistics` 是否采集每个容器的 socket 统计信息,默认为 false

0 commit comments

Comments
 (0)