Извлекает схемы CRD из Kubernetes или YAML-файлов, конвертирует схемы встроенных ресурсов Kubernetes из /openapi/v2 и публикует документационный сайт с поиском и интерактивными страницами схем.
Зачем это нужно
Статические каталоги 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.