Найти тему
DevOps Qazaqstan

5 главных сложностей отладки приложений в Kubernetes

Оглавление

Огромный успех Kubernetes можно объяснить многими факторами. Многие публикации подробно освещают эти причины, и, если вы читаете это, есть большая вероятность, что вы с ними согласны. Стоит сказать, что одна из главных причин внедрения K8S — это не его простота. Конечно, Kubernetes упростил развертывание больших масштабируемых приложений, но управлять Kubernetes и устранять неполадки может быть довольно сложно.

Кстати, вы можете заказать установку и внедрение Kubernetes от нашей компании. Мы управляем более 500+ кластерами. А сейчас вот пять основных сложностей при отладке приложений в Kubernetes:

1. Воссоздание среды на вашем локальном компьютере

Обычный способ отладки приложений разработчиками ПО заключается в воссоздании сценария на их локальном компьютере, чтобы они могли проверять продукт, не влияя на production. Но при работе с Kubernetes и микросервисами часто создаются сложные среды, содержащие большое количество образов, серверов и конфигураций. Во многих случаях практически невозможно воссоздать среду локально. Поэтому даже если вы думаете, что успешно отладили приложение локально, на практике реальность может сильно отличаться.

2. Работа с Kubernetes требует больших ресурсов

Запуск Kubernetes на вашем компьютере очень требователен к ресурсам, поскольку для этого требуется несколько обязательных компонентов. Например, для каждой конкретной службы, которую вы хотите отладить, вам необходимо локально запустить всю поддерживающую ее среду, включая Docker Desktop или любой другой слой управления. Кроме того, вы должны использовать Docker Compose для локального запуска кода и получения всего образа Docker. Это очень трудоемкий процесс. Таким образом, даже если у вас есть MacBook Pro последнего поколения, запуск Kubernetes может реально повлиять на производительность машины.

3. Отладка с использованием функции kubectl неудобна

В 2021 году Kubernetes представила отладку kubectl. Эта функция работает в тандеме с эфемерными контейнерами (бета-версия которых перешла в ноябре), которые представляют собой временные контейнеры, которые вы запускаете только для проверки работающих модулей. Предполагается, что это упрощает устранение неполадок и делает возможным воспроизведение ошибок. До этого вы вообще не могли раскручивать новые контейнеры в запущенных подах.

Помимо громоздкости, он позволяет видеть только информацию об ОС, такую как переменные среды. Инженерамчасто приходится углубляться в слой приложения, видеть обрабатываемые там данные и понимать, как работает код и как устроена его основа. Если это то, что вам нужно, вам придется добавить новую строку в логах, перестроить контейнер и заного его развернуть и (совет!) также “запушить” новую версию контейнера. Если этого не сделать, все сломается.

4. Отладка в Kubernetes зависит от логов

Когда вы выполняете отладку в Kubernetes, вы можете просматривать только те логи, которые запущены в данный момент. Это означает, что вы должны полагаться на то, что люди делали в прошлом, и доверять тому, что журналы были правильно организованы и проанализированы. В противном случае вам придется повторно развернуть все приложение для правильного применения логов, что занимает много времени и требует повышенных разрешений в рабочей среде.

5. Трудно отлаживать в масштабе

Абстракция — это и дар и проклятие. Когда что-то идет не так, особенно в масштабных проектах, может быть сложно проникнуть внутрь Kubernetes, чтобы понять проблему. Иногда, даже в пределах одного кластера, проблема может возникать на одном узле, а не на другом; определить местоположение проблемы очень сложно. Воспроизведение ошибки — это искусство, воспроизвести миллионы запросов непросто. Часто для воспроизведения сценария требуется несколько разных инструментов, и может быть невозможно выяснить, какой контейнер, модуль или ресурс первым сломался бы при такой большой активности.

Решение?

Правда в том, что универсального решения не существует. Тем не менее, вот несколько быстрых советов, которые могут пригодиться всем, кто интересуется использованием Kubernetes (и его отладкой):

Используйте Open Source

Есть очень полезный Open Source веб-сайт ValidKube, который должен посетить каждый разработчик Kubernetes. Он объединяет другие популярные Open Source проекты в экосистеме Kubernetes, такие как kubeval, kubectl-neat, Kubescout и trivy, которые могут помочь вам очищать, проверять и защищать YAML Kubernetes, избавляя вас от множества головных болей при отладке в будущем.

Внедрите динамический мониторинг

Если вы дочитали до этого места, я думаю, можно с уверенностью предположить, что вы уже имеете базовый мониторинг на вашем проекте. Учитывая очень динамичный и эфемерный характер Kubernetes, возможно, стоит подумать о инструментах динамического мониторинга, которые дают вам возможность извлекать данные на уровне кода на лету без перезапуска и повторного развертывания приложения. Это даст вам возможность добавить строку лога задним числом в область, которую вы хотите изучить при устранении неполадок, даже если вы никогда не тратили время на запись строки логов в своем коде заранее.

Контролируйте уровень детализации журнала логов

В идеальном мире разработчикам вообще не нужно было бы тратить свое время на написание логов. Они могли бы сосредоточиться на создании интересных функций, добавлении ценности для бизнеса и удовлетворении запросов клиентов. Но ведение логов по-прежнему является необходимым злом, и всем разработчикам следует обратить внимание на технологии, такие как ведение логов в реальном времени, которые позволяют корректировать детализацию этих журналов на лету, чтобы разработчики не тонули в информационном шуме.

Kubernetes становится сердцем облачной экосистемы. Использование лучших инструментов и методов для отладки приложений Kubernetes значительно облегчит вашу жизнь. Так что проверяйте проекты с открытым исходным кодом, изучайте инструменты динамической наблюдаемости и контролируйте уровень детализации логов!