Kubeconform: проверка манифестов до Kubernetes
Добавлено 2026-10-11. Нужны Helm, Kubeconform и версия Kubernetes целевого окружения.
Проблема
Helm успешно отрендерил YAML, но в Deployment ошибочно написано replica или строка попала в числовое поле. Ошибка обнаруживается только во время применения.
Решение
Проверять итоговые манифесты по JSON Schema соответствующей версии Kubernetes. Режим -strict обнаруживает неизвестные поля и дубли ключей. Проверяется результат Helm/Kustomize, а не только исходные шаблоны.
Пример
Запуск из репозитория с chart в ./chart. K8S_VERSION задать явно, например в переменной CI, по версии кластера и доступной схеме; не оставлять значение по умолчанию master.
#!/usr/bin/env bash
set -euo pipefail
: "${K8S_VERSION:?Укажите версию схемы целевого Kubernetes, формат X.Y.Z}"
mkdir -p build
helm template devops-kb ./chart \
--kube-version "$K8S_VERSION" > build/rendered.yaml
test -s build/rendered.yaml
kubeconform -strict -summary \
-kubernetes-version "$K8S_VERSION" build/rendered.yaml
Результат приёмки: есть проверенные ресурсы, нет Invalid, Errors и неожиданных Skipped. Не добавлять -ignore-missing-schemas как универсальное исправление: так проверка может пропустить именно ваши custom resources. Для них подключить схемы нужной версии CRD через -schema-location. Для воспроизводимого CI зафиксировать версии инструмента, chart и набора схем.
Проверка API-сервером — следующий отдельный шаг с явно выбранным контекстом:
: "${KUBE_CONTEXT:?Укажите контекст тестового кластера}"
kubectl --context "$KUBE_CONTEXT" apply \
--dry-run=server -f build/rendered.yaml
Server-side dry run требует доступа к API и проверяет правила, которых нет в JSON Schema, включая admission. Ни одна из этих проверок не доказывает, что Pod запустится, образ загрузится и приложение выдержит нагрузку.
Когда применять
В CI Kubernetes-репозитория перед GitOps merge. Для текущего сайта на Docker Compose инструмент не требуется; карточка нужна для кластерных задач.
Источник
Как применить у себя
- Проверить один chart со всеми используемыми values, учитывая namespace и API-версии.
- Добавить schemas для custom resources без массового пропуска неизвестных типов.
- В тестовой копии Deployment заменить
replicasнаreplica; проверка должна завершиться ошибкой. - Сохранить отчёт CI и после подключения обязательной проверки отметить «Изучено».