Журналы событий Kubernetes

#kubernetes

#kubernetes

Вопрос:

В рамках отладки мне нужно отслеживать такие события, как создание и удаление pod. в моей настройке kubernetes я использую уровень ведения журнала 5.

Сервер api Kube, планировщик, контроллер и т.д. запущены на главном узле, а на вспомогательных узлах запущены kubelet и docker.

Я использую journalctl для получения журналов K8s на главном узле, а также на рабочем узле. На рабочем узле я могу видеть журналы из Docker и Kubelet. Эти журналы содержат события, как я и ожидал, при создании и уничтожении модулей.

Однако на главном узле я не вижу никаких соответствующих журналов, которые могут указывать на обработку запроса на создание или удаление модуля.

какие другие журналы или метод я могу использовать для получения таких журналов из основных компонентов Kubernetes (сервер API, контроллер, планировщик и т. Д.)?

я проверил журналы с сервера API, контроллера, планировщика и модулей etcd; похоже, у них нет такой информации.

Спасибо

Ответ №1:

Журналы системных компонентов:

Существует два типа системных компонентов:

  • те, которые выполняются в контейнере

  • и те, которые не выполняются в контейнере.

Например:

Планировщик Kubernetes и kube-proxy выполняются в контейнере

Среда выполнения kubelet и контейнера, например Docker, не выполняются в контейнерах.

На машинах с systemd среда выполнения kubelet и контейнера записывает данные в journald . Если systemd отсутствует, они записывают в .файлы журналов в каталоге /var/log. Системные компоненты внутри контейнеров всегда записывают данные в каталог /var/log, минуя механизм ведения журнала по умолчанию. Они используют библиотеку ведения журнала klog.

Журналы основных компонентов:

Получите их из контейнеров, запущенных на главных узлах.

 $ 
$ docker ps | grep apiserver
d6af65a248f1        af20925d51a3                 "kube-apiserver --ad…"   2 weeks ago         Up 2 weeks                              k8s_kube-apiserver_kube-apiserver-minikube_kube-system_177a3eb80503eddadcdf8ec0423d04b9_0
5f0e6b33a29f        k8s.gcr.io/pause-amd64:3.1   "/pause"                 2 weeks ago         Up 2 weeks                              k8s_POD_kube-apiserver-minikube_kube-system_177a3eb80503eddadcdf8ec0423d04b9_0
$ 
$ 
$ docker logs -f d6a  
  

Но весь этот подход к ведению журнала предназначен только для тестирования, вы должны передавать все журналы (журналы приложений, журналы контейнеров, журналы уровня кластера, все) в центральную систему ведения журнала, такую как ELK или EFK.

Комментарии:

1. Спасибо, Ijaz, я последовал вашим указаниям, и внутри журналов контейнера kube apiserver я не нахожу никаких соответствующих сообщений журнала, которые указывают на создание или удаление pod .. вторая проблема, которую я вижу, заключается в том, что все временные метки соответствуют часовому поясу UTC. Есть идеи, как я могу изменить их на PST?

2. вам необходимо настроить уровень ведения журнала для api-сервера, api servr имеет множество параметров конфигурации ведения журнала, которые вам нужно сначала включить.

3. kubernetes.io/docs/reference/command-line-tools-reference/…

4. Еще одна вещь, информация, которую вы ищете, возможно, в журнале аудита сервера api, поэтому вы просто выполняете запрос в контейнер сервера api и просматриваете журналы аудита

5. я смог добавить сокращенные записи журнала в исходный код, и эти журналы, кроме подробных журналов, видны через docker logs -f