DevOps/Infra

[k8s] 1. 쿠버네티스란 무엇인고?

chillmyh 2025. 5. 19. 19:42

0. 들어가며

쿠버네티스는 원래 현재 lg cns camp 교육 듣는 과정에 있었지만, 교육이 진행되면서 시간관계상 누락됐다.

나는 최종프로젝트 팀으로 금융을 선택해서 쿠버네티스를 다루게 되었는데, 쿠버네티스에 대한 지식이 전무했기 때문에 멘토링을 통해 멘토님께 쿠버네티스 몇가지 배운 것들과 스스로 찾아보며 공부한 내용들을 개념, 기초 부터 큰 틀을 정리하고 디테일적인 부분 순으로 챕터별로 정리해서 블로그에 적어보려한다.

 

1. 쿠버네티스란 무엇인고?

애플리케이션이 단순히 "잘 작동하는 코드"에서 끝나던 시대는 지났다.
오늘날의 소프트웨어는 빠르게 배포되고, 안정적으로 운영되며, 수많은 사용자 요청을 효율적으로 처리할 수 있어야 한다.
이러한 운영 환경의 변화 속에서 컨테이너(Container) 기술은 빠르게 대세로 자리잡았고,
컨테이너를 기반으로 대규모 애플리케이션을 효율적으로 관리하는 오케스트레이션(Orchestration) 도구가 필요해졌다.

그 중심에 바로 Kubernetes(K8s) 가 있다.

 

1.1 Kubernetes의 등장 배경

컨테이너가 본격적으로 주목받게 된 건 Docker가 등장하면서부터다.
Docker는 애플리케이션 실행 환경을 패키징하고, 언제 어디서든 동일한 방식으로 실행할 수 있도록 해주었다.

하지만, 단일 컨테이너를 실행하는 데는 Docker만으로 충분해도,
수십 개, 수백 개의 컨테이너를 운영 환경에서 자동으로 관리하려면 한계가 명확했다.

예를 들어 이런 질문들이 생기기 시작한다.

컨테이너가 죽었을 때 자동으로 다시 켜줄 수는 없을까?

특정 서버의 리소스가 부족하면 다른 서버에 컨테이너를 분산할 수 없을까?

컨테이너가 늘어나면 자동으로 로드밸런싱을 해줄 수는 없을까?

서비스의 상태를 확인하고, 문제가 생기면 스스로 치유(Healing)할 수는 없을까?

 

이 문제를 해결해주는 게 바로 Kubernetes다.
Google이 내부에서 사용하던 컨테이너 오케스트레이션 시스템 ‘Borg’를 기반으로
2014년에 오픈소스로 공개하면서, 전 세계적으로 빠르게 확산됐다.

 

1.2 Kubernetes의 역할과 정의

Kubernetes는 “컨테이너화된 애플리케이션의 배포, 확장, 운영을 자동화하는 오픈소스 플랫폼” 이다.
즉, Kubernetes는 다음과 같은 역할을 수행한다:

  • 컨테이너 배포 및 스케줄링
  • 서비스 디스커버리 및 로드밸런싱
  • 상태 감지 및 자가 복구(Self-healing)
  • 구성 및 시크릿 관리
  • 수평 확장 / 축소 (Autoscaling)
  • 스토리지 오케스트레이션 (볼륨 관리)

즉, 단순히 컨테이너를 실행하는 것에 그치지 않고,
컨테이너들이 하나의 “시스템”으로 작동하도록 하는 제어탑 역할을 한다.

 

1.3 Kubernetes는 어떤 문제를 해결하나?

1.3.1 복잡한 컨테이너 운영 자동화

수많은 컨테이너를 수동으로 관리하기란 현실적으로 어렵다.
Kubernetes는 후에 설명하겠지만 Pod, ReplicaSet, Deployment 같은 추상화를 통해 복잡도를 줄인다.

 

1.3.2 장애 복원력

서비스가 중단되지 않도록 컨테이너 상태를 감시하고,
이상이 감지되면 자동으로 재시작하거나 대체 Pod를 배치한다.

 

1.3.3 확장성과 탄력성

트래픽이 많을 땐 Pod 수를 자동으로 늘리고(HPA),
적을 땐 리소스를 절약하기 위해 줄일 수 있다.

 

1.3.4 환경 독립성과 일관성

어디서 실행하든 동일하게 동작하는 컨테이너 기반의 배포가 가능하며,
개발/스테이징/운영 환경 간 차이를 줄일 수 있다.

 

1.4 Kubernetes의 기본 구성요소 맛보기

자세한 구성은 이후 챕터에서 다루겠지만,
Kubernetes는 다음과 같은 컴포넌트들로 이루어져 있다:

  • 클러스터(Cluster): 여러 대의 서버로 구성된 Kubernetes 실행 환경
  • 마스터 노드(Control Plane): 클러스터의 상태를 관리하고 의사결정을 내리는 주체
  • 워커 노드(Worker Node): 실제 컨테이너(Pod)를 실행하는 물리적/가상 머신
  • Pod: Kubernetes에서 실행되는 컨테이너의 기본 단위
  • Service: Pod 간의 통신을 위한 추상화된 접근 방식

이 개념들을 하나씩 차근차근 이해해 나가면,
Kubernetes가 어떤 원리로 작동하는지, 그리고 실무에서 어떻게 사용하는지를 자연스럽게 익힐 수 있다.

 

1.5 왜 Kubernetes를 배워야할까?

현재 수많은 기업들이 마이크로서비스 아키텍처(MSA)를 도입하고 있고, 애플리케이션은 더 이상 단일 시스템이 아니라 수십 개의 마이크로 단위로 분산되어 운영되고 있다. 이런 환경에서 Kubernetes는 사실상 “운영의 표준 플랫폼”이 되었다.

 

클라우드 벤더(AWS, GCP, Azure)는 모두 Kuberentes 기반의 매니지드 서비스를 제공하고 있고,

Spring, Node.js, Python 등 어떤 언어든 Kubernetes 위에 올릴 수 있으며,

DevOps, GitOps, CI/CD 파이프라인 역시 Kubernetes 중심으로 설계되고 있다.

 

또한, 컨테이너 기반으로 MSA 개발을 하다보면 컨테이너 단위로 관리해줄 툴이 필요성을 느끼게 되는 순간이 있는데 Docker를 사용해서 MSA 개발을 하게되면 쿠버네티스는 가능하다면 선택이 아닌 필수적이라고 느낀다.