博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mesos入门(四)——docker应用的部署
阅读量:4224 次
发布时间:2019-05-26

本文共 4294 字,大约阅读时间需要 14 分钟。

简易的docker应用部署以及修改了部分启动脚本的bug

bug修改

在启动了marathon后,我在mesos的webUI上发现marathon一直处于inactive状态,后来想了想,marathon是放在启动master的脚本中了,当它启动时,slave/agent还未启动,所以才会导致framework呈现未激活的状态,所以将在mesos上运行的framework的启动单独做成一个启动脚本,问题解决

修改如下:

原start_master/tasks/main.yml

---- name: get ip  shell: ip addr|grep eth1|grep inet|awk '{print $2}'| cut -d / -f 1  register: local_ip- name: start zookeeper  shell: "{
{
remote_dir}}/zookeeper/bin/zkServer.sh start"- name: start mesos master shell: "{
{
remote_dir}}/mesos/sbin/mesos.sh start_master --hostname {
{
local_ip['stdout']}} --advertise_ip {
{
local_ip['stdout']}} --quorum {
{
quorum}} --zk {
{
mesos_zk}}"- name: start marathon shell: "{
{
remote_dir}}/marathon/bin/marathon.sh start --master {
{
master}} --zk {
{
marathon_zk}} --libmesos_path {
{
remote_dir}}/mesos/lib/libmesos.so --hostname {
{
local_ip['stdout']}}"

现start_master/tasks/main.yml

---- name: get ip  shell: ip addr|grep eth1|grep inet|awk '{print $2}'| cut -d / -f 1  register: local_ip- name: start zookeeper  shell: "{
{
remote_dir}}/zookeeper/bin/zkServer.sh start"- name: start mesos master shell: "{
{
remote_dir}}/mesos/sbin/mesos.sh start_master --hostname {
{
local_ip['stdout']}} --advertise_ip {
{
local_ip['stdout']}} --quorum {
{
quorum}} --zk {
{
mesos_zk}}"

同时添加start_framework/tasks/main.yml

---- name: get ip  shell: ip addr|grep eth1|grep inet|awk '{print $2}'| cut -d / -f 1  register: local_ip- name: start marathon  shell: "{
{
remote_dir}}/marathon/bin/marathon.sh start --master {
{
master}} --zk {
{
marathon_zk}} --libmesos_path {
{
remote_dir}}/mesos/lib/libmesos.so --hostname {
{
local_ip['stdout']}}"

docker应用部署

我前两章提出了一个问题,关于能否在mesos进行Dockerfile的build这件事,我暂时好像没有找到有效的解决方法,所以目前还是以拉取镜像部署为场景

  • 应用场景

一个项目托管在github或者私人的gitlab上,当远程仓库有push时,就会触发webhook,将信息post给一个CI服务,CI将项目clone下来并进行镜像的build,并将镜像push到私有docker仓库,随后用API接口调用marathon进行部署

  • 简单的应用

这里我们编写了一个简单的测试服务及其Dockerfile,我们在这里并没有用到ci,docker私有镜像则采用阿里云的

app.py

from flask import Flask, jsonifyapp = Flask(__name__)@app.route('/test')def hello():    return jsonify({
'msg': 'hello'})if __name__ == '__main__': app.run(host='0.0.0.0')

Dockerfile

FROM python:3COPY ["./", "/var/test_server"]WORKDIR /var/test_serverRUN pip3 install -r requirements.txt -i https://pypi.douban.com/simple/CMD ["python3", "app.py"]

marathon的部署配置

{  "id": "mesos-learn",  "cpus": 0.5,  "mem": 64.0,  "networks": [ { "mode": "container/bridge" } ],  "container": {    "type": "DOCKER",    "docker": {      "forcePullImage": false,      "image": "xxxx:xxxx"    },    "portMappings": [      {        "containerPort": 5000,        "hostPort": 31000,        "protocol": "tcp",        "servicePort": 10000      }    ]  }}

tips: slave上的docker都需要配置你的私有仓库才可以

写了一个添加私有docker仓库的模块

add_docker_registry.py

import jsonimport osfrom ansible.module_utils.basic import AnsibleModuledef add_registry(uri, auth, docker_home):    if not os.path.isfile(docker_home+'/config.json'):        with open(docker_home+'/config.json', 'w') as f:            json.dump({}, f)    with open(docker_home+'/config.json') as f:        d = json.load(f)        if d.get('auths') is None:            d['auths'] = {}        d['auths'][uri] = {}        d['auths'][uri]['auth'] = auth    with open(docker_home+'/config.json', 'w') as f:        json.dump(d, f)def main():    module = AnsibleModule(        argument_spec=dict(            uri=dict(),            auth=dict(),            docker_home=dict(type='str', default='~/.docker')        )    )    uri, auth, docker_home = module.params['uri'], module.params['auth'], module.params['docker_home']    if uri.strip() == '':        module.fail_json(msg='uri could not be None')    if auth.strip() == '':        module.fail_json(msg='auth could not be None')    docker_home = docker_home.replace('~', os.path.expanduser('~'))    if not os.path.isdir(docker_home):        os.mkdir(docker_home)    add_registry(uri, auth, docker_home)    module.exit_json(        uri=uri,        docker_home=docker_home,        msg='success'    )if __name__ == '__main__':    main()

Usage

- name: add private registry  add_docker_registry: uri=xxx auth=xxx

auth就是username:passwordbase64编码后的字符串,其中username和password需要替换成你自己的值

具体项目:

转载地址:http://xigmi.baihongyu.com/

你可能感兴趣的文章
技术安全与伦理的较量:论道AI的能与不能 | AI Time
查看>>
近期活动盘点:首期AI Time PhD:清北师兄分享前沿研究成果、“科技驱动,正向创新”医工结合高峰论坛...
查看>>
独家 | 教你用不到30行的Keras代码编写第一个神经网络(附代码&教程)
查看>>
GitHub超3万星最全面试题库:计算机面试题一网打尽
查看>>
融合与发展:数据科学研究院RONG研究员首次工作汇报会圆满结束
查看>>
谷歌“夜莺计划”曝光:秘密采集数百万医疗隐私数据!医生患者毫不知情
查看>>
2019前沿信息科技创新论坛成功举办
查看>>
清北顶会学霸:“表情”与“认知”引发的科学思辨 | 清华AI Time PHD
查看>>
GitHub超3k星!从Python代码到APP只需要一个小工具~
查看>>
独家 | 使用高斯混合模型,让聚类更好更精确(附数据&代码&学习资源)
查看>>
研究学者、医师与产业投资者齐聚一堂,将碰撞出何种火花?
查看>>
报名丨西山金融科技产业创新论坛邀您参会
查看>>
知识图谱从哪里来:实体关系抽取的现状与未来
查看>>
数据蒋堂 | 大清单报表的打印?
查看>>
近期活动盘点:高级机器学习训练营、基于神经网络的代码自动生成” “开放学术图谱”、西山金融科技产业创新论坛...
查看>>
独家 | 一文盘点AutoML 库(附PPT等链接)
查看>>
独家|图说Pandas中旋转和重塑函数
查看>>
独家 | 一文读懂概率论学习:贝叶斯理论(附链接)
查看>>
报名 | 统计学概论和医疗临床大数据分析讲座
查看>>
102页PPT,DeepMind强化学习最新进展,含图文、公式和代码
查看>>