我试图在我的Kubernetes集群上部署MongoDB。
我将按照几个不同的步骤进行部署,其中第一个将包含复制的config-svr,第二个将包含复制的分片,而第三个将包括已复制的路由器吊舱。
我能够创建一个由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”命令(或通过外部脚本),而我不能这样做。
我还尝试了在Pod作业中使用具有ServiceAccount令牌权限的kubernetes api,但我发现无法将cur与exec api一起使用,因为它需要Web会话,这与其他kubernetes api命令不同。
除了使用Mongo解决方法还是Kubernetes解决方法,有人能够初始化mongoDB副本吗?
谢谢
答案 0 :(得分:0)
这在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}]})"'