Я пытаюсь создать набор реплик MongoDB для kubernetes. У меня есть пространство имен «global», и я развернул в нем mongodb, и я показал модуль MongoDB, используя безголовый сервис.
Файл развертывания выглядит следующим образом -
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
Теперь, если вы посмотрите на аргументы, я связываю mongodb.global.svc.cluster.local:27017
и localhost
с модулем Монго, которые в основном являются интерфейсами, на которых Монго будетСлушать. Здесь я предполагаю, что - mongodb.global.svc.cluster.local:27017
этот адрес будет разрешен для IP-адреса pod, потому что [service_name]. [Namespace] .svc.cluster.local должен разрешать IP-адрес pod в соответствии с документацией kubernetes (в случае безголового обслуживания, котороедело тут).
Чтобы запустить реплику (в соответствии с документацией ), я должен выполнить exe в модуле и запустить следующее через оболочку mongo
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)
}
}
}
Я не знаю, что я делаю не так, предполагается, что хост легко обнаружить, но этого не происходит.