시스템 디자인

쿠버네티스는 어떻게 동작할까요?

내 컨테이너가 마법처럼 돌아가는 이유, 쿠버네티스의 비밀 내부 구조 완전 해부

2025.04.29 | 조회 998 |
0
|
데브필 DevPill의 프로필 이미지

데브필 DevPill

Top 1% 개발자로 거듭나는 성공 처방전

Introduction

"배포했는데 왜 안 돼요?"
"스케일링이 제대로 안 되네요."
"이 파드는 왜 자꾸 죽는 거죠?"

쿠버네티스를 처음 접한 개발자들의 흔한 탄식입니다. 하지만 정작 우리가 사용하는 이 강력한 도구가 내부적으로 어떻게 작동하는지 아는 개발자는 얼마나 될까요?

사실 쿠버네티스는 마치 오케스트라의 지휘자처럼 수십, 수백 개의 컨테이너를 조율하는 복잡한 시스템입니다. YAML 파일 몇 줄로 배포하는 우리의 간단한 명령 뒤에는, 수많은 컴포넌트가 정교하게 움직이는 놀라운 메커니즘이 숨어 있죠.

"쿠버네티스가 어렵다"는 말은 이제 클라우드 업계의 클리셰가 되었습니다. 그러나 그 핵심 개념과 내부 구조만 제대로 이해한다면, 당신도 쿠버네티스의 마법 같은 자가 치유 능력과 오토스케일링의 비밀을 꿰뚫어 볼 수 있습니다.

이 글에서는 구글에서 탄생해 현재 클라우드 네이티브 컴퓨팅의 표준이 된 쿠버네티스의 내부 작동 원리를 가장 쉽고 직관적으로 파헤쳐 보겠습니다. 컨트롤 플레인부터 워커 노드까지, 매니페스트 파일이 어떻게 실제 실행 중인 컨테이너로 변환되는지 그 여정을 따라가 볼까요?

System Design Codex의 <How Kubernetes Works Internally?>를 번역해 가져왔습니다.

첨부 이미지

📢 백엔드 개발자의 필수 스킬셋을 완성하세요!

쿠버네티스와 같은 컨테이너 오케스트레이션 기술은 현대 백엔드 개발의 핵심 요소로 자리 잡았습니다. 하지만 이러한 기술을 이해하고 활용하는 것은 혼자서 독학하기 어려운 영역이죠.

많은 개발자들이 "어떻게 하면 컨테이너, 마이크로서비스, 대용량 트래픽 처리와 같은 실무 환경의 복잡한 기술을 제대로 배울 수 있을까?"라는 고민을 합니다.

제가 많은 주니어 백엔드 개발자들을 만나보니 이들이 겪는 가장 큰 어려움은 '무엇을 모르는지조차 모른다'는 점이었습니다. 기본적인 API 구현은 할 수 있어도, 실제 프로덕션 환경에서 필요한 TDD, 클린 아키텍처, 대용량 트래픽 처리, 장애 대응과 같은 필수 역량을 체계적으로 배울 기회가 없었던 거죠.

이런 분들을 위한 최적의 솔루션을 발견했습니다! 바로 스파르타코딩클럽의 <항해 플러스 Lite> 과정입니다.

첨부 이미지

🚀 주요 특징

  • 10주 동안 백엔드 개발의 핵심 실무 역량을 집중적으로 학습합니다.
  • 빅테크 시니어 개발자의 1:1 코칭으로 실무 감각을 획득할 수 있습니다.
  • 핵심 커리큘럼:
    • TDD와 클린 아키텍처 기반 개발
    • 시나리오 기반 서버 구축
    • 대용량 트래픽 처리 전략
    • 실제 장애 상황 대응 연습

특히 인상적인 점은 단순 이론 학습에서 끝나지 않고, 실제 코드에 대한 1:1 코드 리뷰와 멘토링을 통해 체계적으로 역량을 키워나갈 수 있다는 것입니다. 마치 실무 환경에서 시니어 개발자와 함께 일하는 경험을 쌓을 수 있는 거죠.

