【发布时间】: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:27017 和 localhost 绑定到 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