Kubernetes 주요 오브젝트
개요
K8s 클러스터 내에서 관리되는 영속적인 엔티티(Entity)를 오브젝트라고 합니다. K8s는 사용자가 정의한 오브젝트의 상태(Desired State)를 유지하기 위해 끊임없이 제어 루프를 가동합니다.
1. 선언적 모델의 이해
선언적(Declarative) vs 명령적(Imperative)
K8s는 선언적 모델을 따릅니다. “웹 서버 컨테이너 1개를 새로 띄워라”라고 명령하는 방식이 아닙니다.
대신, “웹 서버 컨테이너가 항상 3개 떠 있는 상태를 유지하라”라고 YAML 파일로 상태를 선언(Apply)합니다. K8s 컨트롤러는 현재 상태를 감시하다가 노드 장애로 컨테이너 1개가 죽으면 스스로 1개를 더 생성하여 3개를 맞춥니다.
2. 핵심 워크로드 오브젝트
2.1 Pod (파드)
- K8s에서 생성하고 관리할 수 있는 배포의 최소 단위입니다.
- 하나의 Pod 안에는 하나 이상의 컨테이너가 묶여서 실행되며, 이들은 스토리지 볼륨과 로컬 네트워크(IP)를 공유합니다.
2.2 ReplicaSet (레플리카셋)
- 지정된 수의 Pod 복제본(Replica)이 항상 실행되도록 보장하는 컨트롤러입니다.
- 노드에 장애가 발생해 Pod가 다운되면, 다른 정상 노드에 새로운 Pod를 자동으로 띄워 개수를 유지합니다.
2.3 Deployment (디플로이먼트)
- Pod와 ReplicaSet에 대한 선언적 업데이트를 제공하는 최상위 오브젝트입니다.
- 실제 운영 환경에서는 Pod나 ReplicaSet을 직접 생성하지 않고, 항상 Deployment를 통해 애플리케이션을 배포합니다.
- 어플리케이션 버전 롤백, 무중단 배포(Rolling Update) 등을 완벽하게 지원합니다.
3. 구성 및 격리 오브젝트
3.1 Namespace (네임스페이스)
- 단일 물리 클러스터 내에서 리소스를 논리적으로 나누는 가상 클러스터입니다.
- 개발(dev), 스테이징(stg), 운영(prod) 환경을 분리하거나 팀별로 리소스를 격리할 때 사용합니다.
3.2 ConfigMap & Secret
- ConfigMap: 데이터베이스 URL, 로그 레벨 등 애플리케이션 실행에 필요한 일반적인 설정값을 키-값 형태로 분리하여 저장합니다.
- Secret: 데이터베이스 비밀번호, OAuth 토큰, SSH 키 등 민감한 정보를 Base64로 인코딩하여 안전하게 저장하고 Pod에 주입합니다.
4. 실제 적용 예시
쇼핑몰 애플리케이션 배포
- 운영팀이 장바구니 서비스의 컨테이너 이미지
cart:v1을 지정하여 3개의 Replica를 가지는 Deployment를 생성합니다.- 내부적으로 ReplicaSet이 생성되고, 3개의 Pod가 클러스터 노드들에 분산 배치됩니다.
- 소스 코드가 업데이트되어
cart:v2로 Deployment 설정을 변경하면, K8s는 구버전 Pod를 하나씩 내리고 신버전 Pod를 하나씩 올리는 롤링 업데이트를 수행하여 사용자 중단 없이 버전을 교체합니다.