Skip to main content

12/12/2025

In Depth

이전 글에 이어서 k8s의 구성 요소를 파악하는 문서입니다. 프로젝트 개발과 실습을 진행하면서, 파악하고 있어야 할 개념이 많다고 느껴 작성하게 됐습니다.

이 문서는 쿠버네티스 환경의 전체적인 구조와 실행 흐름을 간략하게 파악하기 위해 작성했습니다.

  • Cluster, Control Plane, Worker Node 구성 요소 및 실행 흐름
  • k8s 리소스 하위 카테고리와 각 구성 요소

Cluster​

클러스터는 크게 두 부분으로 구성됩니다.

  • Control Plane: 관리 기능을 수행하는 영역
    • 클러스터 상태 저장 (ex: helm 사용하여 release, rollback 등 관리)
    • 스케줄링·API 처리·조율 등
  • Worker Node: 실제로 컨테이너(Pod)가 배포되고 실행되는 컴퓨팅 자원 Resource

쿠버네티스 클러스터의 실행 흐름은 다음과 같습니다:

  1. 사용자가 클러스터에 애플리케이션을 배포하면
  2. 컨트롤 플레인이 이를 해석하고 워커 노드 중 적절한 위치에 Pod를 스케줄링
  3. 워커 노드는 스케줄링된 사양에 따라 Pod를 실제로 생성하고 실행
  4. 클러스터는 네트워크, 스토리지, 서비스 디스커버리, 스케일링 등 애플리케이션 운영에 필요한 기능을 모두 포함한 실행 단위로 동작한다.

여기까지 파악한 내용은, 클러스터는 애플리케이션 실행 환경의 가장 큰 단위라는 것입니다.

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로 쿠버네티스 환경을 구성할 때, 앞서 살핀 개념과 함께 알아두어야 합니다.

k8s-resources

리소스는 크게 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 구조​

  1. Deployment: 원하는 상태를 정의
  2. ReplicaSet: Deployment가 생성하며, Pod 복제본 수를 관리
  3. Pod: ReplicaSet이 생성하고 관리하는 실제 실행 단위

실제 운영에서는 Pod나 ReplicaSet을 직접 생성하기보다, Deployment를 통해 관리하는 것이 권장된다고 합니다.


클러스터 요소와 리소스의 관계​

k8s

이제 리소스 개념과 클러스터를 함께 살피며, 전체적인 구조를 이해해보겠습니다. 쿠버네티스 클러스터는 물리적 구성 요소와 논리적 객체(리소스)로 구성됩니다.

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가 참조

정리하자면:

  1. Control Plane은 리소스의 선언과 조율을, Worker Node는 리소스(Pod)의 실제 실행
  2. 리소스는 클러스터 "안에" 존재하는 논리적 객체

다음 글에서는 Kubernetes Object에 대해 알아보겠습니다.