안녕하세요.
오늘은 쿠버네티스라고 하는 수많은 컨테이너를 하나하나 관리하는 대신, 전체적인 조율을 맡아 시스템이 항상 원하는 상태를 유지하도록 돕는 오픈소스 오케스트레이션 플랫폼에 대해서 공부 및 정리를 하겠습니다.
1. 쿠버네티스의 핵심 철학: 선언적 API (Declarative API)
쿠버네티스를 이해하는 가장 중요한 키워드는 "원하는 상태(Desired State)"입니다.
- 명령형(Imperative): "컨테이너 3개를 실행해줘." (직접 행동을 지시)
- 선언적(Declarative): "이 서비스는 항상 컨테이너 3개가 실행 중이어야 해." (최종 상태를 정의)
쿠버네티스는 사용자가 정의한 '선언'을 바탕으로, 현재 상태(Current State)를 계속 체크하며 차이가 발생하면 자동으로 이를 일치시키는 Reconciliation Loop(조정 루프)를 수행합니다.
2. 쿠버네티스 아키텍처 (Architecture)
쿠버네티스 클러스터는 크게 전체를 관리하는 Control Plane(마스터 노드)과 실제 컨테이너가 실행되는 Worker Node로 나뉩니다.
1) Control Plane (관리자 영역)
- kube-apiserver: 클러스터의 관문입니다. 모든 내부/외부 요청은 이곳을 통합니다.
- etcd: 클러스터의 모든 상태 데이터를 저장하는 '두뇌' 역할의 키-값(Key-Value) 저장소입니다.
- kube-scheduler: 새로 생성된 Pod을 어떤 노드에 배치할지 결정합니다.
- kube-controller-manager: 상태를 모니터링하고 원하는 상태로 유지하기 위한 다양한 컨트롤러(노드 컨트롤러, 레플리카 컨트롤러 등)를 실행합니다.
2) Worker Node (실행 영역)
- kubelet: 각 노드에서 실행되며, 컨테이너가 Pod 스펙에 따라 정상적으로 동작하도록 관리합니다.
- kube-proxy: 노드 간의 네트워크 규칙을 관리하여 Pod 간 통신이나 외부 통신을 가능하게 합니다.
- Container Runtime: 실제로 컨테이너를 실행하는 소프트웨어입니다. (CRI 호환 런타임: containerd, CRI-O 등)
3. 주요 오브젝트 (Basic Objects)
쿠버네티스에서 관리하는 가장 기본적인 단위들입니다.
| 오브젝트 | 설명 |
| Pod (파드) | 쿠버네티스에서 생성하고 관리할 수 있는 가장 작은 배포 단위입니다. 하나 이상의 컨테이너를 포함합니다. |
| Service (서비스) | 파드 집합에 접근할 수 있는 **고정된 IP(단일 진입점)**를 제공합니다. 파드가 죽고 새로 살아나도 IP가 바뀌지 않게 해줍니다. |
| Volume (볼륨) | 컨테이너는 삭제되면 데이터가 날아가지만, 볼륨을 사용하면 데이터를 영구적으로 저장할 수 있습니다. |
| Namespace (네임스페이스) | 클러스터 하나를 여러 개의 논리적 공간으로 나누어 관리하는 단위입니다. |
4. 컨트롤러 (Controllers)
기본 오브젝트를 관리하고 확장하는 고수준의 개념들입니다.
Deployment (배포)
가장 흔히 사용하는 오브젝트로, 애플리케이션의 배포와 업데이트(Rolling Update)를 담당합니다. "파드를 5개 유지해줘"라고 설정하면, 배포된 파드의 개수를 관리합니다.
ReplicaSet (레플리카셋)
지정된 수의 파드 복제본이 항상 실행되도록 보장합니다. 보통 직접 생성하기보다는 Deployment를 통해 관리됩니다.
StatefulSet
데이터베이스처럼 상태(State)가 보존되어야 하는 애플리케이션을 위해 사용합니다. 파드에 고유한 이름과 순서, 안정적인 스토리지를 제공합니다.
5. 쿠버네티스의 주요 특징
- 자가 치유 (Self-healing): 컨테이너가 죽으면 자동으로 다시 살리고, 응답이 없는 노드는 대체합니다.
- 자동화된 롤아웃 및 롤백: 서비스 중단 없이 새로운 버전을 배포하거나, 문제가 생기면 이전 버전으로 되돌립니다.
- 수평 확장 (Horizontal Scaling): CPU나 메모리 사용량에 따라 자동으로 파드 개수를 늘리거나 줄입니다. (HPA)
- 서비스 디스커버리와 로드 밸런싱: 자체적인 DNS 시스템을 통해 파드 간의 위치를 찾고 트래픽을 분산합니다.
6. 쿠버네티스 시작을 위한 3단계 로드맵
실제로 서비스를 배포하기까지의 과정은 보통 다음과 같은 순서로 진행됩니다.
Step 1: 기본 도구 설치 (Prerequisites)
가장 먼저 컨테이너를 실행할 환경과 쿠버네티스 명령어를 전달할 도구가 필요합니다.
- Docker Desktop / OrbStack: 컨테이너 실행을 위한 엔진입니다. (Mac 환경이라면 OrbStack이 가볍고 빠릅니다.)
- kubectl: 쿠버네티스 클러스터에 명령을 내리는 커맨드라인 도구입니다. 모든 실습의 핵심입니다.
Step 2: 로컬 클러스터 구성 (Local Cluster)
내 컴퓨터 안에 가상의 쿠버네티스 환경을 만듭니다.
- Minikube: 가장 표준적인 학습용 도구입니다. 단일 노드 클러스터를 쉽게 구성할 수 있습니다.
- Kind (Kubernetes in Docker): 도구 자체가 컨테이너 안에서 실행되어 가볍고, 여러 개의 노드(Multi-node)를 띄워 실습하기에 좋습니다.
Step 3: 첫 번째 어플리케이션 배포 (Hands-on)
실제 명령어를 입력하며 파드를 띄워보는 단계입니다.
- Cluster Start: minikube start
- Pod 생성: kubectl run hello-k8s --image=nginx
- 상태 확인: kubectl get pods
- 서비스 노출: kubectl expose pod hello-k8s --type=NodePort --port=80
7. 참고하기 좋은 웹사이트 (Reference)
| 사이트명 | 특징 | 링크 |
| 공식 문서 (한글) | 가장 정확하고 방대한 공식 가이드입니다. | kubernetes.io/ko/ |
| Learnk8s | 시각화된 자료가 많아 개념 이해에 매우 좋습니다. | learnk8s.io |
| Killercoda | 웹 브라우저에서 바로 실습 가능한 환경을 제공합니다. | killercoda.com |
| KodeKloud | 초보자를 위한 단계별 시나리오 강의가 훌륭합니다. | kodekloud.com |
3. 실습 진행 순서 (세부 가이드)
(1) Hello World: kubectl
먼저 kubectl 명령어를 통해 파드(Pod)를 생성하고 삭제하는 과정을 다룹니다.
- kubectl run, kubectl get, kubectl describe, kubectl delete
(2) YAML로 정의하는 인프라 (Declarative)
명령어 대신 deployment.yaml 파일을 작성해서 배포하는 방식을 정리합니다. 쿠버네티스의 진정한 힘은 이 '선언적' 방식에서 나옵니다.
- Deployment와 ReplicaSet의 관계 설명
- kubectl apply -f filename.yaml
(3) 네트워크 연결: Service
외부에서 내가 만든 웹 서버에 접속할 수 있도록 길을 열어주는 방법을 다룹니다.
- ClusterIP, NodePort, LoadBalancer의 차이점
(4) Scaling & Rolling Update
트래픽이 몰릴 때 파드 개수를 늘리거나, 서비스 중단 없이 버전을 업데이트하는 실습을 합니다.
- kubectl scale, kubectl rollout undo
'개인 공부 - 내가 공부하고 싶은 모든 것 > 1. 인프라' 카테고리의 다른 글
| [개인 공부] 미들웨어에 대해서 공부하기 (0) | 2026.05.30 |
|---|
