支撑Arukas的Apache Mesos × Marathon
首先
今年四月份加入了樱互联网公司,已经过去了半年多的时间。这几个月来,我能够借助以前从事基础设施工程师的经验,进行后端和前端开发,并取得了很多成果。
我參與開發的服務是一個名為Arukas的Docker容器托管服務。
说到Docker,作为编排工具,Kubernetes是很有名的。而Arukas则通过使用Apache Mesos × Marathon的编排环境,实现了日本首个容器托管服务。
本次将介绍它们的同时,还会向大家介绍如何在docker-compose中进行简单的试验。
Apache Mesos是什么?
这是在加利福尼亚大学伯克利分校开发的集群资源管理框架。它将多个物理机器(或虚拟机)作为一个集群进行管理,并根据每个节点的资源情况来分配和执行任务。
顺便提一下,通过与称为Mesos Frameworks的功能框架协作,可以实现各种功能。作为其中之一,通过与Marathon的协作,可以实现容器编排。
马拉松是什么?
这是一个作为Mesos框架之一开发的框架,用于实现编排平台。
为了自动处理在硬件和软件层面上发生的故障,这个目的就开发了它。具体而言,它具备了部署Docker容器、与存储卷的协作、任务调度、实例数量的扩展功能以及资源健康监控的健康检查等功能。
需要的组成 de
要运行Apache Mesos + Marathon的配置,主要需要四个服务。
构成图
主控节点
我需要取得并整合Mesos Slave和Mesos Frameworks,并进行统一和协调的控制。
根据Mesos Frameworks的任务执行请求,向Mesos Slave发出执行任务的指令,并将执行结果汇总并向Mesos Frameworks报告,负责整体的控制。
Mesos从属于者
这是安装在每个节点上的代理程序。它可以让节点的计算资源(如CPU、RAM和网络等)在整个Mesos集群中共享。
具体而言,通过Mesos Master接收Mesos Framework的请求,并执行相应的任务处理。它负责检查可执行任务的资源,并根据资源在节点上部署任务。
马拉松
我们会进行Docker容器资源的最佳配置和容器应用程序的部署。该控制面板可以从Web浏览器中操作和编辑任务。本次我们还将介绍通过该控制面板启动容器的实例。
阿帕奇Zookeeper
这是一个用于存储集群和任务状态的键值存储。
因为Mesos被设计成将这些数据保存在Zookeeper中,所以它是必要的。
试试实际运行一下
首先,让我们尝试实际构建和运行上面所述的配置。
这次,我们将使用Docker Hub上提供的官方镜像,并使用docker-compose进行启动。
请将以下内容用中文进行表达:
docker-compose.yml文件
只需创建以下的docker-compose.yml文件即可完成构建和启动。
version: '3'
services:
mesos-master:
image: mesosphere/mesos-master:1.7.0
hostname: mesos-master
entrypoint: [ "mesos-master" ]
ports:
- "5050:5050"
depends_on:
- zookeeper
environment:
- MESOS_CLUSTER=local
- MESOS_HOSTNAME=mesos-master.docker
- MESOS_LOG_DIR=/var/log
- MESOS_WORK_DIR=/var/lib/mesos
- MESOS_QUORUM=1
- MESOS_ZK=zk://zookeeper:2181/mesos
mesos-slave:
image: mesosphere/mesos-slave:1.7.0
entrypoint:
- mesos-slave
privileged: true
hostname: mesos-slave
ports:
- "5051:5051"
depends_on:
- zookeeper
- mesos-master
environment:
- MESOS_CONTAINERIZERS=docker,mesos
- MESOS_ISOLATOR=cgroups/cpu,cgroups/mem
- MESOS_LOG_DIR=/var/log
- MESOS_MASTER=zk://zookeeper:2181/mesos
- MESOS_PORT=5051
- MESOS_WORK_DIR=/var/lib/mesos
- MESOS_DOCKER_STOP_TIMEOUT=50secs
- MESOS_EXECUTOR_REGISTRATION_TIMEOUT=15mins
- MESOS_EXECUTOR_SHUTDOWN_GRACE_PERIOD=60secs
- MESOS_RESOURCES=cpus:2;mem:2048;disk:20480;ports(*):[12000-12999]
- MESOS_SYSTEMD_ENABLE_SUPPORT=false
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "$PWD/tmp/hadoop-2.8.0:/hadoop"
marathon:
image: mesosphere/marathon:v1.6.549
hostname: marathon
ports:
- "8080:8080"
depends_on:
- zookeeper
- mesos-master
- mesos-slave
extra_hosts:
- "seaof-172-17-0-1.arukascloud.io:172.17.0.1"
environment:
- MARATHON_ENV_VARS_PREFIX="MARATHON_"
- MARATHON_ZK=zk://zookeeper:2181/marathon
- MARATHON_MASTER=zk://zookeeper:2181/mesos
zookeeper:
image: zookeeper:3.4.13
hostname: zookeeper
ports:
- "2181:2181"
启动命令
docker-compose up
由于所有的容器都是通过镜像启动的,所以不需要进行构建。
马拉松网址
当您访问 http://localhost:8080,将会显示Marathon的控制面板。
我已经成功构建和启动了Apache Mesos × Marathon环境。
部署Nginx容器
当Apache Mesos和Marathon成功启动后,我们将尝试实际部署容器。
创建应用程序
首先,单击“创建应用程序”,将显示应用程序创建页面如下。
请在首页上输入任意的ID。
请在Docker Hub上输入公开的镜像名称。本次使用的是”Nginx:latest”。
请确保选择”Bridged”作为Network,以便能够连接到Docker网络。
最后,输入端口号。请在这里输入用于Docker网络的端口号。
如果只有Web端口开放,您可以通过默认配置的Nginx访问,请输入”80号”。
容器0.0.0.0:80 -> 主机localhost:随机端口
最后,点击底部的“创建应用程序”按钮,将自动开始应用程序的创建过程。
初始的“Status”为“Deploying”,但稍等片刻后会变为“Running”。一旦变成“Running”,则表示部署成功。
我打算在浏览器中实际尝试一下Nginx,但需要一个用于连接的随机端口。
您可以从应用程序的详细信息中查看随机端口。
点击Name(nginx-application) => ID(nginx-application.89b9ccc1-feb9-11e8-b390-0242c0a8c005)按顺序可以查看该应用程序的详细信息。请注意检查被红圈标出的端口号。
当您通过 localhost 进行端口号确认时,将显示 Nginx 的初始页面。
每次启动都会随机更改端口号。
总结
这次我使用了最简单的Nginx镜像进行实验,但是通过自己手动制作镜像,开发的应用程序也可以轻松部署。
尽管在日本不太有名,但Apache Mesos × Marathon是一个稳定的容器编排环境,已经在Twitter和Netflix等平台上得到了成功应用。
如果您对此感兴趣,可以试着触摸一下。如果可以的话,请也多多关注Arukas。