支撑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的配置,主要需要四个服务。

构成图

006.jpeg

主控节点

我需要取得并整合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环境。

Screen Shot 2018-12-13 at 18.04.18.png

部署Nginx容器

当Apache Mesos和Marathon成功启动后,我们将尝试实际部署容器。

创建应用程序

首先,单击“创建应用程序”,将显示应用程序创建页面如下。

请在首页上输入任意的ID。

Screen Shot 2018-12-13 at 18.11.38.png

请在Docker Hub上输入公开的镜像名称。本次使用的是”Nginx:latest”。

请确保选择”Bridged”作为Network,以便能够连接到Docker网络。

Screen Shot 2018-12-13 at 18.11.54.png

最后,输入端口号。请在这里输入用于Docker网络的端口号。

如果只有Web端口开放,您可以通过默认配置的Nginx访问,请输入”80号”。

容器0.0.0.0:80 -> 主机localhost:随机端口

Screen Shot 2018-12-13 at 18.12.10.png

最后,点击底部的“创建应用程序”按钮,将自动开始应用程序的创建过程。

初始的“Status”为“Deploying”,但稍等片刻后会变为“Running”。一旦变成“Running”,则表示部署成功。

Screen Shot 2018-12-13 at 18.20.41.png

我打算在浏览器中实际尝试一下Nginx,但需要一个用于连接的随机端口。

您可以从应用程序的详细信息中查看随机端口。

点击Name(nginx-application) => ID(nginx-application.89b9ccc1-feb9-11e8-b390-0242c0a8c005)按顺序可以查看该应用程序的详细信息。请注意检查被红圈标出的端口号。

Screen Shot 2018-12-13 at 18.29.57.png
Screen Shot 2018-12-13 at 18.30.56.png

当您通过 localhost 进行端口号确认时,将显示 Nginx 的初始页面。

每次启动都会随机更改端口号。

Screen Shot 2018-12-13 at 18.36.27.png

总结

这次我使用了最简单的Nginx镜像进行实验,但是通过自己手动制作镜像,开发的应用程序也可以轻松部署。

尽管在日本不太有名,但Apache Mesos × Marathon是一个稳定的容器编排环境,已经在Twitter和Netflix等平台上得到了成功应用。

如果您对此感兴趣,可以试着触摸一下。如果可以的话,请也多多关注Arukas。

广告
将在 10 秒后关闭
bannerAds