Далеко не все серверные платформы, даже самые мощные и масштабируемые, удовлетворяют все потребности, как есть. Хотя Kubernetes и работает отлично сам по себе, ему может не хватить нужных частей для полноты. Вы всегда найдете частный случай, который игнорирует вашу нужду, или при котором Kubernetes не будет работать при установке по умолчанию — например, поддержка баз данных или работа CD.
Здесь и появляются дополнения, расширения и прочие ништяки для этого оркестратора контейнеров, поддерживаемые широчайшим сообществом. В этой статье будет 11 лучших вещей, найденных нами. Нам самим в Southbridge они очень даже интересны, и мы планируем разобраться с ними практически — на винтики и гаечки разобрать и посмотреть, что внутри. Часть из них прекрасно дополнит любой кластер Kubernetes, другие же помогут решить частные задачи, не реализованные в типовой поставке Kubernetes.
Gatekeeper: управление политиками
Проект Open Policy Agent (OPA) предоставляет возможность создания политик поверх облачных стеков приложений в Kubernetes, начиная ingress и заканчивая service mesh. Gatekeeper дает нативную для Kubernetes возможность принудительного применения политик в кластере автоматически, а также предоставляет проверку любых событий или ресурсов, нарушающих политику. Все это обрабатывается относительно новым механизмом Kubernetes, диспетчером допуска Webhooks, срабатывающим при изменении ресурсов. С помощью Gatekeeper политики OPA становятся еще одной частью состояния вашего кластера Kubernetes, не нуждаясь в постоянном надсмотре.
Gravity: Переносимые кластера Kubernetes
Если вы желаете выкатывать приложение в Kubernetes, то многие приложения имеют Helm chart, направляющий и автоматизирующий этот процесс. Но что, если вам захочется взять свой кластер Kubernetes «как есть», и раскатить его где-нибудь еще?
Gravity делает снимки состояния кластеров Kubernetes, их registry для образов контейнеров, а также запущенных приложений, называемых «пакетами приложений». Такой пакет, представляющий собой обычный файл .tar, может реплицировать кластер везде, где может работать Kubernetes.
Gravity также проверяет, что целевая инфраструктура ведет себя также, как и исходная, а также, что окружение Kubernetes на целевой — доступно. Платная версия Gravity также добавляет функции безопасности, включая RBAC и возможность синхронизации настроек безопасности по разным развертываниям кластеров.
Последняя основная версия, Gravity 7, может раскатить образ Gravity в существующий кластер Kubernetes, вместо разворачивания полностью нового кластера с образа. Gravity 7 также может работать с кластерами, установленными без использования образа Gravity. Также Gravity поддерживает SELinux, и нативно работает с шлюзом Teleport SSH.
Kaniko: Сборка контейнеров в кластере Kubernetes
Большинство образов контейнеров собираются на системах за пределами стека контейнеров. Однако иногда надо собрать образ внутри стека контейнеров, например где-то в работающем контейнере, или в кластере Kubernetes.
Kaniko осуществляет сборку контейнеров внутри контейнерного окружения, но без зависимости в работе от сервиса контейнеризации, например Docker. Вместо этого Kaniko извлекает файловую систему из базового образа, выполняет все сборочные команды в пространстве пользователя поверх извлеченной файловой системы, делая снимок файловой системы после каждой команды.
Примечание: Kaniko на данный момент (май 2020 года, прим. переводчика) не может собирать контейнеры Windows.
Kubecost: Параметры стоимости запуска Kubernetes
Большинство инструментов администрирования Kubernetes нацелены на простоту использования, мониторинг, понимание поведения внутри pod, и т.п. Но что насчет наблюдения за стоимостью — в рублях и копейках — связанной с запуском Kubernetes?
Kubecost обрабатывает параметры Kubernetes в режиме реального времени, что приводит к поступлению информации об актуальной стоимости от запущенных кластеров у основных поставщиков облачных услуг, отображаемых на панели с ежемесячной стоимостью каждого кластера. Цены за оперативную память, процессорное время, GPU и дисковую подсистему разбиты по компонентам Kubernetes (контейнер, pod, сервис, и т.п.)
Kubecost также отслеживает стоимость внекластерных ресурсов, например Amazon S3 buckets, хотя она ограничена AWS. Данные о стоимости могут быть отправлены в Prometheus, так что вы можете использовать их для изменения поведения кластера программным путем.
Kubecost бесплатен для использования, если вам достаточно данных в журналах за 15 дней. Для дополнительных функций цены начинаются с 199$ ежемесячно за мониторинг 50 узлов.
KubeDB: Запуск боевых баз данных в Kubernetes
Базы данных также достаточно сложно запускать эффектно в Kubernetes. Вы найдете операторы Kubernetes для MySQL, PostgreSQL, MongoDB и Redis, но у всех них есть недостатки. Также типовой набор функций Kubernetes не позволяет напрямую решить большинство определенных проблемы с базами данных.
KubeDB помогает вам создать свои операторы Kubernetes для управления базами данных. Запуск резервного копирования, клонирование, мониторинг, создание снимков и декларативное создание баз — его составные части. Обратите внимание, что поддержка функций зависит от базы данных. К примеру, создание кластера работает для PostgreSQL, но не для MySQL (уже есть, как верно подметил dnbstd, прим. переводчика).
Kube-monkey: Chaos Monkey для Kubernetes
Наиболее безошибочным способом стресс-тестирования считаются случайные поломки. Эта теория лежит в основе Chaos Monkey от Netflix, хаотичного инженерного инструмента, который случайным образом выключает виртуальные машины и контейнеры производственной среды, чтобы «стимулировать» разработчиков создавать более устойчивые системы. Kube-monkey — реализация той же базовой теории стресс-тестирования для кластеров Kubernetes. Он работает, убивая случайным образом модули в кластере, назначаемые вами, а также может быть настроен на работу в определенный интервал времени.
Kubernetes Ingress Controller для AWS
Kubernetes предоставляет внешний балансировщик нагрузки и сетевые сервисы кластера через сервис, называемый Ingress AWS предоставляет функции по балансировке нагрузки, но не связывает их автоматически с такими же возможностями Kubernetes. Kubernetes Ingress Controller for AWS закрывает этот пробел.
Он автоматически управляет ресурсами AWS для каждого объекта ingress в кластере, создавая балансировщики нагрузки для новых ресурсов ingress, и удаляя балансировщики при удалении ресурсов. Он использует CloudFormation чтобы убедиться, что состояние кластера остается целостным. Он также поддерживает настройки CloudWatch Alarm и автоматически управляет другими элементами, используемыми в кластере, например сертификатами SSL и EC2 Auto Scaling Groups.
Kubespray: Автоматическая установка Kubernetes
Kubespray автоматизирует установку готового к промышленному использованию кластера Kubernetes, начиная с установки на «железных» серверах, и заканчивая основными публичными облаками. Он использует Ansible (Vagrant — дополнительно) для запуска развертывания и создания высокодоступного кластера с нуля с выбранным вами сетевым дополнением (например Flannel, Calico и прочие) на выбранном вами популярном дистрибутиве Linux при установке на «железные» серверы.
Skaffold: Итеративная разработка для Kubernetes
Skaffold — один из инструментов Google, применяемы для огранизации CD приложений в Kubernetes. Как только вы делаете изменения исходного кода — skaffold автоматически это определяет, запускает сборку и развертывание, предупреждает вас, если есть какие-либо ошибки. Skaffold запускается полностью на стороне клиента, так что могут быть небольшие нюансы с установкой или обновлением. Он может использоваться с существующими конвейерами CICD, а также взаимодействовать с некоторыми внешними сборочными инструментами, главным образом с Bazel от Google.
Teresa: Простейший PaaS на Kubernetes
Teresa это система развертывания приложений, запускающая простейший PaaS поверх Kubernetes. Пользователи, разбитые по командам, могут развертывать и управлять принадлежащими им приложениями. Это немного упрощает работу людям, доверяющим этому приложению, и не желающим иметь дело с Kubernetes и всеми его сложностями.
Tilt: Потоковая рассылка обновлений контейнеров в кластера Kubernetes
Tilt, разработанный Windmill Engineering, наблюдает за изменениями разных файлов Dockerfile, а затем постепенно развертывает соответствующие контейнеры в кластере Kubernetes. По сути он позволяет проводить обновление боевого кластера в режиме реального времени просто обновляя файлы Dockerfile. Tilt выполняет сборку внутри кластера, исходный код — все что нужно изменять. Вы также можете сделать слепок состояния кластера и зафиксировать условия срабатывания ошибок прямо из Tilt, чтобы поделиться ими с членами команды для отладки.
P.S. Все эти инструменты мы неоднократно в Southbridge прощупали нашими любопытными ручками. Чтобы представить реальные практики уже (надеюсь!) на офлайн-интенсивах в февраля. Kubernetes База 8–10 февраля 2021. И Kubernetes Мега 12–14 февраля. Честно, мы тоже соскучились по тёплой и энергетически заряжённой атмосфере офлайн-обучения. Какие бы продвинутыми технологии ни были, они не заменят живого человеческого общения и особой атмосферы, когда собираются единомышленники.