++

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

marathon 初步使用

关闭selinux setenforce 0

 

Marathon之应用篇

    先来了解一下  Marathon 是怎么布署decker的

json
shell.json

{    "id": "shell",     "cmd": "while [ true ] ; do echo 'Hello Marathon' ; sleep 5 ; done",    "cpus": 0.1,    "mem": 10.0,    "instances": 1

}
 curl http://10.134.29.134/v2/apps -d @shell.json -H "Content-type: application/json"
#Mesos底层执行器进行执行,通过/bin/bash -c ${cmd}

 

  marathon管理界面 简单了解

 


App 

     代表一个工作实类型,发布了一个tocmat网站

task

   代表这个网在在几个容器中运行

 

# marathon提供app的自动扩展,健康检查以及运行情况的健康,日志管理等功能

# marathonapp的生命周期进行有效的管理

# Scale Application进行快速扩容 task数量?

#  销毁  点击kill & scale即可

#  ps命令查看shell所在节点的进程ID  lsof查看该进行打开的文件

# 使用 Web-UI创建 应用

#  marathon如何应用远程资源

# Mesos fetcher

 

json文件 格式

 

{    "id": "shell",     

     "cmd": "shell/shell.sh",    

     "cpus": 0.1,    

     "mem": 10.0,    

     "instances": 1,    

     "uris": [        

        "http://10.128.3.75/shell.zip"    ]

 

}

uris对资源进行定位下载,Marathon支持多种协议类型,种类如下所示:

file:http:https:ftp:ftps:hdfs:s3:s3a:s3n:

uri的值是数组类型,可以支持同时输入多个资源:

{    ...    "uris": ["https://github.com/zouyee/repo.zip",    "http://10.128.3.75/images/shell.sh", "ftp://10.128.3.75/images/my-other-file.css"    ]    ...

}

容器运行

  json文件 中 container 子对象

"container": {    

           "type": "DOCKER",    

            "docker": {      "image": "python:3",

                             "network": "BRIDGE",      

                             "portMappings": [    { "containerPort": 8080, "hostPort": 0 }      ]    

             }

}

post 方式

curl -X POST http://10.134.29.134:8080/v2/apps -d web.json  -H "Content-type: application/json"

 

端口分配

      1)container中的portMapping

                          containerport

                          hostport

                          serviceport            

             2) 应用配置的Optional settings中的Ports   

             3) 实际App中某一Task分配的port(s)

------------------------------------------------------------------------------------------------------------------------------------------------------------------

             

containerPort:container Port指定在容器内部的端口,它适用于docker的bridge网络做port mapping。

 

hostPort:host Port指定主机绑定端口,当使用BRIDGE网络,需要指定从主机端口到容器端口的port mapping,当使用HOST网络,请求端口默认为主机端口。

 

BRIDGE网络:docker应用可以使用BRIDGE网络。在此网络环境中,container port(容器内部端口)对应host port(主机上的端口)。

 

HOST网络:HOST网络可用于非docker的Marathon应用和docker应用,此模式中,应用直接绑定主机的一或者多个端口。

 

ports:这个port需要被视作一种资源,在使用HOST网络时,就需要设定。

 

protocol:协议指定使用的端口(比如tcp、udp)

 

servicePort:Marathon不绑定此端口,其被用作服务发现。

 

如果在portMapping中containerPort设为0,它的值将会与hostPort一致,hostPort将随机分配,默认范围在31000-32000之间。

-----------------------------------------------------------

 

健康检查

        健康检查针对的是App下的每一个Task

    Task有三种活动状态:健康,非健康和扩展中

 

 

开始测试1

      目标: 通过http post方式在集群下创建一个最简单的docker容器。

   

第一步  在marathon 界面端 UI模式下测试,可以成功创建一个容器。

         然后切换到 json模式,得到一个json内容如下:

{
  "id": "tomcat-test",
  "cmd": null,
  "cpus": 1,
  "mem": 128,
  "disk": 0,
  "instances": 1,
  "container": {
    "docker": {
      "image": "tomcat",
      "forcePullImage": false
    },
    "type": "DOCKER",
    "portMappings": [
      {
        "containerPort": 1001,
        "protocol": "tcp",
        "name": "testport",
        "labels": null
      }
    ],
    "volumes": []
  },
  "networks": [
    {
      "mode": "container/bridge"
    }
  ],
  "env": {},
  "labels": {},
  "healthChecks": []
}

在局域网另一台linux  192.168.1.19 下创建测试文件 /test-marathon/create.tomcat.json

json内容就是上面的配置

在 192.168.1.19机器上测试用post方式创建镜像:


curl -X POST http://192.168.1.161:8080/v2/apps -d@/test-marathon/create.tomcat.json -H "Content-type:application/json"

 在UI 可以看到  

tomcat-test  这个APP己成功运行了
ID 192.168.1.151:31199 app被生成在这个节点当中了。
到页面删除这个 app 再重新几次测试 可以看到会分配到
192.168.1.151 192.168.1.152 192.168.1.153 三个中的一个

端口号 31199 是随机分配的


第二步  测试各种端口作用。

目标: 通过布署一个tomcat 来发布一个有内容的app应用,应用内要连接外网的mysql., 并通过web访问应用的主页。

1),准备一个简单的war包。
里面有连接mysql操作,首页连接mysql ,从表里读取一个字段。
然后输出到首页。

2) ,把war包打到tomcat镜像中去。


3),通过 post 发布应用。







posted on 2019-02-14 11:26  自制力缺失症患者  阅读(227)  评论(0编辑  收藏  举报