ошибка подключения mongo внутри контейнера mongoS

Я пытаюсь организовать кластер 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.


person Yoiro    schedule 11.03.2019    source источник


Ответы (1)


Я действительно не понимаю, почему, но смена рабочего порта с 27017 на 27020 сработала нормально. Если кто-то проходит мимо и может объяснить, как это сделать, я был бы рад услышать его/ее объяснение как netstat -tunelp (а также ps aux), в то время как поиск порта 27017 на обоих моих узлах k8s не дает никаких результатов, связанных с портом 27017...

person Yoiro    schedule 11.03.2019