Невозможно подключиться к контейнеру (создан с помощью Rest API) в Kubernetes - PullRequest
0 голосов
/ 13 января 2019

Я создаю Docker-контейнер (с помощью Docker Run) в среде kubernetes, вызывая API отдыха.
Я смонтировал docker.sock хост-машины, и я создаю образ и запускаю этот образ из RESTAPI ..
Теперь мне нужно подключиться к этому контейнеру из другого контейнера, который фактически запускается Kubectl из файла deploy.yml.
Но когда используется kubeclt description pod (Pod name), моего контейнера, созданного с помощью Rest API, там нет ... Так, где работает этот контейнер и как я могу подключиться к нему из другого контейнера ?

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Вероятно, вы не должны иметь прямой доступ к Docker API из любой точки Kubernetes. Kubernetes будет совершенно не в курсе всего, что вы вручную docker run (или эквивалент), и, как вы заметили, обычные административные вызовы, такие как kubectl get pods, не увидят этого; ЦП и память, используемые модулем, не будут известны интерфейсу узла, и это может привести к чрезмерному использованию узла. Сетевое окружение Kubernetes также довольно сложное, и если вы не знаете подробностей вашего конкретного поставщика CNI, вам будет сложно сделать ваш контейнер вообще доступным, а тем более из модуля, работающего на другом узле.

Процесс, запущенный в модуле, может напрямую обращаться к API Kubernetes . На этой странице отмечается, что все официальные клиентские библиотеки знают о соглашениях, которые используются. Это означает, что вы должны иметь возможность напрямую создать задание, которое запускает ваш целевой модуль, и службу, которая подключается к нему, и получать обычные функции Kubernetes для этого. (Например, servicename.namespacename.svc.cluster.local является действительным DNS-именем, которое достигает любого Пода, подключенного к Сервису.)

Вы также должны подумать, нужен ли вам этот интерфейс. Для многих приложений также будет работать развертывание некоторой системы очереди сообщений (, например, , RabbitMQ), а затем запуск пула рабочих, подключенных к нему. Вы можете контролировать размер рабочей очереди, используя Развертывание. Его легче разработать, поскольку он позволяет избежать жесткой зависимости от Kubernetes, и им легче управлять, поскольку он предотвращает переполнение кластера динамическими заданиями.

0 голосов
/ 13 января 2019

Запускаете ли вы контейнер в том же пространстве имен, что и пространство имен, с помощью deploy.yml? Один из вариантов проверки того, что будет запускаться -

kubectl get pods --all-namespaces

Если вы не можете найти док-контейнер там, я бы предложил выполнить следующие шаги -

  1. docker ps -a {проверить статус работающего докера}
  2. Обеспечение отсутствия ошибок разрешения при монтировании docker.sock
  3. Если есть ошибки прав доступа, повысить привилегии до соответствующего уровня

Чтобы ответить на второй вопрос, соединение между двумя контейнерами должно быть возможным путем ссылки на кластерный DNS в следующем формате -

"<servicename>.<namespacename>.svc.cluster.local"

Я бы также попросил вас подробно описать шаги, коды и ошибки (если они есть), чтобы я мог лучше ответить на вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...