Kubernetes의 객체
Kubernetes의 객체 (Objects In Kubernetes)
Kubernetes 객체는 Kubernetes 시스템에서의 영속적 엔터티예요. Kubernetes는 이 엔터티들로 클러스터의 상태를 표현해요. 이 페이지는 Kubernetes 객체가 API에서 어떻게 표현되고, .yaml 형식으로 어떻게 표현하는지 설명합니다.
Kubernetes 객체 이해하기
Kubernetes 객체는 다음을 설명할 수 있어요.
- 어떤 컨테이너화된 애플리케이션이 (어떤 노드에서) 실행 중인지
- 그 애플리케이션이 사용 가능한 리소스
- 재시작 정책, 업그레이드, 장애 허용 같은 애플리케이션 동작에 관한 정책
Kubernetes 객체는 "의도(intent)의 기록"이에요. 객체를 생성하면 Kubernetes 시스템이 객체가 존재하도록 계속 노력해요. 객체를 만들면 클러스터 워크로드가 어떻게 보이기를 원하는지, 즉 원하는 상태(desired state) 를 시스템에 알려주는 거예요.
객체를 생성·수정·삭제하려면 Kubernetes API를 사용해야 해요. kubectl을 쓰면 CLI가 필요한 API 호출을 대신 수행하고, Client Libraries로 직접 호출할 수도 있어요.
객체의 spec과 status
거의 모든 Kubernetes 객체는 spec 과 status 두 개의 중첩 객체 필드를 가져요.
spec: 객체 생성 시 설정하는 원하는 상태(desired state). 리소스가 갖길 원하는 특성을 서술해요.status: Kubernetes 시스템과 그 컴포넌트가 제공·업데이트하는 현재 상태(current state). 컨트롤 플레인이 실제 상태를 제공한 원하는 상태와 일치시키려고 계속 관리해요.
예를 들어 Deployment는 클러스터에서 실행되는 애플리케이션을 나타내는 객체예요. Deployment spec에 3개의 replica를 원한다고 설정하면, 시스템이 spec을 읽고 3개 인스턴스를 시작하고 status를 업데이트해요. 인스턴스 하나가 실패하면(status 변경) 시스템이 spec과 status의 차이에 대응해 교체 인스턴스를 시작해요.
Kubernetes 객체 표현하기
객체를 만들 때는 원하는 상태를 설명하는 객체 spec과 이름 같은 기본 정보를 제공해야 해요. 대부분 manifest 파일을 통해 정보를 제공하며, 관례상 YAML(JSON도 가능)을 사용해요. kubectl 같은 도구가 HTTP 요청 시 매니페스트를 JSON으로 변환해요.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
kubectl apply -f https://k8s.io/examples/application/deployment.yaml
필수 필드 (Required fields)
apiVersion– 객체 생성에 사용할 Kubernetes API 버전kind– 생성할 객체의 종류metadata–name문자열,UID, 선택적namespace를 포함한 객체 고유 식별 데이터spec– 객체에 원하는 상태
객체마다 spec의 정확한 형식은 달라요. Kubernetes API Reference에서 spec 형식을 찾을 수 있어요.
서버 측 필드 검증 (Server side field validation)
Kubernetes v1.25부터 API server는 객체에서 인식할 수 없거나 중복된 필드를 감지하는 서버 측 필드 검증을 제공해요. kubectl은 --validate 플래그로 검증 수준을 정해요.
- Strict: 엄격 검증, 검증 실패 시 오류
- Warn: 검증을 수행하되 오류를 경고로 노출
- Ignore: 서버 측 검증 없음
기본값은 --validate=true(strict와 동일)예요. Kubernetes 1.27 이상은 항상 필드 검증을 제공해요.