Изучение набора инструментов с открытым исходным кодом для отладки Kubernetes — KoolKits
1 марта 2022 г.KoolKits (Kubernetes toolkits) — это образы отладочных контейнеров для Kubernetes, рассчитанные на конкретные языки и содержащие батарейки. На практике это то, что вы бы установили на свои рабочие модули, если бы застряли во время жесткого сеанса отладки в незнакомой оболочке.
Чтобы кратко рассказать об истории, обратите внимание, что эти образы контейнеров предназначены для использования с новой функцией отладки kubectl, который запускает Эфемерные контейнеры для интерактивного устранения неполадок. KoolKit будет извлечен отладкой kubectl, развернут как контейнер в вашем модуле и будет иметь доступ к тому же пространству имен процессов, что и исходный контейнер.
Поскольку производственные контейнеры обычно довольно пусты, использование KoolKit позволяет устранять неполадки с помощью мощных инструментов, а не полагаться на то, что остался позади из-за щедрости (или небрежности) того, кто изначально создавал производственный образ.
Инструменты в каждом KoolKit были тщательно отобраны, и вы можете узнать больше о мотивации всего этого проекта ниже.
Если вы просто хотите взглянуть на хорошие вещи, не стесняйтесь проверить полный проект [на GitHub] (https://github.com/lightrun-platform/koolkits).
Отладка Kubernetes — это сложно
Понять, что происходит внутри модуля Kubernetes, непросто.
Прежде всего, ваше приложение больше не является единым целым — оно состоит из нескольких модулей, реплицированных для горизонтального масштабирования, а иногда даже разбросанных по нескольким кластерам.
Кроме того, чтобы получить доступ к вашему приложению с помощью локальных инструментов (таких как отладчики), вам нужно иметь дело с надоедливыми сетевыми проблемами, такими как обнаружение и перенаправление портов, что замедляет использование таких инструментов.
А жемчужина распределенных систем — глобальное изменение состояния или полная остановка работающего модуля (например, при установке точки останова) может вызвать каскадные сбои в других частях вашей системы, что усугубит существующую проблему.
Мотивация KoolKits
Lightrun был создан с учетом Kubernetes — мы работаем с несколькими модулями, несколькими кластерами и даже несколькими облаками. Мы с самого начала поняли, что нанесение удара с помощью правильных инструментов является отличным источником силы для разработчика, занимающегося устранением неполадок, и мы решили, что найдем способ как-то отплатить сообществу, и именно так мы пришли к этой идее. для KoolKits.
Давайте углубимся на секунду, чтобы объяснить, почему KoolKits могут быть очень полезными:
Существует хорошо известная передовая практика Kubernetes, в котором говорится, что нужно создавать небольшие образы контейнеров. Это имеет смысл по нескольким причинам:
- Создание образа будет потреблять меньше ресурсов (также называемых часами CI)
- Загрузка образа займет меньше времени (кто вообще захочет платить за столько входов?)
- Меньше материала означает меньшую площадь поверхности, подверженной уязвимостям безопасности, в [мире, где даже ведение журналов без операций больше не является безопасным] (https://en.wikipedia.org/wiki/Log4Shell)
Существует также множество инструментов, которые помогут вам добиться этого, не делая слишком много тяжелой работы:
- Базовые образы [Alpine Linux] (https://hub.docker.com/_/alpine) очень маленькие.
- Образы DistroLess Docker делают еще один шаг и удаляют все, кроме среды выполнения.
- [Многоэтапные сборки Docker] (https://docs.docker.com/develop/develop-images/multistage-build/) помогают создавать тонкие окончательные производственные образы.
Проблема начинается, когда вы пытаетесь отладить то, что происходит внутри этих контейнеров. Используя небольшой производственный образ, вы отказываетесь от большого количества инструментов, которые бесценны при решении проблемы в вашем приложении.
Используя KoolKit, вы получаете преимущества небольшого производственного образа без ущерба для качественных инструментов — каждый KoolKit содержит тщательно подобранные инструменты для конкретной среды выполнения, которую он представляет, в дополнение к более общему набору инструментов для Linux. системы.
P.S. KoolKits был вдохновлен [kubespy] (https://github.com/huazhihao/kubespy) и [netshoot] (https://github.com/nicolaka/netshoot).
Соображения
При создании этих изображений мы приняли довольно много решений — некоторые из них, которые мы приняли во внимание, перечислены ниже.
Размер изображений
Образы KoolKits Docker имеют тенденцию работать, гм, довольно большие.
KoolKits предназначены для однократной загрузки, хранения в реестре Docker кластера, а затем немедленного развертывания по запросу в виде контейнеров. Поскольку они не предназначены для постоянного вытягивания, и поскольку они предназначены для наполнения вкусностями, это побочный эффект, который мы готовы терпеть.
Использование базовых образов Ubuntu
Одна из причин, по которой трудно создать действительно тонкий образ, связана с нашим решением использовать полную систему Ubuntu 20.04 в качестве основы для каждого KoolKit. В основном это произошло из-за нашего желания воспроизвести ту же среду, которую вы отлаживаете локально внутри своих кластеров.
Например, это означает, что вам не нужно возиться с альтернативами Alpine обычным пакетам Ubuntu, с которыми вы привыкли работать. На самом деле это означает, что у нас есть возможность включать инструменты, не имеющие версии Alpine, в каждый KoolKit.
Использование менеджеров языковых версий
Каждый KoolKit использует (где это возможно) диспетчер языковых версий вместо того, чтобы полагаться на дистрибутивы для конкретных языков. Это сделано для того, чтобы вы могли легко устанавливать более старые версии среды выполнения и чтобы вы могли по желанию переключаться между версиями среды выполнения (например, для получения определенных версий инструментов, которые существуют только для определенных версий среды выполнения), когда это необходимо.
Доступные наборы KoolKit
Каждая из папок в репозитории содержит Dockerfile позади KoolKit и краткое объяснение образа отладки. Все KoolKits основаны на ubuntu:20.04 реальным людям нужна база image=explore снаряды.
Список доступных KoolKits:
- [koolkit-jvm] (https://github.com/lightrun-platform/koolkits/blob/main/jvm/README.md) — AdoptOpenJDK 17.0.2 и сопутствующие инструменты (включая jabba для простого управления версиями и Maven 3.8). .4)
- koolkit-node — Node 16.13.1 и сопутствующие инструменты (включая nvm для простого управления версиями)
- [koolkit-python] (https://github.com/lightrun-platform/koolkits/blob/main/python/README.md) — Python 3.10.2 и сопутствующие инструменты (включая pyenv для удобного управления версиями)
Обратите внимание, что на самом деле вам не нужно создавать их самостоятельно — все KoolKits размещены публично на Docker Hub и доступны бесплатно.
KoolKits на подходе
- Совершенно новый KoolKit Go 1.17.7
- JVM KoolKit – поддержка jvm-profiler, jHiccup
Вклад
Мы были бы более чем рады добавить инструменты, которые мы пропустили, к любому изображению — просто [откройте запрос на вытягивание] (https://github.com/lightrun-platform/koolkits/pulls) или [проблема] (https:// github.com/lightrun-platform/koolkits/issues), чтобы предложить его.
- Впервые опубликовано [здесь] (https://lightrun.com/debugging/koolkits-debugging-toolkits-for-kubernetes/)*
Оригинал