【问题标题】:Unable to create mongodb replica set on kubernetes pod无法在 kubernetes pod 上创建 mongodb 副本集
【发布时间】:2019-10-24 19:34:19
【问题描述】:

我正在尝试在 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)
                }
        }
}

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

【问题讨论】:

  • 你能给正在运行的容器一个 bash shell 吗?如果是这样,在容器内你可以通过运行 mongo shell 连接到正在运行的 mongod 进程吗?如果是这样,如果您运行 rs.status(),输出是什么?
  • 它只是说没有复制集被初始化@barrypicker
  • 你的 mongo shell 连接字符串是什么。您只是使用“mongo”吗?

标签: mongodb kubernetes mongodb-replica-set


【解决方案1】:

我在这里看到 2 个选项:

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

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

【讨论】:

    猜你喜欢
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多