In Depth
이전 글에 이어서 k8s의 구성 요소를 파악하는 문서입니다.
프로젝트 개발과 실습을 진행하면서, 파악하고 있어야 할 개념이 많다고 느껴 작성하게 됐습니다.
이 문서는 쿠버네티스 환경의 전체적인 구조와 실행 흐름을 간략하게 파악하기 위해 작성했습니다.
Cluster,Control Plane,Worker Node구성 요소 및 실행 흐름k8s리소스 하위 카테고리와 각 구성 요소
Cluster
클러스터는 크게 두 부분으로 구성됩니다.
Control Plane: 관리 기능을 수행하는 영역- 클러스터 상태 저장 (ex:
helm사용하여release,rollback등 관리) - 스케줄링·API 처리·조율 등
- 클러스터 상태 저장 (ex:
Worker Node: 실제로 컨테이너(Pod)가 배포되고 실행되는 컴퓨팅 자원Resource
쿠버네티스 클러스터의 실행 흐름은 다음과 같습니다:
- 사용자가 클러스터에 애플리케이션을 배포하면
- 컨트롤 플레인이 이를 해석하고 워커 노드 중 적절한 위치에
Pod를 스케줄링 - 워커 노드는 스케줄링된 사양에 따라
Pod를 실제로 생성하고 실행 - 클러스터는 네트워크, 스토리지, 서비스 디스커버리, 스케일링 등 애플리케이션 운영에 필요한 기능을 모두 포함한 실행 단위로 동작한다.
여기까지 파악한 내용은, 클러스터는 애플리케이션 실행 환경의 가장 큰 단위라는 것입니다.
Control Plane
컨트롤 플레인 구성요소 설명
kube-apiserver: 모든 요청의 엔트리 포인트etcd: 클러스터 상태 저장소kube-scheduler: Pod 배치 결정kube-controller-manager: 다양한 컨트롤러 실행cloud-controller-manager: 클라우드 리소스 통합 관리(선택적)
Worker Node
kubelet: 노드에서 Pod 실행과 상태 관리kube-proxy: 서비스 네트워킹 라우팅Container Runtime:Docker,containerd등으로 컨테이너 실행
Kubernetes Resources
쿠버네티스에서 리소스Resource는 클러스터 내에서 애플리케이션을 구성하고 관리하는 다양한 객체를 의미합니다. Helm 등을 사용하여 IaC로 쿠버네티스 환경을 구성할 때, 앞서 살핀 개념과 함께 알아두어야 합니다.

리소스는 크게 4가지 카테고리로 분류됩니다:
워크로드 리소스
Pod: 컨테이너 실행의 최소 단위Deployment: 애플리케이션 배포와 업데이트를 선언적으로 관리StatefulSet: 데이터베이스 등 상태를 유지하는 애플리케이션 관리DaemonSet: 모든 노드(또는 특정 노드)에서 Pod를 실행Job/CronJob: 일회성 작업 또는 주기적 작업 실행
네트워크 리소스
Service: Pod 그룹에 대한 안정적인 네트워크 엔드포인트 제공Ingress: 클러스터 외부에서 HTTP/HTTPS 트래픽 라우팅
설정 리소스
ConfigMap: 애플리케이션 설정 데이터 저장Secret: 비밀번호, 토큰 등 민감한 정보 저장
스토리지 리소스
PersistentVolume(PV): 클러스터 수준의 스토리지 리소스PersistentVolumeClaim(PVC): Pod가 스토리지를 요청하는 방법
Deployment
Deployment는 가장 많이 사용되는 리소스로, 애플리케이션의 원하는 상태 Desired State를 선언하면
쿠버네티스가 현재 상태 Current State를 원하는 상태로 맞춰줍니다.
(사실 이 부분이 helm으로 개발하면서 이 개념이 난해했습니다. 일반적인 배포 스크립트-보다는 쿠버네티스 상태를 기록하는 커밋, 릴리즈의 단위라고 우선은 이해했습니다.)
주요 특징
- 스케일링:
replicas값을 변경하여Pod복제본 수를 조절 - 롤링 업데이트: 새 버전 배포 시 기존
Pod를 단계적으로 교체하여 무중단 배포 구현 - 롤백: 배포 히스토리를 관리하여 이전 버전으로 쉽게 복구
- 자가 치유:
Pod장애 발생 시 자동으로 재생성하여replicas수를 유지
Deployment 구조
- Deployment: 원하는 상태를 정의
- ReplicaSet:
Deployment가 생성하며,Pod복제본 수를 관리 - Pod:
ReplicaSet이 생성하고 관리하는 실제 실행 단위
실제 운영에서는 Pod나 ReplicaSet을 직접 생성하기보다, Deployment를 통해 관리하는 것이 권장된다고 합니다.
클러스터 요소와 리소스의 관계

이제 리소스 개념과 클러스터를 함께 살피며, 전체적인 구조를 이해해보겠습니다. 쿠버네티스 클러스터는 물리적 구성 요소와 논리적 객체(리소스)로 구성됩니다.
1. 물리적 구성 요소 (실제 실행되는 프로세스/노드)
Control Plane: 리소스를 관리하고 조율
kube-apiserver: 사용자(kubectl,helm)가 보낸 리소스 정의를 수신etcd: 모든 리소스의 상태를 키-값 저장소에 저장kube-scheduler: Pod 리소스를 어떤 Worker Node에 배치할지 결정controller-manager:Deployment,StatefulSet등의Desired State를 유지
Worker Node: 실제 컨테이너 실행 환경
kubelet:Pod리소스의 실행을 관리하고 Container Runtime에 지시Container Runtime(containerd,Docker등):kubelet의 CRI 호출을 받아 실제 컨테이너 프로세스를 실행kube-proxy:Service리소스의 네트워킹 규칙(iptables/IPVS)을 설정
2. 논리적 객체 (Resources - 클러스터 내에서 정의/관리되는 객체)
리소스는 클러스터 내부에서 관리되는 선언적 객체입니다:
Deployment,StatefulSet: 워크로드 리소스 →Pod생성Pod: 컨테이너 실행의 최소 단위 →kubelet이 관리하고Container Runtime이 실제 실행Service: 네트워크 엔드포인트 →kube-proxy가 네트워킹 규칙 설정ConfigMap,Secret: 설정 데이터 →etcd에 저장되고 Pod가 참조
정리하자면:
- Control Plane은 리소스의 선언과 조율을, Worker Node는 리소스(Pod)의 실제 실행
- 리소스는 클러스터 "안에" 존재하는 논리적 객체
다음 글에서는 Kubernetes Object에 대해 알아보겠습니다.