将条目添加到容器/ etc / hosts使用pod1.yaml或pod1.json旋转一个容器

我希望这里的每个人都做得很好。 我试图find一种方法来添加条目到容器/ etc / hosts文件,同时旋转一个吊舱。 我只是想知道是否有任何选项/参数,我可以在我的“pod1.json”中添加条目添加到容器/ etc /主机创build时。 就像“–add-host node1.example.com:$ {node1ip}”一样,为docker提供相同的用途,如下所示。

docker run \ --name mongo \ -v /home/core/mongo-files/data:/data/db \ -v /home/core/mongo-files:/opt/keyfile \ --hostname="node1.example.com" \ --add-host node1.example.com:${node1ip} \ --add-host node2.example.com:${node2ip} \ --add-host node3.example.com:${node3ip} \ -p 27017:27017 -d mongo:2.6.5 \ --smallfiles \ --keyFile /opt/keyfile/mongodb-keyfile \ --replSet "rs0" 

任何指针,高度赞赏。 谢谢。

问候,Aj

Kubernetes使用IP-per-pod模式 。 如果我理解正确,你要创build三个mongo pod,并在每个容器的/etc/hosts中写入三个pod的IP地址。 直接修改/etc/host文件可能不是一个好主意,因为很多原因(例如,pod可能会死亡并被replace)。

对于kubernetes中的对等方发现,您需要

  1. 找出对等体的IP地址。
  2. 用地址更新您的应用程序。

(1)可以使用无头服务来实现。 (2)要求你写一个边车容器,与你的mongo容器一起运行,执行(1),并configuration你的应用程序。 sidecar容器是高度特定于应用程序的,您可能想要阅读关于为MongoDB执行此操作的一些相关的stackoverflow问题 。

至于(1),你可以通过使用这个service.yaml来创build一个无头服务 ,clusterIP设置为None。

 spec: clusterIP: None 

然后,您可以创build一个复制控制器来创build所需数量的mongo pod。 例如,您可以使用mongo-controller.yaml ,将gcePersistentDiskreplace为所需的本地磁盘卷types(例如, emptyDirhostPath ),并将副本号码更改为3。

每个mongo pod将被自动分配一个IP地址,并标有name=mongo 。 无头服务使用标签select器来查找吊舱。 当使用节点或容器的服务名称查询DNS时,它将返回一个mongo pod的IP地址列表。

例如,

 $ host mongo mongo.default.svc.cluster.local has address 10.245.0.137 mongo.default.svc.cluster.local has address 10.245.3.80 mongo.default.svc.cluster.local has address 10.245.1.128 

你可以得到你写的边车容器中的地址,并相应地configurationmongodb。

你可以用你最初期望的方式做到这一点。

感谢这个答案,帮助我到达那里 – https://stackoverflow.com/a/33888424/370364

您可以使用以下方法将主机推入容器的/ etc / hosts文件

 command: ["/bin/sh","-c"] args: ["echo '192.168.200.200 node1.example.com' >> /etc/hosts && commandX"] 

如果你想在pod开始时dynamic地设置ip,你可以从stdin创build一个pod,并通过sed传递它来执行替​​换,然后传递给kubectl。

所以豆荚看起来像下面这样

 command: ["/bin/sh","-c"] args: ["echo 'NODE_1_IP node1.example.com' >> /etc/hosts && commandX"] 

然后执行它

 cat pod1.yaml | sed -- "s|NODE_1_IP|${node1ip}|" | kubectl create -f - 

我意识到,这不是kubernetes打算实现这种function的方式,但我们正在使用这个来启动一个testing窗口,我们需要将它指向本地机器的默认networking设备。 创build一个服务只是为了满足testing窗口似乎是矫枉过正。 所以我们这样做。