Рубрики
Uncategorized

Глубокое погружение в проверку схемы Kubernetes

Зачем запускать проверку схемы? Как вы обеспечиваете стабильность ваших кластеров Kubernetes? Хо … Помечено Kubernetes, DevOps, Tuperial, Gitops.

Зачем запускать проверку схемы?

Как вы обеспечиваете стабильность ваших кластеров Kubernetes? Как узнать, что ваши манифесты синтаксически действительны? Вы уверены, что у вас нет недействительных типов данных? Отсутствуют ли обязательные поля?

Чаще всего мы узнаем об этих неправильных конфигурациях только в худшее время — при попытке развернуть новые манифесты.

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

TL; DR

Запуск проверки проверки схемы важен, и чем раньше, тем лучше.

Если все машины (среда локальных разработчиков, CI и т. Д.) Имеют доступ к вашему кластеру Kubernetes, запустите Kubectl-Dry-run В режиме сервера в каждом изменении кода. Если это невозможно, и вы хотите выполнить тесты на проверку схемы в автономном режиме, используйте KubeConform вместе с инструментом обеспечения соблюдения политики, чтобы иметь оптимальное покрытие проверки.

Доступные инструменты

Проверка состояния Каубернета, проявления, может показаться тривиальной задачей, потому что CLI Kubernetes (Kubectl) обладает способностью проверять ресурсы, прежде чем они применяются к кластеру. Вы можете проверить схему, используя сухой бег Flag ( -Dry-Run = Client/Server ) При указании kubectl create или kubectl применить Команды, которые будут выполнять проверку без применения ресурсов Kubernetes к кластеру.

Но я могу заверить вас, что это на самом деле сложнее. Для получения схемы для проверки ресурсов требуется кластер Kubernetes. Таким образом, при включении манифестной проверки в процесс CI вы также должны управлять подключением и учетными данными для выполнения проверки. Это становится еще более сложным при работе с несколькими микросервисами в нескольких средах (Prod, Dev и т. Д.).

Кубеваль и KubeConform являются инструментами командной строки, которые были разработаны с намерением проверить канифесты Kubernetes без требования иметь управляемую среду Kubernetes. Поскольку KubeConform был вдохновлен Кубевалом, они работают аналогичным образом-проверка выполняется против предварительно генерируемых схем JSON, которые создаются из спецификаций OpenAPI ( swagger.json ) для каждой конкретной версии Kubernetes. Все, что осталось запустить Тесты проверки схемы состоит в том, чтобы указать инструмент, исполняемый на один манифест, каталог или шаблон.

Сравнение

  • Кубеваль
  • KubeConform
  • Kubectl Dry-Run в режиме «клиента»
  • Kubectl Dry-Run в режиме «сервера»

Теперь, когда мы рассмотрели инструменты, которые доступны для проверки схемы Kubernetes, давайте сравним некоторые основные способности (охват неправильных конфигураций, тест на скорость, поддержка различных версий, поддержка CRD и документы).

Неправильные конфигурации охват1

Я надел свою шляпу QA и сгенерировал некоторые (основные) файлы Kubernetes с некоторыми Предполагаемые неправильные конфигурации , а затем запустил его против всех четырех инструментов 2 :

Университет API ✅ Пойманный ✅ Пойманный ✅ Пойманный
Неверная добрая ценность ✅ Пойманный ❌ Не поймал 🚧 Пойман3
Неверное значение метки ❌ Не поймал ❌ Не поймал ✅ Пойманный
Неверный тип протокола ✅ Пойманный ❌ Не поймал ✅ Пойманный
Неверный ключ спецификации ✅ Пойманный ✅ Пойманный ✅ Пойманный
Отсутствует изображение ❌ Не поймал ❌ Не поймал ✅ Пойманный
Неправильное углубление K8s ✅ Пойманный ✅ Пойманный ✅ Пойманный

Заключение: запуск сухого запуска Kubectl в режиме «сервера» поймал все неправильные конфигурации, в то время как Kubeval/Kubeconform пропустил два из них. Также интересно увидеть, что запуск сухого запуска Kubectl в режиме «клиента» почти бесполезен, потому что ему не хватает очевидных неправильных сборов, а также требует подключения к бегущей среде Kubernetes.

Контрольный тест на скорость

Я использовал гипертон Чтобы сравнить время выполнения каждого инструмента 4 Анкет Сначала я запустил это против (1) Все файлы с неправильной фигурацией (всего семь файлов), а затем я запустил их против (2) 100 файлов Kubernetes (все файлы содержат одинаковую конфигурацию).

(1) Результаты для запуска инструментов против семи файлов с различными схемами Kubernetes схемы:

(2) Результаты для запуска инструментов против 100 файлов с действительными схемами Kubernetes:

