`
m635674608
  • 浏览: 5026919 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

marathon参考(11):ports端口设置

 
阅读更多

Ports

 

marathon中应用的端口配置可能被混淆,并有一个悬而未决的问题,需要重新设计 ports API。这个页面试图更清楚地解释它们是如何工作的。

 

定义

 

containerPort:在容器内部,是一个容器端口。在使用Docker容器的时候,当我们使用BRIDGE网络模式,这是端口映射的一部分,必须设置。

 

hostPort:主机上的端口。当使用BRIDGE网络模式的时候,你需要指定从主机端口到容器的端口的映射。在HOST网络模式中,默认请求端口是主机端口。

 

BRIDGE networking:BRIDGE模式的网络使用在docker应用中。在这模式中,容器端口(容器内部的端口)会被映射到主机的端口上,应用在容器内部绑定一个指定端口,docker网络在主机上绑定一个指定端口。

 

HOST networking:HOST网络使用在非docker的marathon应用和docker应用上。在这种模式下,应用直接绑定一个或多个端口在主机上。

 

portMapping:对docker应用来说端口映射是必须的,docker应用需要使用BRIDGE网络模式,它包含一组host port、Container port、service port和protocol。多个端口映射可能会被一个marathon应用指定。

 

ports:ports数组用来定义端口。它必须定义成数组,如果你使用的是HOST网络模式,并且没有指定端口映射。ports和portDefinitions可以同时定义。

 

portDefinitions:portDefinition数组用来定义端口。它必须定义成数组,如果你使用的是HOST网络模式,并且没有指定端口映射。portDefinition这个数组可以替代ports数组,它可以指定端口名称、协议和标签。ports和portDefinitions可以同时定义。

 

protocol:指定端口的协议(如tcp、udp、或者是tcp和udp)。在docker容器中使用BRIDGE网络模式时,端口映射是必须的。

 

requirePorts: requirePorts是一个属性,指定marathon是否需要指定端口。这样可以确保在mesos代理上绑定端口。这个属性不支持BRIDGE网络模式。

 

servicePort:服务端口是一个端口用于描述服务应该可用的端口。marathon不绑定到指定的服务端口,但确保你不能有多个应用程序使用相同的服务端口相同的主机上运行。服务端口通常只使用外部应用程序(例如HAProxy)使应用程序可以在指定的端口。更多请参考服务发现和负载均衡

 

随机端口分配

 

设置端口是使用0这个值,marathon会为应用分配随机端口。但是如果在端口映射portMapping中containerPort设置成0,containerPort的端口将会hostPort一样。

 

环境变量

 

每个主机的端口号可以通过环境变量$PORT0,$PORT1暴露。默认情况下每个marathon应用分配一个端口,所以$PORT0总是有效的。运行在marathon上运行的docker容器中,这些环境变量也是有效的。

 

当使用BRIDGE网络模式的时候,确保在portMapping端口映射中设置containerPort容器端口号。但是,如果你设置containerPort为0,那么它和hostPort是一样的,并且你可以使用$PORT环境变量。

 

配置实例

 

Host模式

 

host网络模式是默认的网络模式,docker和非docker容器应用都可以使用。注意在你的Dockerfile中EXPOSE不是必须的。

 

开启Host模式

 

对容器来说Host模式是默认开启的。如果希望显示配置,可以通过network属性指定。

 

 "container": {

    "type": "DOCKER",

    "docker": {

      "image": "my-image:1.0",

      "network": "HOST"

    }

  },

 

对于非docker应用,你不需要指定任何东西。

 

指定端口

 

通过ports数组指定端口。

 

   "ports": [

        0, 0, 0

    ],

 

或者通过portDefinitions数组指定:

 

    "portDefinitions": [

      {"port": 0}, {"port": 0}, {"port": 0}

    ],

 

在这个例子中,我们指定3个随机分配的主机端口号,可以通过环境变量$PORT0,$PORT1,$PORT2使用这个三个端口号。marathon将随机分配三个服务端口号service port。

 

指定服务端口号service port:

 

    "ports": [

        2001, 2002, 3000

    ],

或者:

 

    "portDefinitions": [

        {"port": 2001}, {"port": 2002}, {"port": 3000}

    ],

 

在这个例子中,主机端口$PORT0,$PORT1,$PORT2任然是随机分配的。但是服务端口号service port是2001,2002,3000。使用一个服务发现的解决方案,如HAProxy,代理请求从服务端口service port到主机端口host port,需要按照上面的方式配置。

 

如果想让服务端口service port和主机端口host port一样,你需要设置requirePorts为true,默认情况下这个值是false。

 

    "ports": [

        2001, 2002, 3000

    ],

    "requirePorts" : true

 

如果你不适用服务发现方案,这个属性是非常有用的。

 

定义portDefinitions数组,你可以为每个端口指定协议,名称和标签。当开始一个新任务,marathon向mesos发送元数据。mesos将在任务的discovery字段暴露这个信息。自定义网络发现方案会使用这个字段。

 

下面是定义portDefinitions的实例:

 

    "portDefinitions": [

        {

            "port": 0,

            "protocol": "tcp",

            "name": "http",

            "labels": {"VIP_0": "10.0.0.1:80"}

        }

    ],

port字段是必填的。protocol,name,labels是可选的。如果portDefinitions数组只设置端口port,那么和设置ports数组是一样的。

 

注意ports和portDefinitions不能一起使用。

 

引用端口

 

你可以在Dockerfile文件中引用主机的端口:

 

CMD ./my-app --http-port=$PORT0 --https-port=$PORT1 --monitoring-port=$PORT2

1

1

另外,如果你不使用docker或者使用在你的marathon应用中定义cmd,方式都是一样的:

 

   "cmd": "./my-app --http-port=$PORT0 --https-port=$PORT1 --monitoring-port=$PORT2"

1

1

Bridge模式

 

Bridge网络模式可以映射主机端口到容器内部端口,目前只支持docker容器。如果你使用容器镜像并且端口是固定的,这个模式是非常有用的。注意在Dockerfile中EXPOSE端口不是必须的。

 

开启Bridge模式

 

通过network属性指定bridge模式:

 

  "container": {

    "type": "DOCKER",

    "docker": {

      "image": "my-image:1.0",

      "network": "BRIDGE"

    }

  },

指定端口

 

端口映射类似于docker命令中的参数-p。它指定在容器内的主机和端口的映射管理。

 

在container中配置端口映射portMappings:

 

 "container": {

    "type": "DOCKER",

    "docker": {

      "image": "my-image:1.0",

      "network": "BRIDGE",

      "portMappings": [

        { "containerPort": 0, "hostPort": 0 },

        { "containerPort": 0, "hostPort": 0 },

        { "containerPort": 0, "hostPort": 0 }

      ]

    }

  },

 

这个实例中,主机端口是随机的,并且容器端口号和主机端口号是一致的。此处定义了三个端口映射,在容器内部可以使用环境变量$PORT0、$PORT1、$PORT2引用端口号。

 

另外,固定容器端口号,配置如下:

 

  "container": {

    "type": "DOCKER",

    "docker": {

      "image": "my-image:1.0",

      "network": "BRIDGE",

      "portMappings": [

        { "containerPort": 80, "hostPort": 0 },

        { "containerPort": 443, "hostPort": 0 },

        { "containerPort": 4000, "hostPort": 0 }

      ]

    }

  },

 

在这个例子中,marathon会随机分配主机端口映射到80,443,4000端口。环境变量$PORT是很重要的,在上面的例子中,$PORT0表示第一个映射中的hostPort值。

 

指定协议

 

你也可以为端口指定协议,默认为tcp:

 

  "container": {

    "type": "DOCKER",

    "docker": {

      "image": "my-image:1.0",

      "network": "BRIDGE",

      "portMappings": [

        { "containerPort": 80, "hostPort": 0, "protocol": "tcp" },

        { "containerPort": 443, "hostPort": 0, "protocol": "tcp" },

        { "containerPort": 4000, "hostPort": 0, "protocol": "udp" }

      ]

    }

  },

 

指定服务端口

 

默认情况下,marathon随机创建服务端口service port。服务端口用做服务发现,将服务端口设置成常用端口是一个可取的方案。使用servicePort设置服务端口:

 

  "container": {

    "type": "DOCKER",

    "docker": {

      "image": "my-image:1.0",

      "network": "BRIDGE",

      "portMappings": [

        { "containerPort": 80, "hostPort": 0, "protocol": "tcp", "servicePort": 2000 },

        { "containerPort": 443, "hostPort": 0, "protocol": "tcp", "servicePort": 2001 },

        { "containerPort": 4000, "hostPort": 0, "protocol": "udp", "servicePort": 3000}

      ]

    }

  },

 

在这个例子中$PORT0、$PORT1、$PORT2任然是随机分配的。但是服务端口后被设置为2001、2002和3000。外部代理,如HAProxy,负责服务端口到主机端口的路由。

 

引用端口

 

如果containerPort设置为0,你应该在Dockerfile指定端口:

 

CMD ./my-app --http-port=$PORT0 --https-port=$PORT1 --monitoring-port=$PORT2

 

但是,如果你已经指定的containerPort的值,你只要在Dockerfile中使用这些端口值:

 

CMD ./my-app --http-port=80 --https-port=443 --monitoring-port=40001

1

另外,在你的marathon应用定义中指定了cmd,你可以使用相同的方式定义端口:

 

 "cmd": "./my-app --http-port=$PORT0 --https-port=$PORT1 --monitoring-port=$PORT2"

 

或是使用固定值:

 

 "cmd": "./my-app --http-port=80 --https-port=443 --monitoring-port=4000"

 

原文地址https://mesosphere.github.io/marathon/docs/ports.html

 

http://blog.csdn.net/zhuchuangang/article/details/51167845

分享到:
评论

相关推荐

    marathon-demo:Marathon 演示资源

    这些配置文件可能以JSON格式描述了应用的容器设置、端口映射、资源需求、健康检查等。 3. **脚本和工具** - 可能包含一些辅助脚本,用于简化部署、监控或更新Marathon应用的流程。 4. **测试和验证** - 可能包括了...

    marathon_template:通过马拉松动态HaProxy

    gem install marathon-template修改/etc/haproxy/haproxy.cfg-马拉松模板将清除现有的haproxy.cfg文件/ etc / crontab-马拉松模板将每分钟追加一个cron作业以执行马拉松模板,可以在/etc/haproxy.yaml中设置播放...

    Marathon-Examples:可以使用Marathon轻松运行的示例Swift脚本的集合

    请注意,此仓库中的脚本主要用于参考和启发 :slightly_smiling_face: 有关Marathon及其安装方法的更多信息,。范例清单在文件夹中所有文件的名称后添加一个后缀。 从当前文件夹中的所有图像生成Xcode资产目录。将...

    marathon-resource:用于将应用程序部署到Marathon的Concourse资源

    您在Marathon中的应用的名称。 uri :必填。 您希望部署到的Marathon实例的URI。 basic_auth :可选。 如果您正在使用HTTP基本身份验证来保护您的Marathon实例,则使用此属性。 注意到user_name和password api_...

    marathon-varnish:从 Mesos Marathon API 输出创建 Varnish 配置

    马拉松清漆这是从 Mesos Marathon API 创建 Varnish 配置的示例。 http://localhost:8080/v2/tasks输出将输出如下内容: { "tasks": [ { "appId": "/foo", "id": "foo.4cef049d-643e-11e4-bdcd-9cb65491f714", "host...

    marathon-python:Mesos Marathon的REST API的Python客户端库

    这是一个Python库,用于通过Marathon的与服务器进行。 兼容性 对于Marathon 1.9.x和1.10.x,至少使用0.13.0 对于Marathon 1.6.x,至少使用0.10.0 对于马拉松1.4.1,至少使用0.8.13 对于马拉松1.1.1,至少使用...

    marathon-ruby:Marathon 的 Ruby 客户端

    marathon-ruby是 Marathon API 的 Ruby 客户端。 到目前为止,它还没有完成,但包括启动/更新/删除应用程序的基本功能。 安装 将此行添加到应用程序的 Gemfile 中: gem 'marathon-ruby' 然后执行: $ bundle ...

    marathon-lb:Marathon-lb是DCOS的服务发现和负载平衡工具

    马拉松磅 Marathon-lb是通过使用应用程序状态来管理HAProxy的工具。 HAProxy是一种快速,高效,经过考验的高可用性负载均衡器,具有许多高级功能,可为许多备受瞩目的网站提供支持。特征无状态设计:不直接依赖任何...

    marathon-ui:马拉松的Web用户界面(https

    马拉松UI项目状态以下消息已发布在网上论坛网站上: 亲爱的马拉松社区, 我们想为您提供有关Marathon UI当前状态的最新信息,并邀请您讨论未来的发展。 您可能已经注意到,由于我们已经花费了大部分时间来开发用于DC...

    marathon-cli:在 Marathon 中管理应用程序和组的 golang cli

    马拉松-cli 在 Marathon 中管理应用程序和组的 golang cli ##用法 COMMANDS: infoGets information about the marathon cluster leaderGets the current leader rmleaderForces current leader to abdicate ...

    marathon-dns:轻松自定义本地 DNS - 转 localhost

    完成后,打开您的项目文件 ( ~/.marathon ),并添加您想要的任何项目。 例如,以下项目文件: { "myawesomeapp": 3000 } 将设置http://myawesomeapp.dev指向http://localhost:3000 基本上就是这样。

    Marathon+User+Guide.pdf

    ### Marathon及Marathon ITE 使用指南知识点详述 #### 关于Marathon及Marathon ITE - **Marathon**:这是专为Java/Swing应用程序设计的一款顶级开源自动化测试工具。自2006年起,由Jalian Systems公司进行维护、...

    marathon_3:免费的智力马拉松HTML-学院

    4. **图像标签**:`<img>`用于插入图像,需要设置`src`属性来指定图像源,`alt`属性提供替代文本。 5. **布局标签**:HTML5引入了新的布局元素,如`<header>`、`<nav>`、`<section>`、`<article>`、`<aside>`和`...

    marathon_record.rar_marathon record_site:www.pudn.com

    总的来说,"marathon_record.rar"中的"marathon_record"文件是一个实用工具,它结合了编程技术(如用户输入处理、数学运算和错误处理)、马拉松运动的专业知识以及潜在的开源精神,为跑者提供了便捷的速度和配速计算...

    mesos-marathon-demo:Mesosmarathon + 码头工人

    一旦你的 vagrant 机器在安装了 mesos 和 marathon 的情况下运行,你可以继续以下部分。 构建图像 为了能够使用 docker 执行示例,目录docker-image包含构建和创建 docker 实例所需的步骤。 运行图像 为了在马拉松...

    Marathon-js:技术测试(Splio)

    Marathon-js是一个技术测试项目,特别针对Splio公司的营销自动化技术。这个测试旨在评估开发者在JavaScript领域的技能,尤其是对于Web应用程序开发的理解和实践能力。在接下来的内容中,我们将深入探讨这个测试项目...

    marathon-trainer:建议练习以训练马拉松

    马拉松教练 该程序是Java Swing程序,旨在...设置 您所有不同的培训计划都应放在training-plan目录中。 training-plan目录中的文件应具有以下结构: # [half|full] [target time] half 2h # [run-type] [length or r

    DCOS之marathon技术文档

    DCOS之Marathon技术文档详细介绍了Marathon的安装、配置、应用部署、高可用设置、SSL和基础认证配置、服务发现、负载均衡以及应用迁移等方面的知识。 首先,Marathon是一个为Apache Mesos集群提供长服务运行的框架...

    letsencrypt-marathon-lb:让我们为支持DCOS严格安全模式的Marathon-lb进行加密集成

    此应用程序允许您自动生成和更新Marathon-lb的“让我们加密”证书。 它必须作为马拉松应用程序运行。 应用程序在启动时会生成或更新证书,并每隔24小时检查一次是否需要更新证书。 如果您需要新域或其他域的证书,则...

    docker-mesos-marathon-screencast:Mesos 上的 Docker 集群中使用的脚本和 Marathon 截屏视频

    docker-mesos-marathon-screencast 的截屏视频中使用的脚本。入门如果您想为自己复制演示。 脚本包含在此 repo 中。 你会需要: 安装 使用您的主launch.sh的 IP 地址更新launch.sh 用你的主人的 IP 地址更新.mesos....

Global site tag (gtag.js) - Google Analytics