C.W.K.
Stream
Lesson 01 of 08 · published

Kubernetes manifest — apiVersion, kind, spec

~12 min · yaml, kubernetes, manifests

Level 0평문
0 XP0/64 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

모든 Kubernetes 객체가 같은 네 키 가진 YAML 문서

Kubernetes manifest 가 엄격한 모양 따라: apiVersion, kind, metadata, spec. 클러스터 API server 가 manifest 읽고 그 kind 의 OpenAPI schema 로 검증, state 조정. 모든 Deployment, Service, ConfigMap, Ingress, Job, CronJob — 다 같은 네 키 봉투.

네 키 봉투

  • apiVersion — 어느 API 그룹 + 버전이 이 객체 소유 (예: Deployment 는 apps/v1, Service 는 v1).
  • kind — 리소스 타입 (Deployment, Service, ConfigMap, …).
  • metadata — 이름, namespace, label, annotation.
  • spec — 원하는 state. 모양은 kind 마다 다름.

한 논리적 service 의 multi-document 파일

일반 service 가 Deployment + Service + ConfigMap + (옵션) Ingress 로 출시, --- 로 구분된 한 파일의 네 문서. kubectl apply -f stack.yaml 가 한 번에 다 적용.

원칙: manifest 는 원하는 state, 명령 아님. 클러스터가 작성한 거 향해 조정. 그래서 YAML — declarative, idempotent — 가 Kubernetes 에 맞는 포맷; 명령형 shell script 는 잘못된 모양.

Code

한 파일에 완전한 service·yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: pippa-config
data:
  PORT: "8000"
  LOG_LEVEL: info
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pippa
  labels:
    app: pippa
spec:
  replicas: 3
  selector:
    matchLabels:
      app: pippa
  template:
    metadata:
      labels:
        app: pippa
    spec:
      containers:
        - name: api
          image: ghcr.io/cwk/pippa:1.0
          envFrom:
            - configMapRef:
                name: pippa-config
          ports:
            - containerPort: 8000
---
apiVersion: v1
kind: Service
metadata:
  name: pippa
spec:
  selector:
    app: pippa
  ports:
    - port: 80
      targetPort: 8000
적용 전 검증·bash
# 클러스터 실제 API 로 schema-체크
kubectl apply --dry-run=server -f stack.yaml

# 오프라인 schema-체크 (빠름, 오타 잡음)
kubeconform -summary stack.yaml

# kube-linter 로 lint (best practice)
kube-linter lint stack.yaml
'string vs number' 함정·yaml
# 잘못 — port 가 정수 8000 됨, ConfigMap 거부 (string 이어야 함)
data:
  PORT: 8000

# 맞음 — port 가 string "8000"
data:
  PORT: "8000"

External links

Exercise

한 replica Deployment 와 Service 를 아무 toy 이미지 (nginx 면 충분) 로 정의하는 단일 YAML 파일 작성. kubectl apply -f stack.yaml --dry-run=server 로 적용. 일부러 필수 필드 (selector, port) 생략 후 다시 실행; 에러 메시지 읽어 — 누락된 필드 가리킴. 그 라운드 트립이 새 리소스 kind 마다 배우는 방식.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.