Kubernetes YAML 검사기
브라우저 처리Kubernetes YAML(--- 로 여러 문서)을 읽어 필수 필드, selector와 Pod 라벨 불일치, latest 이미지, resources·probe·securityContext 누락, Service가 가리키는 Pod가 없는 경우를 찾아 줍니다.
- 파일·이미지·문서 처리 도구는 브라우저 안에서 처리되더라도 원본에 개인정보나 민감 정보가 포함될 수 있습니다. 공유·제출 전 원본과 결과를 한 번 더 확인하세요.
kubectl apply는 문법만 맞으면 리소스를 만들어 주기 때문에, selector가 Pod 라벨과 어긋나거나 Service가 엉뚱한 라벨을 가리키는 실수는 배포 후에야 드러납니다. 이 검사기는 매니페스트를 YAML로 읽어 이런 연결 오류와 운영상 빠뜨리기 쉬운 설정을 미리 알려 줍니다.
오류 1 · 경고 0 · 참고 0 문서 1개: Deployment/web [오류] Deployment/web: selector.matchLabels가 template.metadata.labels와 맞지 않습니다.
Kubernetes YAML 검사기 사용 가이드
kubectl apply는 문법만 맞으면 리소스를 만들어 주기 때문에, selector가 Pod 라벨과 어긋나거나 Service가 엉뚱한 라벨을 가리키는 실수는 배포 후에야 드러납니다. 이 검사기는 매니페스트를 YAML로 읽어 이런 연결 오류와 운영상 빠뜨리기 쉬운 설정을 미리 알려 줍니다.
모든 문서의 apiVersion, kind, metadata.name과 이름 규칙(소문자·숫자·-·.)을 확인하고, Deployment·StatefulSet·DaemonSet은 selector.matchLabels가 템플릿 라벨과 맞는지 봅니다. 컨테이너마다 이미지 태그, resources.requests와 메모리 limit, readinessProbe, allowPrivilegeEscalation·runAsNonRoot 설정을 점검합니다.
같은 파일에 Service와 워크로드가 함께 있으면 Service의 selector와 맞는 Pod 템플릿이 있는지까지 확인합니다. ConfigMap의 | 블록 문자열, 여러 문서, 앵커도 읽으며 YAML 문법 오류는 행 번호로 알려 줍니다.
사용 방법
- 'Kubernetes YAML' 칸에 매니페스트를 붙여 넣습니다. 여러 리소스는 --- 줄로 구분합니다.
- '실행'을 누르면 문서 목록(종류/이름)과 오류·경고·참고가 나옵니다.
- 오류를 먼저 고치고, 경고와 참고는 운영 환경 기준에 맞게 반영합니다.
예시: 라벨이 어긋난 Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: web
image: nginx:1.27
(resources·probe·securityContext 설정 생략)오류 1 · 경고 0 · 참고 0 문서 1개: Deployment/web [오류] Deployment/web: selector.matchLabels가 template.metadata.labels와 맞지 않습니다.
selector는 app: web인데 Pod 라벨은 app: frontend라서 Deployment가 자기 Pod를 찾지 못합니다.
이럴 때 쓰면 좋아요
- kubectl apply 전에 매니페스트의 연결 오류를 찾을 때
- Service에 트래픽이 들어오지 않는 원인이 selector 불일치인지 확인할 때
- 운영 배포 전 resources와 probe가 빠진 컨테이너를 점검할 때
- Helm 렌더링 결과(helm template)를 붙여 넣어 한 번에 검사할 때
문제가 생겼을 때
Service의 spec.selector 라벨과 Deployment의 template.metadata.labels가 다릅니다. 라벨 키와 값의 철자를 맞추세요. 워크로드가 다른 파일에 있다면 무시해도 됩니다.
Kubernetes 리소스 이름은 대문자와 밑줄을 허용하지 않습니다. my_app 대신 my-app처럼 바꾸세요.
활용 팁
- resources.requests가 없으면 스케줄러가 노드에 Pod를 고르게 배치하지 못하고, 메모리 limit이 없으면 한 Pod가 노드 메모리를 다 쓸 수 있습니다.
- 참고 항목(runAsNonRoot, allowPrivilegeEscalation)은 Pod Security Standards의 restricted 수준을 맞출 때 필요한 설정입니다.
자주 묻는 질문
apiVersion, kind, metadata.name 같은 공통 필드만 확인합니다. CRD의 spec 내용은 스키마를 모르기 때문에 검사하지 않습니다.
아니요. 클러스터 버전별 API 지원이나 권한은 확인하지 않습니다. kubectl apply --dry-run=server로 최종 확인하세요.
네. Job은 spec.template, CronJob은 spec.jobTemplate 아래의 컨테이너를 찾아 같은 이미지·리소스 규칙으로 검사합니다.