From 215a5dec0be68f7eaad9a6bc1b77d8158214cc98 Mon Sep 17 00:00:00 2001 From: Baohua Yang Date: Mon, 29 Jun 2015 18:20:31 +0800 Subject: [PATCH] Add mesos chapter --- README.md | 11 +- SUMMARY.md | 5 + _images/marathon.png | Bin 0 -> 13638 bytes _images/mesos-architecture.png | Bin 0 -> 46092 bytes _images/mesos.png | Bin 0 -> 28889 bytes mesos/README.md | 1 + mesos/architecture.md | 64 +++++++++++ mesos/configuration.md | 108 +++++++++++++++++++ mesos/installation.md | 191 +++++++++++++++++++++++++++++++++ mesos/intro.md | 2 + 10 files changed, 377 insertions(+), 5 deletions(-) create mode 100644 _images/marathon.png create mode 100644 _images/mesos-architecture.png create mode 100644 _images/mesos.png create mode 100644 mesos/README.md create mode 100644 mesos/architecture.md create mode 100644 mesos/configuration.md create mode 100644 mesos/installation.md create mode 100644 mesos/intro.md diff --git a/README.md b/README.md index 76d5c1f..771b6ff 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ Docker —— 从入门到实践 =============== -v0.4.2 +v0.5.0 [Docker](docker.com) 是个伟大的项目,它彻底释放了虚拟化的威力,极大降低了云计算资源供应的成本,同时让应用的分发、测试、部署和分发都变得前所未有的高效和轻松! -本书既适用于具备基础 Linux 知识的 Docker 初学者,也希望可供理解原理和实现的高级用户参考。同时,书中给出的实践案例,可供在进行实际部署时借鉴。前六章为基础内容,供用户理解 Docker 的基本概念和操作;7 ~ 9 章介绍一些高级操作;第 10 章给出典型的应用场景和实践案例;11 ~ 13 章介绍关于 Docker 实现的相关技术。14 ~ 17章介绍相关的一些开源项目。 +本书既适用于具备基础 Linux 知识的 Docker 初学者,也希望可供理解原理和实现的高级用户参考。同时,书中给出的实践案例,可供在进行实际部署时借鉴。前六章为基础内容,供用户理解 Docker 的基本概念和操作;7 ~ 9 章介绍一些高级操作;第 10 章给出典型的应用场景和实践案例;11 ~ 13 章介绍关于 Docker 实现的相关细节技术。后续章节则分别介绍一些相关的热门开源项目。 在线阅读:[GitBook](https://www.gitbook.io/book/yeasy/docker_practice) 或 [DockerPool](http://dockerpool.com/static/books/docker_practice/index.html)。 @@ -13,7 +13,7 @@ v0.4.2 ![Docker 技术入门与实战](docker_primer.png) -《[Docker 技术入门与实战](http://item.jd.com/11598400.html)》一书已经正式出版,包含大量第一手实战案例,欢迎大家阅读使用。 +《[Docker 技术入门与实战](http://item.jd.com/11598400.html)》一书已经正式出版,包含大量第一手实战案例和更为深入的技术剖析,欢迎大家阅读使用。 * [China-Pub](http://product.china-pub.com/3770833) * [京东图书](http://item.jd.com/11598400.html) @@ -21,11 +21,12 @@ v0.4.2 * [亚马逊图书](http://www.amazon.cn/%E5%9B%BE%E4%B9%A6/dp/B00R5MYI7C/ref=lh_ni_t?ie=UTF8&psc=1&smid=A1AJ19PSB66TGU) ## 主要版本历史 -* 0.5: 2015-? +* 0.5: 2015-06-29 * 添加 Compose 项目 * 添加 Machine 项目 * 添加 Swarm 项目 * 完善 Kubernetes 项目内容 + * 添加 Mesos 项目内容 * 0.4: 2015-05-08 * 添加 Etcd 项目 * 添加 Fig 项目 @@ -50,7 +51,7 @@ v0.4.2 * 修正错别字和表达不通顺的地方。 -本书源码在 Github 上维护,欢迎参与:[https://github.com/yeasy/docker_practice](https://github.com/yeasy/docker_practice)。贡献者 [名单](https://github.com/yeasy/docker_practice/graphs/contributors)。 +Docker 自身仍在快速发展中,生态环境也在蓬勃成长。源码开源托管在 Github 上,欢迎参与维护:[https://github.com/yeasy/docker_practice](https://github.com/yeasy/docker_practice)。贡献者 [名单](https://github.com/yeasy/docker_practice/graphs/contributors)。 ## 参加步骤 * 在 GitHub 上 `fork` 到自己的仓库,如 `docker_user/docker_practice`,然后 `clone` 到本地,并设置用户信息。 diff --git a/SUMMARY.md b/SUMMARY.md index 172d9b0..a5ba3aa 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -105,6 +105,11 @@ * [基本概念](kubernetes/concepts.md) * [kubectl 使用](kubernetes/kubectl.md) * [架构设计](kubernetes/design.md) +* [Mesos 项目](mesos/README.md) + * [简介](mesos/intro.md) + * [安装与使用](mesos/installation.md) + * [原理与架构](mesos/architecture.md) + * [配置项解析](mesos/configuration.md) * [附录一:命令查询](appendix_command/README.md) * [附录二:常见仓库介绍](appendix_repo/README.md) * [Ubuntu](appendix_repo/ubuntu.md) diff --git a/_images/marathon.png b/_images/marathon.png new file mode 100644 index 0000000000000000000000000000000000000000..130c6649f0d0a3b3ed1552ef05d0c1af194bb8a7 GIT binary patch literal 13638 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 literal 0 HcmV?d00001 diff --git a/_images/mesos-architecture.png b/_images/mesos-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..9a0a8de21debf6480ea5f9953173225cad78da0b GIT binary patch literal 46092 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 HO~`)%avHv` literal 0 HcmV?d00001 diff --git a/mesos/README.md b/mesos/README.md new file mode 100644 index 0000000..012b3e1 --- /dev/null +++ b/mesos/README.md @@ -0,0 +1 @@ +# Mesos 项目 diff --git a/mesos/architecture.md b/mesos/architecture.md new file mode 100644 index 0000000..19d749c --- /dev/null +++ b/mesos/architecture.md @@ -0,0 +1,64 @@ +## Mesos 基本原理与架构 + +首先,Mesos 自身只是一个资源调度框架,并非一整套完整的应用管理平台,本身是不能干活的。但是它可以比较容易的跟各种应用管理或者中间件平台整合,一起工作,提高资源使用效率。 + +### 架构 +![mesos-arch](../_images/mesos-architecture.png) +master-slave 架构,master 使用 zookeeper 来做 HA。 + +master 单独运行在管理节点上,slave 运行在各个计算任务节点上。 + +各种具体任务的管理平台,即 framework 跟 master 交互,来申请资源。 + + +### 基本单元 + +#### master +负责整体的资源调度和逻辑控制。 + +#### slave +负责汇报本节点上的资源给 master,并负责隔离资源来执行具体的任务。 + +隔离机制当然就是各种容器机制了。 + +#### framework +framework 是实际干活的,包括两个主要组件: + +* scheduler:注册到主节点,等待分配资源; +* executor:在 slave 节点上执行本framework 的任务。 + +framework 分两种:一种是对资源需求可以 scale up 或者 down 的(Hadoop、Spark);一种是对资源需求大小是固定的(MPI)。 + +### 调度 +对于一个资源调度框架来说,最核心的就是调度机制,怎么能快速高效的完成对某个 framework 资源的分配(最好是能猜到它的实际需求)。 + +#### 两层调度算法: +master 先调度一大块资源给某个 framework,framework 自己再实现内部的细粒度调度。 + +调度机制支持插件。默认是 DRF。 + +#### 基本调度过程 +调度通过 offer 方式交互: + +* master 提供一个 offer(一组资源) 给 framework; +* framework 可以决定要不要,如果接受的话,返回一个描述,说明自己希望如何使用和分配这些资源(可以说明只希望使用部分资源,则多出来的会被 master 收回); +* master 则根据 framework 的分配情况发送给 slave,以使用 framework 的 executor 来按照分配的资源策略执行任务。 + +#### 过滤器 +framework 可以通过过滤器机制告诉 master 它的资源偏好,比如希望分配过来的 offer 有哪个资源,或者至少有多少资源。 + +主要是为了加速资源分配的交互过程。 + +#### 回头机制 +master 可以通过回收计算节点上的任务来动态调整长期任务和短期任务的分布。 + + +### HA + +#### master +master 节点存在单点失效问题,所以肯定要上 HA,目前主要是使用 zookpeer 来热备份。 + +同时 master 节点可以通过 slave 和 framework 发来的消息重建内部状态(具体能有多快呢?这里不使用数据库可能是避免引入复杂度。)。 + +#### framework 通知 +framework 中相关的失效,master 将发给它的 scheduler 来通知。 diff --git a/mesos/configuration.md b/mesos/configuration.md new file mode 100644 index 0000000..5b447d8 --- /dev/null +++ b/mesos/configuration.md @@ -0,0 +1,108 @@ +## Mesos 配置项解析 + +Mesos 的 [配置项](http://mesos.apache.org/documentation/latest/configuration/) 可以通过启动时候传递参数或者配置目录下文件的方式给出(推荐方式,一目了然)。 + +分为三种类型:通用项(master 和 slave 都支持),只有 master 支持的,以及只有 slave 支持的。 + + +### 通用项 +* `--ip=VALUE` 监听的 IP 地址 +* `--firewall_rules=VALUE` endpoint 防火墙规则,`VALUE` 可以是 JSON 格式或者存有 JSON 格式的文件路径。 +* `--log_dir=VALUE` 日志文件路径,默认不存储日志到本地 +* `--logbufsecs=VALUE` buffer 多少秒的日志,然后写入本地 +* `--logging_level=VALUE` 日志记录的最低级别 +* `--port=VALUE` 监听的端口,master 默认是 5050,slave 默认是 5051。 + +### master 专属配置项 +* `--quorum=VALUE` 必备项,使用基于 replicated-Log 的注册表时,复制的个数 +* `--work_dir=VALUE` 必备项,注册表持久化信息存储位置 +* `--zk=VALUE` 必备项,zookeepr 的接口地址,支持多个地址,之间用逗号隔离,可以为文件路径 +* `--acls=VALUE` ACL 规则或所在文件 +* `--allocation_interval=VALUE` 执行 allocation 的间隔,默认为 1sec +* `--allocator=VALUE` 分配机制,默认为 HierarchicalDRF +* `--[no-]authenticate` 是否允许非认证过的 framework 注册 +* `--[no-]authenticate_slaves` 是否允许非认证过的 slaves 注册 +* `--authenticators=VALUE` 对 framework 或 salves 进行认证时的实现机制 +* `--cluster=VALUE` 集群别名 +* `--credentials=VALUE` 存储加密后凭证的文件的路径 +* `--external_log_file=VALUE` 采用外部的日志文件 +* `--framework_sorter=VALUE` 给定 framework 之间的资源分配策略 +* `--hooks=VALUE` master 中安装的 hook 模块 +* `--hostname=VALUE` master 节点使用的主机名,不配置则从系统中获取 +* `--[no-]log_auto_initialize` 是否自动初始化注册表需要的 replicated 日志 +* `--modules=VALUE` 要加载的模块,支持文件路径或者 JSON +* `--offer_timeout=VALUE` offer 撤销的超时 +* `--rate_limits=VALUE` framework 的速率限制,比如 qps +* `--recovery_slave_removal_limit=VALUE` 限制注册表恢复后可以移除或停止的 slave 数目,超出后 master 会失败,默认是 100% +* `--slave_removal_rate_limit=VALUE slave` 没有完成健康度检查时候被移除的速率上限,例如 1/10mins 代表每十分钟最多有一个 +* `--registry=VALUE` 注册表的持久化策略,默认为 `replicated_log`,还可以为 `in_memory` +* `--registry_fetch_timeout=VALUE` 访问注册表失败超时 +* `--registry_store_timeout=VALUE` 存储注册表失败超时 +* `--[no-]registry_strict` 是否按照注册表中持久化信息执行操作,默认为 false +* `--roles=VALUE` 集群中 framework 可以所属的分配角色 +* `--[no-]root_submissions` root 是否可以提交 framework,默认为 true +* `--slave_reregister_timeout=VALUE` 新的 lead master 节点选举出来后,多久之内所有的 slave 需要注册,超时的 salve 将被移除并关闭,默认为 10mins +* `--user_sorter=VALUE` 在用户之间分配资源的策略,默认为 drf +* `--webui_dir=VALUE` webui 实现的文件目录所在,默认为 `/usr/local/share/mesos/webui` +* `--weights=VALUE` 各个角色的权重 +* `--whitelist=VALUE` 文件路径,包括发送 offer 的 slave 名单,默认为 None +* `--zk_session_timeout=VALUE` session 超时,默认为 10secs +* `--max_executors_per_slave=VALUE` 配置了 `--with-network-isolator` 时可用,限制每个 slave 同时执行任务个数 + +### slave 专属配置项 +* `--master=VALUE` 必备项,master 所在地址,或 zookeeper 地址,或文件路径,可以是列表 +* `--attributes=VALUE` 机器属性 +* `--authenticatee=VALUE` 跟 master 进行认证时候的认证机制 +* `--[no-]cgroups_enable_cfs` 采用 CFS 进行带宽限制时候对 CPU 资源进行限制,默认为 false +* `--cgroups_hierarchy=VALUE` cgroups 的目录根位置,默认为 `/sys/fs/cgroup` +* `--[no-]cgroups_limit_swap` 限制内存和 swap,默认为 false,只限制内存 +* `--cgroups_root=VALUE` 根 cgroups 的名称,默认为 mesos +* `--container_disk_watch_interval=VALUE` 为容器进行硬盘配额查询的时间间隔 +* `--containerizer_path=VALUE` 采用外部隔离机制(`--isolation=external`)时候,外部容器机制执行文件路径 +* `--containerizers=VALUE` 可用的容器实现机制,包括 mesos、external、docker +* `--credential=VALUE` 加密后凭证,或者所在文件路径 +* `--default_container_image=VALUE` 采用外部容器机制时,任务缺省使用的镜像 +* `--default_container_info=VALUE` 容器信息的缺省值 +* `--default_role=VALUE` 资源缺省分配的角色 +* `--disk_watch_interval=VALUE` 硬盘使用情况的周期性检查间隔,默认为 1mins +* `--docker=VALUE` docker 执行文件的路径 +* `--docker_remove_delay=VALUE` 删除容器之前的等待时间,默认为 6hrs +* `--[no-]docker_kill_orphans` 清除孤儿容器,默认为 true +* `--docker_sock=VALUE` docker sock 地址,默认为 `/var/run/docker.sock` +* `--docker_mesos_image=VALUE` 运行 slave 的 docker 镜像,如果被配置,docker 会假定 slave 运行在一个 docker 容器里 +* `--docker_sandbox_directory=VALUE` sandbox 映射到容器里的哪个路径 +* `--docker_stop_timeout=VALUE` 停止实例后等待多久执行 kill 操作,默认为 0secs +* `--[no-]enforce_container_disk_quota` 是否启用容器配额限制,默认为 false +* `--executor_registration_timeout=VALUE` 执行应用最多可以等多久再注册到 slave,否则停止它,默认为 1mins +* `--executor_shutdown_grace_period=VALUE` 执行应用停止后,等待多久,默认为 5secs +* `--external_log_file=VALUE` 外部日志文件 +* `--frameworks_home=VALUE` 执行应用前添加的相对路径,默认为空 +* `--gc_delay=VALUE` 多久清理一次执行应用目录,默认为 1weeks +* `--gc_disk_headroom=VALUE` 调整计算最大执行应用目录年龄的硬盘留空量,默认为 0.1 +* `--hadoop_home=VALUE` hadoop 安装目录,默认为空,会自动查找 HADOOP_HOME 或者从系统路径中查找 +* `--hooks=VALUE` 安装在 master 中的 hook 模块列表 +* `--hostname=VALUE` slave 节点使用的主机名 +* `--isolation=VALUE` 隔离机制,例如 `posix/cpu,posix/mem`(默认)或者 `cgroups/cpu,cgroups/mem` +* `--launcher_dir=VALUE` mesos 可执行文件的路径,默认为 `/usr/local/lib/mesos` +* `--modules=VALUE` 要加载的模块,支持文件路径或者 JSON +* `--perf_duration=VALUE` perf 采样时长,必须小于 perf_interval,默认为 10secs +* `--perf_events=VALUE` perf 采样的事件 +* `--perf_interval=VALUE` perf 采样的时间间隔 +* `--recover=VALUE` 回复后是否重连上旧的执行应用 +* `--recovery_timeout=VALUE` slave 恢复时的超时,太久则所有相关的执行应用将自行退出,默认为 15mins +* `--registration_backoff_factor=VALUE` 跟 master 进行注册时候的重试时间间隔算法的因子,默认为 1secs,采用随机指数算法,最长 1mins +* `--resource_monitoring_interval=VALUE` 周期性监测执行应用资源使用情况的间隔,默认为 1secs +* `--resources=VALUE` 每个 slave 可用的资源 +* `--slave_subsystems=VALUE` slave 运行在哪些 cgroup 子系统中,包括 memory,cpuacct 等,缺省为空 +* `--[no-]strict` 是否认为所有错误都不可忽略,默认为 true +* `--[no-]switch_user` 用提交任务的用户身份来运行,默认为 true +* `--fetcher_cache_size=VALUE` fetcher 的 cache 大小,默认为 2 GB +* `--fetcher_cache_dir=VALUE` fetcher cache 文件存放目录,默认为 /tmp/mesos/fetch +* `--work_dir=VALUE` framework 的工作目录,默认为 /tmp/mesos + +下面的选项需要配置 `--with-network-isolator` 一起使用 +* `--ephemeral_ports_per_container=VALUE` 分配给一个容器的临时端口,默认为 1024 +* `--eth0_name=VALUE` public 网络的接口名称,如果不指定,根据主机路由进行猜测 +* `--lo_name=VALUE` loopback 网卡名称 +* `--egress_rate_limit_per_container=VALUE` 每个容器的 egress 流量限制速率 +* `--[no-]network_enable_socket_statistics` 是否采集每个容器的 socket 统计信息,默认为 false diff --git a/mesos/installation.md b/mesos/installation.md new file mode 100644 index 0000000..1b0c7c7 --- /dev/null +++ b/mesos/installation.md @@ -0,0 +1,191 @@ +## Mesos + Marathon 安装与使用 + +Marathon 是可以跟 Mesos 一起协作的一个 framework,用来运行持久性的应用。 + +### 安装 +一共需要安装四种组件,mesos-master、marathon、zookeeper 需要安装到所有的主节点,mseos-slave 需要安装到从节点。 + +mesos 利用 zookper 来进行主节点的同步,以及从节点发现主节点的过程。 + +#### 源码编译 + +下载源码 +```sh +git clone https://git-wip-us.apache.org/repos/asf/mesos.git +``` + +安装依赖 + +```sh +#jdk-7 +sudo apt-get update && sudo apt-get install -y openjdk-7-jdk +#autotools +sudo apt-get install -y autoconf libtool +#Mesos dependencies. +sudo apt-get -y install build-essential python-dev python-boto libcurl4-nss-dev libsasl2-dev maven libapr1-dev libsvn-dev +``` + +编译&安装 +```sh +$ cd mesos + +# Bootstrap (Only required if building from git repository). +$ ./bootstrap + +$ mkdir build +$ cd build && ../configure +$ make +$ make check && make install +``` + +#### [软件源安装](https://mesosphere.com/downloads/) +以 ubuntu 系统为例。 + +安装 Docker,不再赘述,可以参考 [这里](http://yeasy.gitbooks.io/docker_practice/content/install/index.html)。 + +```sh +# Setup +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E56151BF +DISTRO=$(lsb_release -is | tr '[:upper:]' '[:lower:]') +CODENAME=$(lsb_release -cs) + +# Add the repository +echo "deb http://repos.mesosphere.io/${DISTRO} ${CODENAME} main" | \ + sudo tee /etc/apt/sources.list.d/mesosphere.list + +sudo apt-get -y update && sudo apt-get -y install zookeeper mesos marathon +``` + +#### [基于 Docker](https://github.com/sekka1/mesosphere-docker) +将基于如下镜像: + +* ZooKeeper:https://registry.hub.docker.com/u/garland/zookeeper/ +* Mesos:https://registry.hub.docker.com/u/garland/mesosphere-docker-mesos-master/ +* Marathon:https://registry.hub.docker.com/u/garland/mesosphere-docker-marathon/ + +其中 mesos-master 镜像将作为 master 和 slave 容器使用。 + +导出本地机器的地址到环境变量。 +```sh +HOST_IP=10.11.31.7 +``` + +启动 Zookeepr 容器。 +```sh +docker run -d \ +-p 2181:2181 \ +-p 2888:2888 \ +-p 3888:3888 \ +garland/zookeeper +``` + +启动 Mesos Master 容器。 +```sh +docker run --net="host" \ +-p 5050:5050 \ +-e "MESOS_HOSTNAME=${HOST_IP}" \ +-e "MESOS_IP=${HOST_IP}" \ +-e "MESOS_ZK=zk://${HOST_IP}:2181/mesos" \ +-e "MESOS_PORT=5050" \ +-e "MESOS_LOG_DIR=/var/log/mesos" \ +-e "MESOS_QUORUM=1" \ +-e "MESOS_REGISTRY=in_memory" \ +-e "MESOS_WORK_DIR=/var/lib/mesos" \ +-d \ +garland/mesosphere-docker-mesos-master +``` + +启动 Marathon。 +```sh +docker run \ +-d \ +-p 8080:8080 \ +garland/mesosphere-docker-marathon --master zk://${HOST_IP}:2181/mesos --zk zk://${HOST_IP}:2181/marathon +``` + +启动 Mesos slave 容器。 +```sh +docker run -d \ +--name mesos_slave_1 \ +--entrypoint="mesos-slave" \ +-e "MESOS_MASTER=zk://${HOST_IP}:2181/mesos" \ +-e "MESOS_LOG_DIR=/var/log/mesos" \ +-e "MESOS_LOGGING_LEVEL=INFO" \ +garland/mesosphere-docker-mesos-master:latest +``` + +接下来,可以通过访问本地 8080 端口来使用 Marathon 启动任务了。 + + +### 配置说明 + +#### ZooKeepr + +ZooKeepr 是一个分布式应用的协调工具,用来管理多个 Master 节点的选举和冗余,监听在 2181 端口。 + +配置文件在 /etc/zookeeper/conf/ 目录下。 + +首先,要修改 myid,手动为每一个节点分配一个自己的 id(1-255之间)。 + +zoo.cfg 是主配置文件,主要修改如下的三行(如果你启动三个 zk 节点)。 +```sh +server.1=zookeeper1:2888:3888 +server.2=zookeeper2:2888:3888 +server.3=zookeeper3:2888:3888 +``` + +主机名需要自己替换,并在 /etc/hosts 中更新。 + +第一个端口负责从节点连接到主节点的;第二个端口负责主节点的选举通信。 + +#### Mesos + +Mesos 的默认配置目录分别为: + +* /etc/mesos:共同的配置文件,最关键的是 zk 文件; +* /etc/mesos-master:主节点的配置,等价于启动 mesos-master 时候的默认选项; +* /etc/mesos-slave:从节点的配置,等价于启动 mesos-master 时候的默认选项。 + +###### 主节点 +首先在所有节点上修改 /etc/mesos/zk,为 主节点的 zookeeper 地址列表,例如: +```sh +zk://ip1:2181,ip2:2181/mesos +``` +创建 /etc/mesos-master/ip 文件,写入主节点监听的地址。 + +还可以创建 /etc/mesos-master/cluster 文件,写入集群的别名。 + +之后,启动服务: +```sh +sudo service mesos-master start +``` +更多选项可以参考[这里](http://open.mesosphere.com/reference/mesos-master/)。 + +###### 从节点 + +在从节点上,修改 /etc/mesos-slave/ip 文件,写入跟主节点通信的地址。 + +之后,启动服务。 +```sh +sudo service mesos-slave start +``` + +更多选项可以参考[这里](http://open.mesosphere.com/reference/mesos-slave/)。 + +此时,通过浏览器访问本地 5050 端口,可以看到节点信息。 + +![mesos](../_images/mesos.png) + +#### Marathon +启动 marathon 服务。 +```sh +sudo service marathon start +``` + +启动成功后,在 mesos 的 web界面的 frameworks 标签页下面将能看到名称为 marathon 的框架出现。 + +同时可以通过浏览器访问 8080 端口,看到 marathon 的管理界面。 + +![marathon](../_images/marathon.png) + +此时,可以通过界面或者 REST API 来创建一个应用,Marathon 会保持该应用的持续运行。 diff --git a/mesos/intro.md b/mesos/intro.md new file mode 100644 index 0000000..4f400bf --- /dev/null +++ b/mesos/intro.md @@ -0,0 +1,2 @@ +## 简介 +Mesos 是一个集群资源的自动调度平台,Apache 开源项目,它的定位是要做数据中心操作系统的内核。目前由 Mesosphere 公司维护,更多信息可以自行查阅 [Mesos 项目地址](http://mesos.apache.org/)或 [Mesosphere](https://mesosphere.com)。