Deployment YAML 에서 replicas: "3", containerPort: "80" 처럼 정수여야 할 값이 따옴표로 문자열이 되는 실수를 배포 전에 잡는 방법이다. 과거 표준이던 kubeval 은 유지보수가 끝났고 후속 도구로 kubeconform 이 권장된다(2026-05 기준 최신 안정 v0.7.0). kubeconform 은 Kubernetes JSON 스키마로 검증하므로 spec.replicas: Invalid type. Expected: [integer,null], given: string 류의 타입 오류를 정확히 검출한다.
# macOS
brew install kubeconform
# Linux
curl -L https://github.com/yannh/kubeconform/releases/latest/download/kubeconform-linux-amd64.tar.gz \
| tar xz && sudo mv kubeconform /usr/local/bin/
Windows 는 릴리스 페이지의 kubeconform-windows-amd64.zip 을 받는다.
kubeconform -summary deployment.yaml
kubeconform -strict -kubernetes-version 1.30.0 manifests/ # 미정의 필드 거부 + 버전 고정
kubeconform -output json deployment.yaml # CI 파싱용
helm template . | kubeconform - # stdin
CRD 는 기본 스키마에 없으므로 -schema-location 으로 datree CRDs-catalog 를 추가하거나 -ignore-missing-schemas 로 건너뛴다.
kubeconform -schema-location default \
-schema-location 'https://raw.githubusercontent.com/datreeio/CRDs-catalog/main/{{.Group}}/{{.ResourceKind}}_{{.ResourceAPIVersion}}.json' \
app/
대화에서 만든 래퍼(kubecheck.py) 는 Python 표준 라이브러리만 써서 kubeconform -output json 을 실행하고 결과를 정규화했다. 설계 포인트는 다음과 같다.
got X, want Y / expected ... / invalid type 휴리스틱으로 분류해 [TYPE] 태그를 붙이고 --type-only 필터를 둔다.password · token · secret · authorization 값은 $REDACTED 로 마스킹한다.0 유효, 1 invalid, 2 오류, 3 사용법, 127 kubeconform 미설치(설치 안내 출력).