在Amazon Linux的Docker中启动Mesos slave会导致cgroup错误



我正在使用Mac上的docker-compose设置,并试图让它在几个AWS EC2实例上运行。Mesos主Docker容器运行正常,Zookeeper/Marathon也运行正常,但是Mesos从Docker容器出现问题:

$ sudo docker run --name mesos-slave1 -p 5051:5051 
  -e "MESOS_LOG_DIR=/var/log" -e "MESOS_MASTER=zk://10.x.x.x:2181/mesos" 
  -e "MESOS_HOSTNAME=172.17.42.1" -e "MESOS_PORT:5051" 
  -e "MESOS_ISOLATOR=cgroups/cpu,cgroups/mem" -e "MESOS_CONTAINERIZERS=docker,mesos" 
  -e "MESOS_EXECUTOR_REGISTRATION_TIMEOUT:5mins" 
  redjack/mesos-slave:0.21.0
I0708 19:26:09.559125     1 logging.cpp:172] INFO level logging started!
I0708 19:26:09.569294     1 main.cpp:142] Build: 2014-11-22 05:29:57 by root
I0708 19:26:09.569327     1 main.cpp:144] Version: 0.21.0
I0708 19:26:09.569340     1 main.cpp:147] Git tag: 0.21.0
I0708 19:26:09.569350     1 main.cpp:151] Git SHA: ab8fa655d34e8e15a4290422df38a18db1c09b5b
Failed to create a containerizer: Could not create DockerContainerizer: Failed to find a mounted cgroups hierarchy for the 'cpu' subsystem; you probably need to mount cgroups manually!

我已经做了各种各样的搜索,并尝试了像mount/sys和类似的方法,没有运气。我甚至尝试过在特权模式下运行docker,只是为了检查其完整性。我的docker-compose。yml:指定

volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /usr/local/bin/docker:/usr/local/bin/docker
- /sys/fs/cgroup:/sys/fs/cgroup

我从那里开始,但是在EC2实例上安装这些也不起作用。由于它可以在我的Mac上运行,因此与此问题有关的OS X和Amazon Linux显然存在一些差异,但我还没有找到解决办法。为了方便操作系统识别,在EC2实例上它说:

$ uname -a
Linux ip-10-x-x-x 3.14.35-28.38.amzn1.x86_64 #1 SMP Wed Mar 11 22:50:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

我最终可能会直接在EC2实例上安装Mesos,但当然,通过使用Docker容器来避免这种情况会非常方便。

如果有人无意中发现了这个问题并找到了解决方案,请分享!

当我发现还有一件事要尝试时,我刚刚要发布这个问题,看起来就像它做到了,所以我想我将继续并在把工作后发布,希望这些信息可以节省别人的时间,我花了很多时间试图弄清楚这一点。看起来关键是将/cgroup作为卷挂载,这可能是OS X和Amazon Linux(又名Centos变体)之间的区别。似乎起作用的最后一个码头咒语:

$ sudo docker run --privileged=true --name mesos-slave1 -p 5051:5051 
  -e "MESOS_LOG_DIR=/var/log" -e "MESOS_MASTER=zk://10.x.x.x:2181/mesos" 
  -e "MESOS_HOSTNAME=172.17.42.1" -e "MESOS_PORT:5051" 
  -e "MESOS_ISOLATOR=cgroups/cpu,cgroups/mem" 
  -e "MESOS_CONTAINERIZERS=docker,mesos" 
  -e "MESOS_EXECUTOR_REGISTRATION_TIMEOUT:5mins" 
  -v /var/run/docker.sock:/var/run/docker.sock 
  -v /usr/local/bin/docker:/usr/local/bin/docker -v /sys:/sys 
  -v /cgroup:/cgroup redjack/mesos-slave:0.21.0

我还在试验中,所以我不能确定是否需要特权模式,以及是否真的需要其他一些卷(docker之类的东西)。但如果这能为别人节省时间,那就太好了。

最新更新