Вывод: мы видим это, пока KubeConform (#1), Кубеваль (#2) и Kubectl (#3) предоставляют быстрые результаты на обоих тестах, а Kubectl (#4) работает медленнее, особенно когда ему нужно оценить 100 файлов — 60 секунд для получения результата все еще остается хорошим результатом, на мой взгляд.

Поддержка версий Kubernetes

И Kubeval, и Kubeconform принимают версию схемы Kubernetes в качестве флага. Хотя оба инструмента похожи (как упоминалось, KubeConFrom основан на Kubeval), одно из ключевых различий между ними заключается в том, что каждый инструмент опирается на свой собственный набор предварительно генерируемых схем JSON:

На сегодняшний день (май 2021 г.) Кубевал только поддерживает версии Kubernetes схемы до 1,18,1, в то время как KubeConform поддерживает последнюю схему Kubernetes, доступную сегодня — 1.21.0. С Kubectl это немного сложнее. Я не знаю, какая версия Kubectl представила сухой запуск, но я попробовал его с Kubernetes версии 1.16.0, и она все еще работала, поэтому я знаю, что он доступен в версиях Kubernetes 1.16.0-1.18.0.

Разнообразие поддержки схем Kubernetes особенно важно, если вы хотите перейти на новую версию Kubernetes. С Kubeval и KubeConform вы можете установить версию и начать процесс оценки того, какие конфигурации должны быть изменены, чтобы поддержать обновление кластера.

Заключение: тот факт, что kubeconform имеет все схемы для всех доступных версий Kubernetes, а также не требует настройки Minikube (как это делает Kubectl) — делает его превосходным инструментом при сравнении этих возможностей с его альтернативами.

Другие вещи, которые следует учитывать

Пользовательское определение ресурса (CRD) Поддержка Как Kubectl Dry-Run, так и KubeConform Support Presource Type CRD , в то время как Кубевал нет. Согласно Kubeval Docs, вы можете передать флаг Kubeval, чтобы игнорировать отсутствующие схемы, поэтому он не потерпит неудачу при тестировании куча манифестов, для которых только некоторые являются CRD типа ресурсов.

Документация Kubeval — более популярный проект, чем KubeConform, и, следовательно, его сообщество и Документация более обширны. Kubeconform нет официальных документов Но у него есть хорошо написанный Readme Файл, который довольно хорошо объясняет его возможности. Интересно, что, хотя нативные инструменты Kubernetes, такие как Kubectl, обычно хорошо документированы, было действительно трудно найти необходимую информацию, необходимую, чтобы понять, как сухой бег Флаг действительно работает и его ограничения.

Заключение: хотя он не так известен, как Кубеваль, поддержка CRD и достоверная документация делают KubeConform победителем, по моему мнению.

Сравнение сравнения

+/- Неправильное покрытие охват +/- +
+/- Контрольный тест на скорость + +/-
Поддержка версий Kubernetes + +/- +/-
Поддержка CRD + + +
+ Документация +/-

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

Стратегии для проверки схемы Kubernetes с использованием этих инструментов

  • ⬅ Сдвиг лечь: когда это возможно, лучшая настройка-если вы можете запустить kubectl При каждом изменении кода, но вы, вероятно, не можете сделать это, потому что вы не можете позволить каждому разработчику или машине CI в вашей организации подключиться к вашему кластеру. Таким образом, вторая лучшая попытка-запустить KubeConform.
  • 🚔 Поскольку KubeConform не охватывает все общие неправильные неправильные процессы, рекомендуется запустить его с помощью инструмента по обеспечению соблюдения политики при каждом изменении кода, чтобы заполнить разрыв в покрытии.
  • 💸 Купить против сборки: если вам нравится Инженерные накладные расходы , тогда kubeconform + Conftest это отличное сочетание инструментов, чтобы получить хорошее покрытие. В качестве альтернативы, есть инструменты, которые могут предоставить вам необычный опыт, чтобы помочь вам сэкономить время и ресурсы, такие как Datree 5 (чья проверка схемы оснащена KubeConform).
  • 🚀 Во время шага компакт -диска не должно быть проблемой иметь связь с вашим кластером, поэтому вы всегда должны запускать kubectl Перед развертыванием ваших новых изменений кода.
  • 👯 Еще один вариант использования Kubectl Dry-Run в режиме сервера, не имея подключения к вашей среде Kubernetes,-это запустить Minikube + Kubectl . Недостатком этого взлома является то, что он также должен настроить кластер Minikube, такой как Prod (те же объемы, пространство имен и т. Д.), Или вы столкнетесь с ошибками при попытке подтвердить манифесты Kubernetes.

БЛАГОДАРНОСТЬ

Спасибо Янн Хамон Для создания kubeconform — это круто! Эта статья была бы невозможна без вас. Спасибо за ваше руководство.

  1. Все проверки схемы, выполненные против Kubernetes версии 1.18.0 ↩

  2. Поскольку kubeconform основан на Kubeval, они дают тот же результат и запускают их против файлов с помощью неправильных настроек. Kubectl — это один инструмент, но каждый режим (клиент или сервер) дает другой результат, как вы можете видеть из таблицы ↩

  3. Режим сервера не помечал файл как действительный (выходите код 1), но сообщение об ошибке неверно: Kind = pod не поддерживает сухой бег

  4. Все тесты Bender, выполненные на моем MacBook Pro с четырехъядерным процессором Intel Core I7 2,3 ГГц ↩

  5. Отказ от ответственности — самореклам здесь:) ↩

Оригинал: «https://dev.to/datreeio/a-deep-dive-into-kubernetes-schema-validation-39ll»