Кластер HDFS не может работать с kubernetes + фланель
Я развернул kubernetes с включенным flanneld.service в coreos. А потом я запустил hdfs namenode и datanode через контроллер репликации kubernetes. Я также создал сервис kubernetes для наменоде. IP-адрес службы namenode - 10.100.220.223, а ip-адрес команды namenode - 10.20.96.4. В моем случае один наменод и одна датодода находятся на одном хосте. И стручок наменоде и стручок датаноде могут успешно пинговать друг друга.
Однако при попытке запустить datanode hdfs я столкнулся со следующими двумя проблемами:
Если бы я использовал службу namenode ip 10.100.220.223 в качестве fs.defaultFS в core-site.xml для datanode. Когда datanode попытался зарегистрироваться в namenode с помощью rpc-запроса, namenode получил неверный IP-адрес для datanode. Обычно он должен получить pod ip datanode, но в этом случае docker0 inet адрес хоста datanode сообщается namenode.
чтобы обойти это, я использовал namenode pod ip 10.20.96.4 в core-site.xml для datanode. На этот раз датанода вообще не может быть запущена. Информация об ошибке сообщает, что "k8s_POD-2fdae8b2_namenode-controller-keepk_default_55b8147c-881f-11e5-abad-02d07c9f6649_e41f815f.bridge" используется в качестве хоста namenode вместо ip модуля namenode.
Я пытался найти эту проблему по сети, но мне ничего не помогло. Не могли бы вы помочь мне выйти из этого? Благодарю.
2 ответа
Использовать последние kubernetes и передать параметры --proxy-mode=iptables
в команду запуска kube-proxy, кластер HDFS теперь работает
Вероятно, проблема связана с использованием kube-proxy, который, будучи прокси-сервером пользовательского пространства, приведет к тому, что все исходные IP-адреса будут одинаковыми. Не знаю, есть ли способ указать IP-адрес узла данных через протокол уровня приложения. Если есть способ предоставить его с помощью аргумента командной строки или какого-либо файла конфигурации xml, вы можете заключить двоичный код в сценарий оболочки, который сначала захватит IP:
IP=$(ip -4 -o addr show eth0 | grep -Po 'inet \K[\d.]+')
Затем передайте его через аргумент или запишите в файл конфигурации перед запуском двоичного файла данных.
См. https://github.com/coreos/flannel/issues/363 и https://groups.google.com/forum/#!search/hdfs%2420flannel/google-containers/P4uh7y383oo/bPzIRaxhs5gJ для получения дополнительной информации.