Kubernetes - Как получить логи в контейнере - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть два контейнера в моем модуле, один контейнер - приложение, которое записывает журналы (stdout / stderr), а второй контейнер предназначен для чтения журналов контейнера приложения и записи его в файл logs.txt.

У меня вопрос: как я могу сказать второму контейнеру читать журналы контейнера приложения?

Когда я на хосте (с k8s), я могу запустить:

 $kubectl logs -f my_pod >> logs.txt

и получите логи стручка.

Но как я могу сказать одному контейнеру читать журналы другого контейнера в том же модуле?

Я сделал нечто подобное с докерами: я смонтировал docker.sock докера хоста,и сделал $docker logs -f app_container >> logs.txt Но я не могу (насколько я знаю) смонтировать kubectl в контейнер в модуле pod для запуска команд kubectl.

Так как, по-вашему, я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Вы можете использовать http запрос для получения других журналов pod изнутри.Вот документы

В основном вы можете использовать curl для выполнения следующего запроса:

GET /api/v1/namespaces/{namespace}/pods/{name}/log

0 голосов
/ 27 февраля 2019

Вы можете смонтировать том в обоих контейнерах, записать файл журнала на этом томе в свой контейнер "app", а затем прочитать из этого файла журнала в другом контейнере.

предпочтительным решением, вероятно, является использование какого-либо видаlogshipper или sidecar для очистки журналов от stdout

(примечание: вы, вероятно, никогда не должны монтировать docker.sock в контейнер или пытаться запустить kubectl из одного контейнера в кластер, потому что вы, по сути, даете этоКонтейнерный контроль над вашим кластером, что является безопасностью, нет-нет, имхо. Если вам все равно придется делать это по какой-то причине, убедитесь, что безопасность кластера действительно ДЕЙСТВИТЕЛЬНО)

...