我是mesos和马拉松的新手。
我有一个设置,其中一个 docker 是自定义的,另一个是 mysql 服务器实例。这两个是链接并传递信息的。我如何在 mesos 上部署它?我目前正在使用单节点主从设置。
要链接您的 Docker 容器,请使用Mesos-DNS。我在下面使用Playa Mesos来解释设置。
在 Playa 上设置 Mesos-DNS 很简单:使用mesosphere/mesos-dns映像并使用以下应用规范将其部署在 Marathon 上:
{
"id": "mesos-dns",
"instances": 1,
"cpus": 1,
"mem": 512,
"cmd": "/mesos-dns -config=/config.json",
"container": {
"type": "DOCKER",
"docker": {
"image": "mesosphere/mesos-dns:latest",
"network": "HOST"
},
"volumes": [
{
"containerPath": "/config.json",
"hostPath": "/etc/mesos-dns/config.js",
"mode": "RW"
}
]
}
}
具有以下内容config.js
:
{
"zk": "zk://127.0.0.1:2181/mesos",
"refreshSeconds": 60,
"ttl": 60,
"domain": "mesos",
"port": 53,
"resolvers": ["10.0.2.3"],
"timeout": 5,
"email": "root.mesos-dns.mesos"
}
另外,请确保resolv.conf
在第一个位置有正确的条目:
$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
nameserver 10.0.2.3
search net
然后,您可以动态发现您的服务(在 Vagrant 框中),如下所示:
dig _$APPID._tcp.marathon.mesos SRV
$APPID
您用于部署自定义 Docker 映像的标识符在哪里。上面的命令会告诉你 IP 和 Marathon 分配给你的应用程序的端口。您也可以使用 Mesos-DNS HTTP API进行服务发现。
注1:DCOS预装了Mesos-DNS,可以直接用于服务发现。
注意 2:如果您遇到应用程序不理解SRV
记录的问题,您可以尝试以下解决方法:https ://github.com/the-tetanus-clinic/srv-shim
Marathon 官方文档说参数对象(文档页面底部)中允许使用任意 docker 命令,因此您可以使用它来连接它们。
或者, Mesos-DNS似乎是一种解决方案。当您从单个主机移动到多个主机并且您的单个容器被安排到不同的主机时,第一个解决方案应该会失败。
注意:我对 docker 也不是很有经验,但这些似乎是我能找到的唯一选择。然而,将 Docker 集成到 Mesos 是一个持续的过程,将 Docker Swarm 集成到 Mesos 目前正在进行中,所以这些问题可能会在(希望不久的)将来得到解决。