Actually not only LIBPROCESS_IP, some SSL related environment didn't pass
as well.
@Cody @Tim, is it OK that pass flags.executor_environment_variables to the
Docker container?

[1]: https://issues.apache.org/jira/browse/MESOS-3740

On Tue, Jun 7, 2016 at 9:25 AM, Radoslaw Gruchalski <[email protected]>
wrote:

> Yes, because that runs in host network. This leads to a question: your
> docker task, is it bridge or host network.
>
> --
> Best regards,
> Rad
>
>
>
>
> On Tue, Jun 7, 2016 at 3:21 AM +0200, "Eli Jordan" <
> [email protected]> wrote:
>
> It's important to note that if you run a task with the command executor
>> (I.e. Not using docker) LIBPROCESS_IP is defined, along with several other
>> variables that are not defined in docker.
>>
>> Thanks
>> Eli
>>
>> On 7 Jun 2016, at 10:05, Radoslaw Gruchalski <[email protected]>
>> wrote:
>>
>> I think the problem is that it is not known which agent the task is
>> running on until the task i in the running state.
>> Hence the master can’t pass that as an env variable to the task.
>> However, I see your point. There is an agent host name avaialble in the
>> task as $HOST. Maybe it would be a good idea if Mesos was setting env
>> variables named AGENT_IP_0, AGENT_IP_1 and so on for every IP interface on
>> the agent, maybe AGENT_BIND_IP if bind IP is different than 0.0.0.0. OTOH,
>> I can see how this could be considered as some security issue. I am not
>> sure what the implications could be.
>>
>> Anybody else care to comment?
>>
>> –
>> Best regards,
>> Radek Gruchalski
>> [email protected]
>> de.linkedin.com/in/radgruchalski
>>
>>
>> *Confidentiality:*This communication is intended for the above-named
>> person and may be confidential and/or legally privileged.
>> If it has come to you in error you must take no action based on it, nor
>> must you copy or show it to anyone; please delete/destroy and inform the
>> sender immediately.
>>
>> On June 7, 2016 at 1:42:46 AM, Eli Jordan ([email protected])
>> wrote:
>>
>> Thanks Radoslaw. I'm not really set on using host names, I just want a
>> reliable way to start the framework. For the meantime I have gone with a
>> solution similar to what you suggested. We use /etc/default/mesos file to
>> configure mesos, and it has the ip defined, so I just mounted that in the
>> container and read the ip.
>>
>> I would like to avoid having a dependency on the file system of the
>>  agents though. I'm not sure why I can't have the docket executor set the
>> LIBPROCESS_IP variable in the same way the command executor does.
>>
>> Thanks
>> Eli
>>
>> On 6 Jun 2016, at 21:44, Radoslaw Gruchalski <[email protected]>
>> wrote:
>>
>> Out of curiosity. Why are you insisting on using host names?
>> Say you have 1 master and 2 agents with these IPs:
>>
>> - mesos-master-0: 10.100.1.10
>> - mesos-agent-0: 10.100.1.11
>> - mesos-agent-1: 10.100.1.12
>>
>> Your problem is that you have no way to obtain an IP address of the agent
>> in the container. Correct?
>> One way to overcome this problem is to create a shell file, say in
>> /etc/mesos-agent.sh, with contents like:
>>
>> ...
>> AGENT_IP=10.100.1.11
>> …
>>
>> If you’re using Marathon, you can copy that file to the sandbox using
>> docker volumes:
>>
>>             {
>>                 "containerPath": “/etc/mesos-agent.sh",
>>                 "hostPath": "/etc/mesos-agent.sh",
>>                 "mode": "RO"
>>             }
>>
>> You can now source that in the container to set the
>> LIBPROCESS_ADVERTISE_IP.
>> Other applications simply use the mesos-agent-X host name. That’s without
>> mesos-dns.
>> Things are easier with mesos-dns or consul service catalog (I prefer the
>> latter).
>>
>> –
>> Best regards,
>> Radek Gruchalski
>> [email protected]
>> de.linkedin.com/in/radgruchalski
>>
>>
>> *Confidentiality:*This communication is intended for the above-named
>> person and may be confidential and/or legally privileged.
>> If it has come to you in error you must take no action based on it, nor
>> must you copy or show it to anyone; please delete/destroy and inform the
>> sender immediately.
>>
>> On June 6, 2016 at 1:16:07 PM, Eli Jordan ([email protected])
>> wrote:
>>
>> The issue refers to LIBPROCESS_IP not LIBPROCESS_HOST. I haven’t been
>> able to find the LIBPROCESS_HOST variable documented anywhere.
>>
>> My understanding is that the scheduler uses LIBPROCESS_IP to determine
>> which network interface to bind to, and also which ip to advertise to the
>> master, so that the master can send offers. There is also another variable
>> LIBPROCESS_ADVERTISE_IP. If this is defined then LIBPROCESS_IP is used to
>> determine which network interface to bind to, and LIBPROCESS_ADVERTISE_IP
>> is used to determine which ip to advertise to the master.
>>
>> It would be great if there was a LIBPROCESS_ADVERTISE_HOST variable, then
>> I could just use the $HOST variable to define this.
>>
>> On 5 Jun 2016, at 10:41 pm, Sivaram Kannan <[email protected]> wrote:
>>
>>
>> I have been using this way from 0.23.0 to the 0.28.0. This has been
>> surely working (although for a different framework). Inside the docker
>> container can you see the $HOST variable defined??
>>
>> The ticket you referred says that the apps definition needs to define
>> LIBPROCESS_HOST=$HOST to be make the framework take the proper IP - you are
>> describing a different problem.
>>
>> Thanks,
>> ./Siva.
>>
>> On Sun, Jun 5, 2016 at 4:30 AM, Eli Jordan <[email protected]>
>> wrote:
>>
>>> I found this issue on the mesos jira that describes the exact issue I am
>>> hitting.
>>>
>>> https://issues.apache.org/jira/browse/MESOS-3740
>>>
>>> It doesn't appear to be resolved.
>>>
>>> Thanks
>>> Eli
>>>
>>> On 5 Jun 2016, at 16:46, Eli Jordan <[email protected]> wrote:
>>>
>>> Hmmm… that doesn’t seem to work for me. What version of mesos does this
>>> work in? I am running 0.27.1.
>>>
>>> When using this approach, I still get the following error when the kafka
>>> mess framework is starting up.
>>>
>>> "Scheduler driver bound to loopback interface! Cannot communicate with
>>> remote master(s). You might want to set 'LIBPROCESS_IP' environment
>>> variable to use a routable IP address.”
>>>
>>> I tried setting LIBPROCESS_IP to ‘0.0.0.0’ and
>>> LIBPROCESS_ADVERTISE_IP=‘the public ip’ and this works. But the host
>>> variations don’t seem to work. (i.e. set LIBPROCESS_IP=0.0.0.0 and
>>> LIBPROCESS_ADVERTISE_HOST=$HOST)
>>>
>>> It seems lib process doesn’t support using host names.
>>>
>>> I think I might have to run the framework outside of docker, but I would
>>> really like to avoid this.
>>>
>>> This problem would be solved if the docker executor was able to set the
>>> same environment variables as the command executor. Is there a way to make
>>> this happen?
>>>
>>> I saw that mesos can be extended with a Hook ‘module’ to set extra
>>> environment variables in docker containers. This might be a solution, but
>>> seems over wrought for a simple problem.
>>>
>>>
>>> On 5 Jun 2016, at 12:50 am, Sivaram Kannan <[email protected]> wrote:
>>>
>>>
>>> Hi,
>>>
>>> Can you try adding && after the LIBPROCESS_HOST variable and the actual
>>> command. We have been using this for sometime now.
>>>
>>> "cmd": "LIBPROCESS_HOST=$HOST && ./kafka-mesos.sh ..
>>>
>>> Thanks,
>>> ./Siva.
>>>
>>>
>>> On Sat, Jun 4, 2016 at 8:34 AM, Eli Jordan <[email protected]>
>>> wrote:
>>>
>>>> Hi @haosdent
>>>>
>>>> Based on my testing, this is not the case.
>>>>
>>>> I ran a task (from marathon) without using a docker container that just
>>>> printed out all environment variables. i.e. while [ true ]; do env; sleep
>>>> 2; done
>>>>
>>>> I then run a task that executed the same command inside an alpine
>>>> docker image.
>>>>
>>>> When running without a docker image LIBPROCESS_IP was defined along
>>>> with many other variables.
>>>>
>>>> Sample output when running without docker (note LIBPROCESS_IP) is
>>>> defined
>>>>
>>>> Registered executor on mesos-slave0
>>>> Starting task plain-test.5e5b00cc-2645-11e6-a3dd-080027aa149e
>>>> sh -c 'while [ true ]; do env; sleep 2; done'
>>>> Forked command at 16571
>>>> LIBPROCESS_IP=192.168.3.16
>>>> MESOS_AGENT_ENDPOINT=192.168.3.16:5051
>>>> MESOS_EXECUTOR_REGISTRATION_TIMEOUT=5mins
>>>> HOST=mesos-slave0
>>>> SHELL=/bin/sh
>>>>
>>>> MESOS_DIRECTORY=/var/mesos/slaves/7ad17efe-0f9e-4703-9d2e-7fb9ee03f64c-S0/frameworks/aae929c7-24a5-4463-9ae0-bc7b044973c5-0000/executors/plain-test.5e5b00cc-2645-11e6-a3dd-080027aa149e/runs/c9b6ef86-b37d-4e3c-b1ca-bd680aed779f
>>>> PORT0=31082
>>>> PORT_10001=31082
>>>> LC_ALL=en_US.UTF-8
>>>> … more
>>>>
>>>>
>>>> Sample output when running with docker (note LIBPROCESS_IP is not
>>>> defined)
>>>>
>>>> --container="mesos-7ad17efe-0f9e-4703-9d2e-7fb9ee03f64c-S0.f3a94ab4-dfff-4e97-b806-f1cc501ecf42"
>>>> --docker="docker" --docker_socket="/var/run/docker.sock" --help="false"
>>>> --initialize_driver_logging="true" --launcher_dir="/usr/libexec/mesos"
>>>> --logbufsecs="0" --logging_level="INFO"
>>>> --mapped_directory="/mnt/mesos/sandbox" --quiet="false"
>>>> --sandbox_directory="/var/mesos/slaves/7ad17efe-0f9e-4703-9d2e-7fb9ee03f64c-S0/frameworks/aae929c7-24a5-4463-9ae0-bc7b044973c5-0000/executors/alpine-test.77d5a3d9-2644-11e6-a3dd-080027aa149e/runs/f3a94ab4-dfff-4e97-b806-f1cc501ecf42"
>>>> --stop_timeout="0ns"
>>>> --container="mesos-7ad17efe-0f9e-4703-9d2e-7fb9ee03f64c-S0.f3a94ab4-dfff-4e97-b806-f1cc501ecf42"
>>>> --docker="docker" --docker_socket="/var/run/docker.sock" --help="false"
>>>> --initialize_driver_logging="true" --launcher_dir="/usr/libexec/mesos"
>>>> --logbufsecs="0" --logging_level="INFO"
>>>> --mapped_directory="/mnt/mesos/sandbox" --quiet="false"
>>>> --sandbox_directory="/var/mesos/slaves/7ad17efe-0f9e-4703-9d2e-7fb9ee03f64c-S0/frameworks/aae929c7-24a5-4463-9ae0-bc7b044973c5-0000/executors/alpine-test.77d5a3d9-2644-11e6-a3dd-080027aa149e/runs/f3a94ab4-dfff-4e97-b806-f1cc501ecf42"
>>>> --stop_timeout="0ns"
>>>> Registered docker executor on mesos-slave0
>>>> Starting task alpine-test.77d5a3d9-2644-11e6-a3dd-080027aa149e
>>>> HOSTNAME=984809b0b720
>>>> SHLVL=1
>>>> HOME=/root
>>>> PORT=31295
>>>>
>>>> MESOS_CONTAINER_NAME=mesos-7ad17efe-0f9e-4703-9d2e-7fb9ee03f64c-S0.f3a94ab4-dfff-4e97-b806-f1cc501ecf42
>>>> MARATHON_APP_ID=/alpine-test
>>>> PORTS=31295
>>>> PORT0=31295
>>>> MARATHON_APP_DOCKER_IMAGE=alpine
>>>> PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
>>>> MESOS_SANDBOX=/mnt/mesos/sandbox
>>>> MARATHON_APP_RESOURCE_DISK=0.0
>>>> MARATHON_APP_RESOURCE_MEM=128.0
>>>> HOST=mesos-slave0
>>>> PORT_10000=31295
>>>> MARATHON_APP_VERSION=2016-05-30T08:56:59.065Z
>>>> MARATHON_APP_LABELS=
>>>> PWD=/
>>>> MESOS_TASK_ID=alpine-test.77d5a3d9-2644-11e6-a3dd-080027aa149e
>>>> MARATHON_APP_RESOURCE_CPUS=1.0
>>>>
>>>> Is there some other config I need to do for the docker containerizer?
>>>> Any help greatly appreciated.
>>>>
>>>> On 4 Jun 2016, at 7:28 pm, haosdent <[email protected]> wrote:
>>>>
>>>> Hi, @Jordan. I think not matter you use MesosContainerizer or
>>>> DockerContainerizer, LIBPROCESS_IP always would be set if you launch you
>>>> Agent with `--ip` flag.
>>>>
>>>> On Fri, Jun 3, 2016 at 8:23 PM, Eli Jordan <[email protected]>
>>>> wrote:
>>>>
>>>>>
>>>>> The reason I need to set LIBPROCESS_IP is because the slaves have 2
>>>>> network interfaces, and the docker container is running in host networking
>>>>> mode. So libmesos doesn’t know which IP to advertise. The hostnames of the
>>>>> slaves are all resolvable.
>>>>>
>>>>> I have noticed that if I run a marathon app that doesn’t use docker,
>>>>> e.g. while [ true ]; do env; sleep 2; done, that LIBPROCESS_IP is defined
>>>>> in the environment. However, when running a docker image this variable is
>>>>> not defined.
>>>>>
>>>>> Is there a way to have marathon pass along all environment variables
>>>>> defined by mesos?
>>>>> Thanks
>>>>> Eli
>>>>>
>>>>> On 4 Apr 2016, at 14:12, Eli Jordan <[email protected]> wrote:
>>>>>
>>>>> @haosdent I’m not sure how this works internally, but it seems the
>>>>> mess master needs to send requests to the framework for resource offers,
>>>>> and therefore needs to know the external IP (i.e. the host IP)
>>>>>
>>>>> @craig w
>>>>> Would I need to do this in the cmd portion of the marathon JSON? I
>>>>> currently have the config below
>>>>> {
>>>>>     "container": ...,
>>>>>     "id":"kafka-mesos-scheduler",
>>>>>     "cpus": 0.5,
>>>>>     "mem": 256,
>>>>>     "ports": [9999],
>>>>>     "cmd": "./kafka-mesos.sh scheduler --master=mesos-master:5050
>>>>> --zk=mesos-master:2181 --api=http://mesos-slave0:9999
>>>>> --storage=zk:/kafka-mesos",
>>>>>     "instances": 1,
>>>>>     "constraints": [["hostname", "LIKE", "mesos-slave0"]],
>>>>>     "env": {
>>>>>         "LIBPROCESS_IP": "192.168.3.16"
>>>>>     }
>>>>> }
>>>>>
>>>>> @Chris Baker Currently we don’t have mess-dns setup but if this works
>>>>> it would seem to be a nice solution. However, I did try setting
>>>>> LIBPROCESS_IP to the slave hostname and it seems to produce a parse error.
>>>>> So I think it needs to be an actual IP address.
>>>>>
>>>>> I was hoping there would be a configuration for the slave that would
>>>>> automatically populate this env variable when starting the docker
>>>>> container. So I don’t need to complicate the marathon file, and can reuse
>>>>> it in different clusters.
>>>>>
>>>>>
>>>>> On 4 Apr 2016, at 11:25 am, Chris Baker <[email protected]> wrote:
>>>>>
>>>>> Alternatively, because the $HOST username is indirect, which would
>>>>> require a runtime element to "export $LIBPROCESS_IP=$HOST", another
>>>>> alternative is to fallback on Mesos-DNS, if that's part of the cluster
>>>>> deployment, setting $LIBPROCESS_IP to the (a priori) Mesos-DNS entry
>>>>> corresponding to the service.
>>>>>
>>>>> On Sun, Apr 3, 2016 at 5:06 PM craig w <[email protected]> wrote:
>>>>>
>>>>>> Hi, marathon sets the HOST env var. If it's not the ip address you
>>>>>> can use getent with the value from HOST to figure it out.
>>>>>> >However, in order for the frameworks to receive resource offers I
>>>>>> need to set the LIBPROCESS_IP environment variable to the hosts IP 
>>>>>> address
>>>>>> for the docker container running the frameworks.
>>>>>>
>>>>>> Hi, @Gmail. Could you provide more details about this?
>>>>>>
>>>>>> On Sun, Apr 3, 2016 at 10:40 PM, Rad Gruchalski <[email protected]
>>>>>> > wrote:
>>>>>>
>>>>>>> Hi Gmail,
>>>>>>>
>>>>>>> AFAIK not. The only way to do so is setting up the env variable as
>>>>>>> you do now.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Kind regards,
>>>>>>> Radek Gruchalski
>>>>>>> [email protected] <[email protected]>
>>>>>>> de.linkedin.com/in/radgruchalski/
>>>>>>>
>>>>>>>
>>>>>>> *Confidentiality:*This communication is intended for the
>>>>>>> above-named person and may be confidential and/or legally privileged.
>>>>>>> If it has come to you in error you must take no action based on it,
>>>>>>> nor must you copy or show it to anyone; please delete/destroy and inform
>>>>>>> the sender immediately.
>>>>>>>
>>>>>>> On Sunday, 3 April 2016 at 16:09, Gmail wrote:
>>>>>>>
>>>>>>> I'm pretty new to mesos and marathon, and I'm running a couple of
>>>>>>> frameworks with marathon (Kafka and elastic search). However, in order 
>>>>>>> for
>>>>>>> the frameworks to receive resource offers I need to set the 
>>>>>>> LIBPROCESS_IP
>>>>>>> environment variable to the hosts IP address for the docker container
>>>>>>> running the frameworks. Currently I am working around me this by using a
>>>>>>> constraint to hard wire the slave that the framework gets launched on, 
>>>>>>> so
>>>>>>> then I can put the slaves ip in the marathon json file.
>>>>>>>
>>>>>>> Obviously this is not ideal. Is there a better way to define the
>>>>>>> host ip Inside the docker container?
>>>>>>>
>>>>>>> Sent from my iPad
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Best Regards,
>>>>>> Haosdent Huang
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Best Regards,
>>>> Haosdent Huang
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> ever tried. ever failed. no matter.
>>> try again. fail again. fail better.
>>>         -- Samuel Beckett
>>>
>>>
>>>
>>
>>
>> --
>> ever tried. ever failed. no matter.
>> try again. fail again. fail better.
>>         -- Samuel Beckett
>>
>>
>>


-- 
Best Regards,
Haosdent Huang

Reply via email to