Одиночная команда для отображения логов из запущенного модуля kubernetes - PullRequest
0 голосов
/ 08 ноября 2018

Хотите иметь одну команду для продолжения потоковой передачи журналов с определенного модуля. В настоящее время я должен сделать

  • kubectl get pods (перечисляет все запущенные модули)
  • проверьте запущенный модуль из списка и скопируйте имя модуля
  • kubectl logs <pod name> -f (непрерывная передача журналов из модуля)

Бонусные баллы: список модулей, начинающихся с определенного слова, например, kubectl get pods asset*. Который будет просто отображать модули с именами, начинающимися с актива

Ответы [ 4 ]

0 голосов
/ 09 ноября 2018

Вы можете использовать awk для достижения этой цели. Вы можете использовать:

kubectl logs -n <namespace> $(kubectl get pod -n <namespace> |  awk '/<pattern>/{print $1}') -f

Здесь вы можете указать регулярное выражение в поле <pattern>. print $1 печатает только первый столбец сопоставленного объекта. В нашем случае это имя pod.

Например:

kubectl logs -n kube-system $(kubectl get pod -n kube-system |  awk '/kube-proxy*/{print $1}') -f
0 голосов
/ 08 ноября 2018

Вы можете использовать некоторые трюки bash, чтобы получить:

Пример:

Получение журналов для модуля pod, начинающегося с шаблона имени core в пространстве имен kube-system.

kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' | grep core)

или даже просто:

kubectl logs --namespace=kube-system $(kubectl get pods -o=name --all-namespaces | grep core)

но в производстве вы должны использовать fluentbit для потоковой передачи журналов в ELK, а затем использовать фильтры в пользовательском интерфейсе kibana для получения журналов для каждого модуля pod / deploy / namespace и т. Д.

https://github.com/fluent/fluent-bit-kubernetes-logging

0 голосов
/ 09 ноября 2018

Наконец-то удалось выяснить решение. Это было бы несколько странно, но я бы просто использовал --field-selector=status.phase=Running и просто получил имя с флагом -o=name. Моя последняя команда будет выглядеть примерно так:

kubectl logs -f $(kubectl get pods --field-selector=status.phase=Running -o=name | awk '/asset/ {print $1;exit}')

Ссылки: Полевые селекторы

0 голосов
/ 08 ноября 2018

вы можете получить все результаты с помощью kubectl get pods, а grep может сделать все остальное.

[root@k8s-m1 ~]# kubectl get pods | grep httpd*-app
httpd-app-66cb7d499b-4nfl4   1/1     Running   0          6m39s
httpd-app-66cb7d499b-c2blq   1/1     Running   0          6m39s
httpd-app-66cb7d499b-dt4tr   1/1     Running   0          6m39s
...