쿠버네티스(Kubernetes, K8s)는 컨테이너화된 애플리케이션을 자동으로 배포, 관리, 확장할 수 있도록 도와주는 컨테이너 오케스트레이션 플랫폼입니다.
구글이 내부적으로 사용하던 Borg 시스템을 기반으로 개발하였으며, 현재 CNCF(Cloud Native Computing Foundation)에서 관리하고 있습니다.
쿠버네티스의 주요 개념
쿠버네티스는 여러 개의 컨테이너를 효율적으로 관리할 수 있도록 클러스터 기반 구조를 가집니다.
클러스터 (Cluster)
- 쿠버네티스가 실행되는 기본 단위
- 마스터 노드(Master Node)와 워커 노드(Worker Node)로 구성
노드 (Node)
- 컨테이너를 실행하는 물리적/가상 서버
- 마스터 노드: 클러스터 관리 및 제어
- 워커 노드: 실제 애플리케이션 컨테이너 실행
파드 (Pod)
- 쿠버네티스에서 컨테이너를 실행하는 최소 단위
- 여러 개의 컨테이너를 하나의 Pod에서 실행 가능
- 같은 네트워크를 공유하며, 기본적으로 같은 호스트에서 실행됨
디플로이먼트 (Deployment)
- 컨테이너 애플리케이션의 배포 및 관리를 자동화하는 객체
- 롤링 업데이트(Rolling Update) 및 롤백(Rollback) 지원
- 선언적 방식으로 YAML 또는 JSON 파일을 사용하여 배포 가능
서비스 (Service)
- Pod 간 또는 외부와의 네트워크 통신을 가능하게 하는 네트워크 객체
- 클러스터 IP, 노드포트(NodePort), 로드 밸런서(LoadBalancer) 방식 지원
인그레스 (Ingress)
- 외부에서 쿠버네티스 클러스터 내부의 서비스로 접근할 수 있도록 설정하는 API 객체
- 도메인 기반 트래픽 라우팅 및 SSL 적용 가능
컨트롤러 (Controller)
- 시스템 상태를 지속적으로 모니터링하며 원하는 상태를 유지하는 역할
- ReplicaSet, StatefulSet, DaemonSet, Job, CronJob 등이 있음
쿠버네티스의 주요 기능 및 장점
자동화된 컨테이너 관리 → 애플리케이션 배포, 확장, 복구 자동화
무중단 업데이트 → 롤링 업데이트 & 롤백 지원
자동 확장(Auto Scaling) → 트래픽 변화에 따른 자동 확장 가능
로드 밸런싱 → 여러 개의 Pod에 부하 분산
자체 복구(Self-healing) → 장애 발생 시 자동으로 컨테이너 재시작
다양한 인프라 지원 → 온프레미스, 클라우드(AWS, GCP, Azure) 등에서 사용 가능
쿠버네티스 배포 예제
쿠버네티스를 활용하여 간단한 Nginx 웹 서버를 배포하는 방법을 설명하겠습니다.
Deployment 파일 작성
아래 YAML 파일을 사용하여 Nginx를 배포합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3 # 3개의 Pod 실행
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
배포 실행
kubectl apply -f nginx-deployment.yaml
서비스(Service) 생성
Pod를 외부에서 접근할 수 있도록 서비스 객체를 생성합니다.
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
배포 후 확인:
kubectl apply -f nginx-service.yaml
kubectl get pods
kubectl get services
이제 NodePort
를 통해 웹 서버에 접근할 수 있습니다!
쿠버네티스 vs Docker
비교 항목 | Docker | Kubernetes |
---|---|---|
개념 | 컨테이너 실행 및 관리 | 컨테이너를 클러스터 단위로 자동화 관리 |
배포 방식 | 개별 컨테이너 실행 | 여러 컨테이너를 묶어 자동 배포 |
확장성 | 수동 확장 필요 | 자동 확장 가능 |
복구 기능 | 컨테이너 다운 시 직접 재시작 필요 | 자동 복구 (Self-healing) |
부하 분산 | 직접 설정 필요 | 내장 로드 밸런싱 지원 |
네트워크 관리 | 개별 컨테이너 연결 | 클러스터 내 네트워크 관리 |
Docker는 컨테이너를 실행하는 기술이고, Kubernetes는 이를 대규모로 관리하는 오케스트레이션 도구입니다.
즉, Docker는 컨테이너 실행, Kubernetes는 컨테이너 운영 자동화라고 이해하면 됩니다!
쿠버네티스 활용 사례
마이크로서비스 아키텍처 (MSA) → 여러 개의 서비스 운영 자동화
CI/CD 파이프라인 → 지속적 배포 및 롤백 자동화
멀티 클라우드 환경 → AWS, GCP, Azure 등 다양한 클라우드에서 통합 운영
자동 확장 및 부하 분산 → 트래픽 증가 시 자동으로 Pod 추가
정리
쿠버네티스(Kubernetes, K8s)는 컨테이너 기반 애플리케이션을 자동으로 배포, 관리, 확장할 수 있는 컨테이너 오케스트레이션 도구입니다.
Docker는 컨테이너 실행 도구, Kubernetes는 컨테이너 관리 도구입니다.
마이크로서비스 아키텍처, CI/CD 자동화, 멀티 클라우드 환경에서 필수적인 도구로 사용됩니다.
쿠버네티스를 활용하면 대규모 컨테이너 환경을 효율적으로 관리할 수 있습니다!