mongodb - 如何在Kubernetes环境上的mongoDB上远程初始化副本集

标签 mongodb kubernetes

我正在尝试在Kubernetes集群上部署MongoDB。

我将在几个不同的步骤中部署它,第一个步骤将包含复制的config-svr,第二个步骤将包含复制的分片,第三个步骤将包括复制的路由器Pod。

我能够创建一个由3个配置Pod组成的kubernetes statefulset,但是现在我必须初始化副本集。

我知道我需要使用rs.initiate()方法来初始化副本集,但是我不能从远程进行此操作。

我的安装是完全自动的,在其中我可以只运行kubernetes作业进行部署,而不能在任何脚本中运行exec命令。

我尝试将远程mongo pod作业与--host flg一起使用,但收到一条错误消息,指示管理员未经授权:

{
    "ok" : 0,
    "errmsg" : "not authorized on admin to execute command { replSetInitiate: { _id: \"crs\", configsvr: true, members: [ { _id: 0.0, host: \"mongo-config-0.mongo-config-svc.default.svc.cluster.local:27017\" }, { _id: 1.0, host: \"mongo-config-1.mongo-config-svc.default.svc.cluster.local:27017\" }, { _id: 2.0, host: \"mongo-config-2.mongo-config-svc.default.svc.cluster.local:27017\" } ] } }",
    "code" : 13,
    "codeName" : "Unauthorized"
}

我读到我需要给我的管理员用户读/写权限,但这将需要再次在pod内手动执行“exec”命令(或通过外部脚本),而我不能这样做。

我还尝试在 pods 作业中使用具有ServiceAccount token 权限的kubernetes api,但是我发现无法将cur与exec api一起使用,因为它需要Web session ,这与其他kubernetes api命令不同。

有没有人能够初始化mongoDB副本,但是使用某些Mongo解决方法或Kubernetes解决方法?

谢谢

最佳答案

这对我从pod外部起作用:

kubectl exec PODNAME-mongo-0 -- bash -c 'mongo localhost:27017 --eval "rs.initiate({_id:\"YOURREPLICASETNAME\",members:[{\"_id\":1,\"host\":\"YOUR-NODE-1-NAME:27017\",\"priority\":10}, {\"_id\":2,\"host\":\"YOUR-NODE-2-NAME:27017\",\"priority\":5}]})"'

关于mongodb - 如何在Kubernetes环境上的mongoDB上远程初始化副本集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54943664/

相关文章:

kubernetes - 如何使用数据暂停和恢复 Kubernetes pod?

linux - aws firecracker 如何处理 vcpu?

mysql - 将此 SQL 查询转换为 mongodb 查询 -

MongoDB - 仅检索匹配的子文档和根文档

Kubernetes 上的 Elasticsearch 集群 - 节点无法通信

kubernetes - 如何在kubernetes中访问hashicorp金库 secret

mongodb - Mongodb 对多键索引字段进行排序

mongodb - Docker mongo auth SCRAM-SHA-1

mongodb - 使用 MongoDB 进行地理围栏

Kubernetes Kops 和联邦