#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