또한 고정된 일정 없이 본인의 페이스에 맞게 학습할 수 있다는 점이 직장인 개발자들에게 특히 매력적입니다. 필요시 최대 2주간의 방학 제도도 활용할 수 있어요!

제가 쿠버네티스와 같은 복잡한 시스템을 이해하고 활용하는 과정에서 느낀 점은, 실무 경험이 있는 선배 개발자의 가이드가 얼마나 중요한지였습니다. 이론만으로는 결코 얻을 수 없는 인사이트를, 항해 플러스 Lite에서는 체계적으로 얻을 수 있습니다.

관심 있으신 분들은 항해 플러스 Lite를 확인해보세요.

특별히 저희 뉴스레터 독자분들을 위한 할인 코드를 사용하시면 추가 혜택을 받으실 수 있습니다! 🎁

👉 항해 플러스 Lite 자세히 알아보기(링크)

🎁 데브필 전용 할인 코드: z4w3KD


쿠버네티스의 내부 작동 원리

쿠버네티스(Kubernetes)는 원래 구글에서 개발하고 현재는 클라우드 네이티브 컴퓨팅 재단(Cloud Native Computing Foundation, CNCF)에서 유지·관리하는 강력한 오픈소스 컨테이너 오케스트레이션 플랫폼입니다.

쿠버네티스(줄여서 K8s)는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 데 도움을 줍니다.

그렇다면 쿠버네티스는 실제로 내부에서 어떻게 작동할까요?

간단하게 살펴보겠습니다.

엔트리 포인트: 매니페스트 파일 작성

개발자 관점에서 쿠버네티스와의 상호작용은 주로 YAML이나 JSON으로 작성된 매니페스트 파일을 작성하는 것부터 시작합니다.

이러한 매니페스트 파일은 애플리케이션의 원하는 상태를 정의합니다. 예를 들면:

  • 어떤 컨테이너를 실행해야 하나?
  • 복제본(인스턴스)은 몇 개가 필요한가?
  • 어떤 포트를 노출해야 하나?
  • 어떤 환경 변수나 구성이 필요한가?

쿠버네티스에게 "내 앱이 이렇게 보였으면 좋겠어. 이걸 실현하고 계속 그 상태를 유지해줘"라고 말하는 것과 같습니다.

첨부 이미지

1단계: 컨트롤 플레인

매니페스트가 제출되면(주로 kubectl CLI를 통해), 이는 클러스터의 중추 신경계라 할 수 있는 쿠버네티스 컨트롤 플레인으로 들어갑니다.

다음은 컨트롤 플레인을 구성하는 주요 요소들입니다:

🔹 1. API 서버

쿠버네티스 클러스터의 정문과 같은 역할을 합니다. 개발자, CI/CD 시스템 또는 대시보드에서 오는 모든 명령, 구성 또는 요청은 먼저 API 서버를 통과합니다.

  • 매니페스트 파일을 검증하고 처리합니다.
  • 모든 컨트롤 플레인 작업의 관문 역할을 합니다.
  • 모든 내부 구성 요소와 외부 사용자는 이 API를 통해 쿠버네티스와 상호작용합니다.

🔹 2. 스케줄러

API 서버가 새 워크로드(예: 파드)를 받아들이면, 스케줄러는 이를 어디서 실행할지 결정하는 역할을 합니다.

  • 클러스터의 현재 상태, 즉 각 노드가 가진 CPU, 메모리, 기타 자원을 확인합니다.
  • 모든 제약 조건이나 어피니티(affinity) 규칙을 적용합니다.
  • 새 파드에 가장 적합한 노드를 선택합니다.

쉽게 말해, 스케줄러는 배치 엔진 역할을 합니다.

🔹 3. 컨트롤러 매니저

