Перейти к содержимому
100% конфиденциальность — файлы остаются на вашем устройстве
>_
Русский

Валидатор YAML Kubernetes

Вставьте один или несколько манифестов Kubernetes (разделённых ---) и проверьте их по настоящей схеме перед kubectl apply.

Перетащите файл .yaml/.yml сюда или вставьте текст манифеста выше.

Манифесты, разделённые "---", проверяются как отдельные документы.

Дополнительные параметры

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

Вставьте манифест Kubernetes выше (или загрузите пример), и здесь появятся результаты проверки.

Как поймать ошибки в манифестах Kubernetes раньше kubectl

Отклонённый `kubectl apply` — обычно первый момент, когда ошибка в манифесте Kubernetes становится видна, а к этому времени вы, как правило, уже посреди деплоя и смотрите на сообщение с путём из проверки JSON Schema (`spec.template.spec.containers[0].image: Required value`), который не сразу связывается с YAML-файлом, который вы только что правили. Если поймать такую ошибку раньше, с подсвеченной точной строкой, исправление займёт пять секунд вместо переключения контекста.

У синтаксиса YAML есть острые углы, которых нет в большинстве других форматов конфигурации: отступы значимы, а непоследовательные табы и пробелы иногда молча дают другую (неверную) структуру вместо ошибки; разделители документов `---` легко потерять в длинном файле с несколькими ресурсами; а лишний уровень вложенности выглядит как корректный YAML, но для Kubernetes означает совсем другое. Этот инструмент разбирает YAML библиотекой, которая сохраняет информацию о позициях в исходном тексте, поэтому синтаксическая проблема указывается в той строке, где она на самом деле возникла, а не «где-то в этом файле на 200 строк».

Устаревшие apiVersion — ловушка с замедленным действием: Deployment с `extensions/v1beta1`, StatefulSet и DaemonSet с `apps/v1beta1`/`apps/v1beta2` и Ingress с `networking.k8s.io/v1beta1` — всё это по-прежнему корректный YAML и даже работало на старых кластерах — пока кластер не обновят до версии, где Kubernetes наконец полностью удаляет старую группу API; тогда каждый манифест с ней перестаёт применяться без всякого предупреждения. Если обнаружить такое при редактировании (с подсказкой правильного apiVersion), не придётся узнавать об этом во время обновления кластера.

Проверка по настоящей спецификации OpenAPI Kubernetes ловит остальное: поле `replicas`, оказавшееся строкой в кавычках вместо числа, `containerPort` вне допустимого диапазона, обязательное поле вроде `spec.selector` у Deployment, потерянное при копировании между манифестами. Это не синтаксические ошибки YAML — файл разбирается без проблем, — поэтому именно отдельная проверка по схеме находит то, что быстрый просмотр глазами обычно пропускает.

Часто задаваемые вопросы

Заменяет ли это `kubectl apply --dry-run` или `kubeconform`?

Нет. `kubectl apply --dry-run=server` — единственная проверка на сервере API вашего реального кластера (включая установленные в нём CRD и admission-вебхуки), а `kubeconform`/`kubeval` — зрелые CLI-инструменты для CI-конвейеров. Здесь проверяется тот же класс ошибок — синтаксис YAML, структура по схеме, устаревшие apiVersion — но прямо из вкладки браузера: до настройки `kubectl` или при просмотре манифеста, присланного кем-то другим.

Откуда берутся схемы?

Из `yannh/kubernetes-json-schema` — поддерживаемого сообществом и автоматически обновляемого зеркала JSON Schema, полученных из собственной спецификации OpenAPI Kubernetes. Они загружаются по требованию с публичного CDN для выбранной вами версии Kubernetes. Ничего из вашего манифеста никуда не отправляется — скачивается только сам (публичный, версионированный) файл схемы, один и тот же для всех пользователей, проверяющих этот kind/версию.

Почему только 10 видов ресурсов?

Deployment, Service, Ingress, ConfigMap, Secret, StatefulSet, DaemonSet, Job, CronJob и PersistentVolumeClaim покрывают подавляющее большинство манифестов, написанных вручную. Для остальных видов по-прежнему выполняется полная проверка синтаксиса YAML и поиск устаревших apiVersion — только проверки структуры по схеме для них пока нет.

Покидает ли мой YAML браузер?

Нет. Разбор и проверка по схеме выполняются обычным JavaScript в этой вкладке — единственный сетевой запрос, который делает инструмент, — загрузка публичного файла JSON Schema для выбранного вида ресурса и версии Kubernetes, но никогда не содержимое вашего манифеста.

Похожие инструменты