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] >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> 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