컨트롤러 매니저는 모든 것을 동기화 상태로 유지합니다. 주요 임무는 시스템을 지속적으로 모니터링하고 클러스터의 실제 상태가 원하는 상태와 일치하는지 확인하는 것입니다.

  • 파드가 충돌하거나 노드가 실패하면 컨트롤러 매니저가 다른 곳에 파드를 재생성합니다.
  • 디플로이먼트(Deployment), 레플리카셋(ReplicaSet), 노드(Node) 등의 리소스를 관리합니다.
  • "모든 것이 사용자가 요청한 대로 실행되고 있는가?"를 지속적으로 확인하는 자동 조종 장치와 같습니다.

🔹 4. etcd

쿠버네티스의 데이터베이스입니다. 모든 구성 데이터, 클러스터 상태 및 워크로드에 대한 세부 정보를 저장합니다.

  • 분산 키-값 저장소입니다.
  • 높은 일관성과 내결함성을 갖추고 있습니다.
  • 컨트롤 플레인의 모든 구성 요소는 클러스터의 상태를 파악하기 위해 etcd에 의존합니다.

만약 쿠버네티스에 기억력이 있다면, etcd가 바로 그 역할을 담당합니다.

2단계: 워커 노드

컨트롤 플레인이 무엇을 어디서 실행할지 결정하면, 실제 실행은 워커 노드에서 이루어집니다.

각 노드는 애플리케이션 컨테이너를 실행하는, 클러스터 내의 물리적 또는 가상 머신입니다.

이제 각 워커 노드를 구동하는 구성 요소들을 살펴보겠습니다:

🔹 1. Kubelet

Kubelet은 노드 에이전트입니다. API 서버와 통신하여 실행할 내용에 대한 지침을 받고, 실행 중인 컨테이너의 상태를 모니터링합니다.

  • 파드에 정의된 컨테이너가 실행 중이고 정상 상태인지 확인합니다.
  • 노드와 파드의 상태를 컨트롤 플레인에 보고합니다.
  • 컨테이너가 충돌하면 재시작합니다.

Kubelet이 없다면 노드는 무엇을 해야 할지 전혀 알 수 없을 것입니다.

🔹 2. Kube-proxy

이는 네트워킹의 접착제 역할을 합니다. 쿠버네티스는 각 파드에 고유한 IP 주소를 할당하고, kube-proxy는 이러한 파드로의 트래픽 라우팅을 담당합니다.

  • 서비스 디스커버리와 로드 밸런싱을 처리합니다.
  • 들어오는 트래픽을 적절한 파드로 라우팅합니다.
  • iptables나 IPVS와 함께 작동하여 네트워크 규칙을 관리합니다.

노드의 항공 교통 관제사와 같은 역할을 한다고 볼 수 있습니다.

🔹 3. 컨테이너 런타임

마지막으로, containerd, Docker 또는 CRI-O와 같은 컨테이너 런타임이 있습니다.

  • 컨테이너 이미지를 가져와서 실행하는 실제 소프트웨어입니다.
  • 쿠버네티스는 컨테이너를 직접 실행하지 않고 런타임을 엔진으로 사용합니다.

컨테이너 런타임은 명령을 실행 중인 컨테이너로 변환하는 엔진룸과 같다고 생각하면 됩니다.

3단계: 지속적인 조정

쿠버네티스를 진정으로 강력하게 만드는 건 매니페스트에 정의된 원하는 상태와 클러스터의 실제 상태를 지속적으로 조정한다는 점에 있습니다.

  • 노드가 다운되면 파드를 다른 곳으로 이동시킵니다.
  • 컨테이너가 충돌하면 재시작합니다.
  • 배포 구성을 변경하면 업데이트를 순차적으로 적용합니다.

이러한 지속적인 자가 치유 기능은 쿠버네티스가 현대 애플리케이션 배포를 위한 표준 플랫폼으로 자리 잡게 된 핵심 이유 중 하나입니다.

