zoukankan      html  css  js  c++  java
  • Docker系列之(二):使用Mesos管理Docker集群(Mesos + Marathon + Chronos + Docker)

    1. Mesos简介

    1.1 Mesos

    Apache Mesos 是一个分布式系统的管理软件,对集群的资源进行分配和管理。

    Mesos主要由以下几部分组成:

    Master: 管理各Slave节点

    Slave: 为集群提供资源

    Framework: scheduler从Master请求资源,executor在Slave上执行任务

    Slave节点上的每个executor是一个容器

    官方文档:

    http://mesos.apache.org/documentation/latest/architecture/

    http://mesos.apache.org/documentation/latest/getting-started/

    Mesos主服务器使用Zookeeper进行服务选举和发现。它有一个注册器记录了所有运行任何和从服务器信息,使用MultiPaxos进行日志复制实现一致性。

    Mesos有一个从服务器恢复机制,无论什么时候一个从服务器死机了,用户的任务还是能够继续运行,从服务器会将一些关键点信息如任务信息 状态更新持久化到本地磁盘上,重新启动时可以从磁盘上恢复运行这些任务(类似Java中的钝化和唤醒)

    1.2 Marathon

    Marathon 是Mesos的一个Framework,用来执行需要长时间运行的任务。如果把Mesos比喻成Kernel的话,那么Marathon就是它的守护进程Daemon。

    它还具备HA,Health Checks,服务发现等功能。如果某个Docker进程崩溃,Marathon会重新启动同样的进程。

    1.3 Chronos

    Chronos本质上是cron-on-mesos,这是一个用来运行基于容器定时任务的Mesos框架。

    1.4 ZooKeeper

    ZooKeeper用于集群的管理,包括统一配置管理,选举Leader等。

    2. 安装Mesos

    本次测试环境的构成如下:

    Mesos Master: test166

    Mesos Slave:  test166,test167

    Marathon:  test166

    Chronos:  test166

    ZooKeeper:  test166

    2.1 安装准备

    在所有机器上,安装Mesos源

    # rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-1.noarch.rpm

    在所有机器的/etc/hosts中,指定主机名

    # vi /etc/hosts
    10.86.255.166  test166
    10.86.255.167  test167

    2.2 安装Master

    2.2.1 在Master上安装Mesos,Marathon,Chronos,ZooKeeper

    # yum install mesos marathon chronos mesosphere-zookeeper

    如果服务器上之前装过jdk,升级到最新版本

    2.2.2 ZooKeeper设定

    本次配置的Master是单节点环境,ZooKeeper也是单点

    # vi /etc/mesos/zk
    zk://test166:2181/mesos

    2.2.3 启动服务

    # systemctl start zookeeper
    # systemctl start mesos-master
    # systemctl start marathon
    # systemctl start chronos

    2.3 安装Slave

    2.3.1 在Slave上安装Mesos,Docker

    # yum install mesos docker

    2.3.2 Docker相关设定

    # echo 'docker,mesos' > /etc/mesos-slave/containerizers
    # echo '5mins' > /etc/mesos-slave/executor_registration_timeout

    2.3.3 ZooKeeper设定

    # vi /etc/mesos/zk
    zk://test166:2181/mesos

    2.3.4 启动服务

    # systemctl start docker
    # systemctl start mesos-slave

    2.4 确认

    Mesos的页面

    http://10.86.255.166:5050/

    Marathon的页面

    http://10.86.255.166:8080/

    Chronos的页面

    http://10.86.255.166:4400/

    3. 使用Mesos

    在Mesos Slave页面,可以看到两个Slave

    3.1 执行framework测试

    3.1.1 在服务器上执行framework测试命令

    # ./src/examples/python/test-framework 10.86.255.166:5050

    3.1.2 在Frameworks页面,可以查看任务的执行情况

    3.1.3 点击结束的任务页面,可以看到在哪个Slave上执行的

    3.2 测试Marathon

    用nc命令启动一个HTTP服务

    3.2.1 在各节点上安装netcat

    # yum install nmap-ncat

    3.2.2 在Marathon页面,点击“Create Application”创建任务

    command: while true; do ( echo "HTTP/1.0 200 Ok"; echo; echo "Hello World" ) | nc -l $PORT; done

    3.2.3 点击“Create”后,创建并执行任务

    3.2.4 在Applications页面,点击任务,可以看到任务的详细信息

    可以看到任务分布在两个节点上,访问HTTP服务启动的端口

    3.2.5 在各节点可以看到nc进程正启动着

    test166:

    test167:

     

    3.3 测试Chronos

    3.3.1 在Chronos页面,点击“New Job”创建任务

    注意:时间是UTC时间

    3.3.2 在Chronos页面,可以看到任务执行的情况

    3.3.3 在Mesos页面,可以看到任务执行的情况

    4. 执行Docker任务

    4.1 测试通过Marathon执行Docker任务

    启动Docker,抓取ubuntu镜像,date命令输出当前时间

    任务Deploying的时候,从docker.io抓取镜像,抓取下来后,开始Running。

    如果抓取镜像的时间过长,失败的时候,可以先用docker pull命令在节点上抓取镜像后,再执行任务。

    4.1.1 创建json文件

    # vi marathon-test.json
    {
      "container": {
        "type": "DOCKER",
        "docker": {
        "image": "libmesos/ubuntu"
        }
      },
      "id": "ubuntu-marathon",
      "instances": 2,
      "cpus": 0.5,
      "mem": 256,
      "uris": [],
      "cmd": "while sleep 10; do date -u +%T; done"
    }

    4.1.2 在Marathon上创建任务

    # curl -X POST -H "Content-Type: application/json" http://test166:8080/v2/apps -d@marathon-test.json

    4.1.3 在Marathon页面确认容器已经启动

    4.1.4 在Mesos页面确认任务正在执行中

    4.1.5 从stdout信息确认输出的时间

    4.1.6 在节点上确认容器已经启动

    # docker ps
    

    4.1.7 查看容器的日志,确认输出的时间

    # docker logs CONTAINER_ID
    

    4.2 测试通过Chronos执行Docker任务

    启动Docker,抓取nginx镜像,启动nginx容器

    4.2.1 创建json文件

    # vi chronos-test.json 
    {
      "container": {
        "type": "DOCKER",
        "image": "nginx",
        "network": "BRIDGE"
      },
      "schedule": "R/2015-12-20T07:30:00Z/PT2M",
      "name": "chronos-nginx",
      "cpus": "0.5",
      "mem": "256",
      "uris": [],
      "command": "/usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf"
    }

    network": "BRIDGE",因为Docker默认的网络模式是桥接,不指定默认也是BRIDGE

    4.2.2 在Chronos上,创建任务

    # curl -L -H "Content-Type: application/json" -X POST -d@chronos-test.json http://test166:4400/scheduler/iso8601

    4.2.3 在Chronos页面确认任务已做成

    本次是测试,所以在Chronos的任务页面,点击「Force Run」强制执行

    4.2.4 在Mesos页面确认任务的详细信息

    4.2.5 在节点上确认容器启动

    # docker ps

    4.2.6 确认nginx网页可以访问

    5. 后记

    Mesos, Marathon 使得 Docker集群的管理变得简单方便,为在生产环境部署使用Docker集群提供了可能。

  • 相关阅读:
    如何使 Postgresql 的psql 使用 中文提示信息
    Makfile中的 依赖关系
    防范计算机木马入侵反恶意联盟落户滨海 狼人:
    印度最大软件开发商塔塔咨询官网首页被黑 狼人:
    河北银行:用CDP保障业务系统的故障快速恢复 狼人:
    甲骨文11g数据库爆零日攻击 可完全攻破 狼人:
    Adobe Reader与IE 领衔漏洞榜 狼人:
    黑客藏毒于火狐插件 目标瞄准Windows系统 狼人:
    网络订票当心三类陷阱 最好当场识别真伪 狼人:
    微软基于云计算免费杀毒软件Morro曝光 狼人:
  • 原文地址:https://www.cnblogs.com/ee900222/p/docker_2.html
Copyright © 2011-2022 走看看