Я пытаюсь организовать кластер MongoDB внутри Kubernetes, работая с StatefulSets и Headless Services. Я давно пытаюсь понять, что в этом не так, но не могу найти ничего, что можно было бы использовать.
Во время своего исследования я нашел этот репозиторий, который я клонировал и адаптировал для использования кейс. Вы можете найти один из манифестов (для экземпляра mongoS) здесь.
Затем я запускаю скрипт generate.sh
, поставляемый в репозитории, но с комментариями всего, что связано с gcloud
или persistentVolume
, оставляя только порождающие процессы statefulSet
/Service
. Вроде бы все работает нормально, но всякий раз, когда скрипт достигает блока
# Wait for the mongos to have started properly
echo "Waiting for the first mongos to come up (`date`)..."
echo " (IGNORE any reported not found & connection errors)"
echo -n " "
until kubectl --v=0 exec mongos-router-0 -c mongos-container -- mongo --quiet --eval 'db.getMongo()'; do
sleep 2
echo -n " "
done
echo "...first mongos is now running (`date`)"
echo
Он просто выдает это сообщение об ошибке независимо:
2019-03-11T14:02:03.531+0000 E QUERY [js] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed: SocketException: Error connecting to 127.0.0.1:27017 :: caused by :: Connection refused :
connect@src/mongo/shell/mongo.js:343:13
@(connect):1:21
exception: connect failed
command terminated with exit code 1
Таким образом, я попытался запустить mongo
напрямую из модуля, но произошла та же ошибка. Затем я просто попытался запустить mongo
с использованием разных портов прямо внутри контейнера, запустив mongo --port 27018
(также пробовал 27019 и 27020), просто чтобы посмотреть, какие ошибки он выдает с неоткрытыми портами, и кажется, что он выдает ту же ошибку.
Как я могу запустить монго внутри контейнера с работающим монго на порту 27017? Кажется, что я должен запустить mongod
перед запуском оболочки mongo
, даже если mongos
уже запущен. Это действительно ошеломляет, и я чувствую, что что-то упускаю. У меня есть эта ошибка только внутри модулей mongos, в то время как mongo-configdb и mongod-maindb, кажется, работают гладко (и запуск оболочки mongo внутри них не дает никаких ошибок. Более того, при выполнении rs.status()
внутри одного из них он работает отлично).
Вы можете найти mongos
журналов здесь.
TL;DR Как мне запустить монго внутри контейнера с работающим монго на порту 27017?
Примечание: я использую образ mongo:3.6 из официального репозитория dockerhub.