자, 여러분은 쿠버네티스를 사용해 보셨나요? 간략한 개요 사우라브 다쇼라(Saurabh Dashora) 2025년 4월 22일

 

Eraser.io에서 다이어그램을 직접 확인해 볼 수 있습니다.

 

쿠버네티스의 내부 작동 원리

1단계: 컨트롤 플레인

매니페스트가 제출되면(보통 kubectl CLI를 통해), 이는 클러스터의 중추 신경계라고 할 수 있는 쿠버네티스 컨트롤 플레인으로 들어갑니다.

다음은 컨트롤 플레인을 구성하는 주요 요소들입니다:

🔹 1. API 서버

쿠버네티스 클러스터의 정문과 같습니다. 개발자, CI/CD 시스템 또는 대시보드에서 오는 모든 명령, 구성 또는 요청은 먼저 API 서버를 통과합니다.

  • 매니페스트 파일을 검증하고 처리합니다.
  • 모든 컨트롤 플레인 작업의 관문 역할을 합니다.
  • 모든 내부 구성 요소와 외부 사용자는 이 API를 통해 쿠버네티스와 상호 작용합니다.

🔹 2. 스케줄러

API 서버가 새 워크로드(예: 파드)를 받아들이면, 스케줄러의 역할은 이를 어디서 실행할지 결정하는 것입니다.

  • 클러스터의 현재 상태, 즉 각 노드가 보유한 CPU, 메모리 및 자원을 확인합니다.
  • 모든 제약 조건이나 어피니티(affinity) 규칙을 적용합니다.
  • 새 파드에 가장 적합한 노드를 선택합니다.

간단히 말해, 배치 엔진 역할을 합니다.

🔹 3. 컨트롤러 매니저

컨트롤러 매니저는 모든 것을 동기화 상태로 유지합니다. 주요 임무는 시스템을 지속적으로 모니터링하고 클러스터의 실제 상태가 원하는 상태와 일치하는지 확인하는 것입니다.

  • 파드가 충돌하거나 노드가 실패하면 컨트롤러 매니저가 다른 곳에 파드를 재생성합니다.
  • 디플로이먼트, 레플리카셋, 노드 등과 같은 리소스를 관리합니다.
  • "모든 것이 사용자가 요청한 대로 실행되고 있는가?"를 지속적으로 확인하는 자동 조종 장치와 같습니다.

🔹 4. etcd

쿠버네티스의 데이터베이스입니다. 모든 구성 데이터, 클러스터 상태 및 워크로드에 대한 세부 정보를 저장합니다.

  • 분산 키-값 저장소입니다.
  • 높은 일관성과 내결함성을 갖춥니다.
  • 컨트롤 플레인의 모든 구성 요소는 클러스터가 어떤 모습인지 알기 위해 etcd에 의존합니다.

쿠버네티스에 기억력이 있다면, etcd가 그 역할을 담당합니다.

2단계: 워커 노드

컨트롤 플레인이 무엇을 어디서 실행할지 결정하면, 실제 실행은 워커 노드에서 이루어집니다.

각 노드는 애플리케이션 컨테이너를 실행하는 클러스터 내의 물리적 또는 가상 머신입니다.

각 워커 노드를 구동하는 구성 요소를 살펴보겠습니다:

🔹 1. Kubelet

Kubelet은 노드 에이전트입니다. API 서버와 통신하여 실행할 내용에 대한 지침을 받고 실행 중인 컨테이너의 상태를 모니터링합니다.

  • 파드에 정의된 컨테이너가 실행 중이고 정상인지 확인합니다.
  • 노드와 파드 상태를 컨트롤 플레인에 다시 보고합니다.
  • 컨테이너가 충돌하면 다시 시작합니다.

Kubelet이 없다면 노드는 무엇을 해야 할지 알 수 없을 것입니다.

