当前位置:  开发笔记 > 编程语言 > 正文

你如何在Kubernetes上设置Mongo副本?

如何解决《你如何在Kubernetes上设置Mongo副本?》经验,为你挑选了2个好方法。

我想在Kubernetes上设置一个Mongo副本集.我想有三个复制品.这意味着我需要启动3个实例.

我应该开始三个pod,每个都有Mongo,并使用该服务指向主要的?或者我应该以某种方式使用复制控制器?



1> Sandeep Dine..:

这个答案已经过时了.我在这里使用更新的方法编写了详细的分步教程.我强烈建议您阅读所有内容.

简而言之,您运行一个sidecar应用程序为您配置副本集,并为每个实例使用一个服务或ping K8s API以获取pod IP地址.

示例:这仅适用于Google Cloud.您需要对其他平台进行修改,尤其是在卷周围:

    请按照https://github.com/leportlabs/mongo-k8s-sidecar.git中的示例进行操作

    git clone https://github.com/leportlabs/mongo-k8s-sidecar.git

    cd mongo-k8s-sidecar/example/

    make add-replica ENV=GoogleCloudPlatform (这样做三次)

    通过服务连接到副本集.

    mongodb://mongo-1,mongo-2,mongo-3:27017/dbname_?

    您还可以使用原始pod IP地址,而不是为每个pod创建服务

    使用此https://github.com/thesandlord/kubernetes-pod-ip-finder.git



2> MrE..:

通常,要设置一组群集节点(如mongo和副本集),您可以创建一个Service跟踪服务名称下的pod(例如,创建带有标记的MongoDB复制控制器mongodb,并Service跟踪这些实例)然后可以查询其成员(使用API​​服务器,您可以使用查找节点)

curl -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt https://kubernetes/api/v1/namespaces/default/endpoints/mongodb

其中mongodb是服务名称的选择器.

返回带有一堆字段的JSON对象,所以很容易解析这些是使用jq https://stedolan.github.io/jq/

将curl命令传递给jq查询

jq '.subsets[].addresses[]' | jq '{ip: .ip, host:.targetRef.name}' 将返回群集中mongodb实例的IP和主机名.

现在您知道群集中的谁,您可以在init脚本中创建副本集.显然,这意味着您需要启动第Service一个,您的启动脚本需要等待所有节点启动并向服务注册,然后您可以继续.如果您使用一个图像,使用一个脚本,它将在每个节点上运行n,因此您需要检查副本集是否已存在或处理错误.要注册的第一个pod应该完成工作.另一种选择是将所有节点作为单个节点运行,然后运行一个单独的引导脚本来创建副本集.

最后,然后调用mongodb集群,您需要确保指定具有副本集名称的URL作为选项:

mongodb://mongodb:27017/database?replicaSet=replicaSetName

由于您不知道主服务器的IP,您可以通过服务调用它,mongodb这会将请求负载平衡到其中一个节点,如果您没有指定副本集名称,最终会出现连接错误因为只有主人才能得到写请求.

显然这不是一步一步的教程,但我希望能让你开始.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有