crd-schema-publisher: документация CRD из кластера

Извлекает схемы CRD из Kubernetes или YAML-файлов, конвертирует схемы встроенных ресурсов Kubernetes из /openapi/v2 и публикует документационный сайт с поиском и интерактивными страницами схем.

Установка crd-schema-publisher, извлечение схем CRD и просмотр сгенерированного сайта

Зачем это нужно

Статические каталоги CRD устаревают, упускают внутренние CRD и зависят от внешней инфраструктуры. crd-schema-publisher публикует схемы прямо из вашего кластера и умеет отдавать или синхронизировать их туда, где вы размещаете статические файлы.

  • Всегда актуален для установленных CRD, внутренних CRD и опциональных встроенных ресурсов Kubernetes.

  • Результат размещается самостоятельно: Cloudflare Pages, локальный сервер, S3-совместимое хранилище, git или любой статический веб-сервер.

  • Единственный статический бинарный файл в дистрибутивном безрутовом контейнере (distroless nonroot container).

  • Режим наблюдения (watch mode) уровня контроллера: информеры (informers), выбор лидера (leader election), отложенные обновления (debounced refreshes), пробы работоспособности (health probes) и метрики.

Быстрый старт

Установите Helm-чарт в режиме контроллера:

helm install crd-schema-publisher oci://ghcr.io/sholdee/charts/crd-schema-publisher \
  --namespace crd-schema-publisher \
  --create-namespace \
  --set existingSecret.name=crd-schema-publisher-cloudflare

Установите автономный CLI:

curl -fsSL https://crdsp.shold.io | bash

Или установите через mise с бэкендом aqua:

mise use aqua:sholdee/crd-schema-publisher@latest

Извлеките схемы из контекста kubeconfig:

crd-schema-publisher extract -o ./schemas

Конвертируйте YAML с CRD без подключения к кластеру:

crd-schema-publisher convert -f crd.yaml -o ./schemas

Извлеките CRD и встроенные ресурсы Kubernetes напрямую из кластера:

crd-schema-publisher extract -o ./schemas --include-builtins

Использование опубликованных схем

Опубликованные схемы доступны по адресу https://<ваш-домен>/<apigroup>/<kind>_<version>.json, например cert-manager.io/certificate_v1.json или core/pod_v1.json.

# yaml-language-server: $schema=https://kube-schemas.example.com/cert-manager.io/certificate_v1.json
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: example

Чтобы охватить все манифесты одним правилом, укажите в yaml.schemas файл all.json из корня сайта. Он сопоставляет каждый документ со схемой нужного вида по полям apiVersion и kind.

© 2026 meganuke