🔹 2. Kube-proxy

이것은 네트워킹 접착제입니다. 쿠버네티스는 각 파드에 고유한 IP 주소를 할당하고, kube-proxy는 이러한 파드로의 트래픽 라우팅을 도와줍니다.

  • 서비스 디스커버리 및 로드 밸런싱을 처리합니다.
  • 들어오는 트래픽을 적절한 파드로 라우팅합니다.
  • iptables 또는 IPVS와 함께 작동하여 네트워크 규칙을 관리합니다.

노드의 항공 교통 관제사와 같습니다.

🔹 3. 컨테이너 런타임

마지막으로, containerd, Docker 또는 CRI-O와 같은 컨테이너 런타임이 있습니다.

  • 컨테이너 이미지를 가져와서 실행하는 실제 소프트웨어입니다.
  • 쿠버네티스는 컨테이너를 직접 실행하지 않고 런타임을 엔진으로 사용합니다.

컨테이너 런타임은 명령을 실행 중인 컨테이너로 변환하는 엔진룸과 같다고 생각할 수 있습니다.

3단계: 지속적인 조정

쿠버네티스를 진정으로 강력하게 만드는 것은 매니페스트에 정의된 원하는 상태와 클러스터의 실제 상태를 지속적으로 조정한다는 점입니다.

  • 노드가 다운되면 파드를 다른 곳으로 이동합니다.
  • 컨테이너가 충돌하면 다시 시작합니다.
  • 배포 구성을 변경하면 업데이트를 롤아웃합니다.

이러한 지속적인 자가 치유 동작은 쿠버네티스가 현대 애플리케이션 배포를 위한 기본 플랫폼이 된 이유 중 하나입니다.

자, 여러분은 쿠버네티스를 사용해 보셨나요? 


👥 더 나은 데브필을 만드는 데 의견을 보태주세요

Top 1% 개발자로 거듭나기 위한 처방전, DevPill 구독자 여러분 안녕하세요 :) 

저는 여러분들이 너무 궁금합니다. 

어떤 마음으로 뉴스레터를 구독해주시는지, 

어떤 환경에서 최고의 개발자가 되기 위해 고군분투하고 계신지, 

제가 드릴 수 있는 도움은 어떤 게 있을지. 

아래 설문조사에 참여해주시면 더 나은 콘텐츠를 제작할 수 있도록 힘쓰겠습니다. 설문에 참여해주시는 분들 전원 1개월 유료 멤버십 구독권을 선물드립니다. 유료 멤버십에서는 아래와 같은 혜택이 제공됩니다.

  • DevPill과의 1:1 온라인 커피챗
  • 멤버십 전용 슬랙 채널 참여권
    • 채용 정보 공유 / 스터디 그룹 형성 / 실시간 기술 질의응답
  • 이력서/포트폴리오 템플릿

 

설문 참여하고 유료 멤버십 혜택받기 →

첨부 이미지

 

 

다가올 뉴스레터가 궁금하신가요?

지금 구독해서 새로운 레터를 받아보세요

이번 뉴스레터 어떠셨나요?

데브필 DevPill 님에게 ☕️ 커피와 ✉️ 쪽지를 보내보세요!

댓글

의견을 남겨주세요

확인
의견이 있으신가요? 제일 먼저 댓글을 달아보세요 !

다른 뉴스레터

© 2025 데브필 DevPill

Top 1% 개발자로 거듭나는 성공 처방전

뉴스레터 문의dev.redpill@gmail.com

메일리 로고

도움말 자주 묻는 질문 오류 및 기능 관련 제보 뉴스레터 광고 문의

서비스 이용 문의admin@team.maily.so

메일리 사업자 정보

메일리 (대표자: 이한결) | 사업자번호: 717-47-00705 | 서울 서초구 강남대로53길 8, 8층 11-7호

이용약관 | 개인정보처리방침 | 정기결제 이용약관 | 라이선스