我正在尝试在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)
}
}
}
我不知道我在做什么错,主机应该很容易被发现,但是它没有发生。
答案 0 :(得分:0)
我在这里看到2个选项:
在mongo shell中运行hostname()
和myPort()
,以确保它与您在启动命令中为“主机”使用的值匹配
运行rs.initiate()
,不带任何选项,默认情况下,它将使用命令行选项版本1中的副本集名称及其自身的host:port