无法在kubernetes容器上创建mongodb副本集

时间:2019-10-24 19:34:19

标签: mongodb kubernetes mongodb-replica-set

我正在尝试在kubernetes上创建MongoDB副本集。我有一个“全局”名称空间,并且已经在其中部署了mongodb,并且使用无头服务公开了MongoDB pod。

部署文件看起来像-

apiVersion: v1
kind: Service
metadata:
  name: mongodb
  namespace: global
spec:
  selector:
    app: mongodb
  ports:
  - port: 27017
  clusterIp: None

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongodb
  namespace: global
spec:
  selector:
    matchLabels:
      app: mongodb
  template:
    metadata:
      labels:
        app: mongodb
    spec:
      containers:
      - name: mongodb
        image: mongo:4.2.1
        args: ["mongod","--replSet", "rs0","--bind_ip","mongodb.global.svc.cluster.local:27017, localhost"]
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 27017

现在,如果您查看args,我已经将mongodb.global.svc.cluster.local:27017localhost绑定到mongo pod上,它们基本上是mongo侦听的接口。在这里,我假设-mongodb.global.svc.cluster.local:27017该地址将解析为Pod IP,因为根据kubernetes文档,[service_name]。[namespace] .svc.cluster.local应该解析为Pod IP(在无头服务的情况下)就是这种情况)。

要启动副本(根据documentation),我必须执行进入pod并运行 通过mongo shell进行以下操作

rs.initiate(
   {
      _id: "rs0",
      version: 1,
      members: [
         { _id: 0, host : "mongodb.global.svc.cluster.local:27017" },
      ]
   }
)

但这会引发以下错误

{
        "operationTime" : Timestamp(0, 0),
        "ok" : 0,
        "errmsg" : "No host described in new configuration 1 for replica set rs0 maps to this node",
        "code" : 93,
        "codeName" : "InvalidReplicaSetConfig",
        "$clusterTime" : {
                "clusterTime" : Timestamp(0, 0),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

我不知道我在做什么错,主机应该很容易被发现,但是它没有发生。

1 个答案:

答案 0 :(得分:0)

我在这里看到2个选项:

  1. 在mongo shell中运行hostname()myPort(),以确保它与您在启动命令中为“主机”使用的值匹配

  2. 运行rs.initiate(),不带任何选项,默认情况下,它将使用命令行选项版本1中的副本集名称及其自身的host:port