Перейти к содержанию

Kubeconform: проверка манифестов до Kubernetes

Kubernetes · CI
Не изучено

Добавлено 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 инструмент не требуется; карточка нужна для кластерных задач.

Источник

Как применить у себя

  1. Проверить один chart со всеми используемыми values, учитывая namespace и API-версии.
  2. Добавить schemas для custom resources без массового пропуска неизвестных типов.
  3. В тестовой копии Deployment заменить replicas на replica; проверка должна завершиться ошибкой.
  4. Сохранить отчёт CI и после подключения обязательной проверки отметить «Изучено».