K8s란? (Kubernetes)

컨테이너화된 애플리케이션을 자동으로 배포, 확장, 관리해주는 오픈소스 플랫폼이다!
즉, Docker 컨데이너를 대규모로 자동 관리해주는 시스템이라 생각하자
왜 사용하는가?
K8s를 통해서는
- 자동 배포, 자동 확장, 자동 복구, 로드 밸런싱이 가능해진다.
- 기존에는 서버마다 환경이 다르거나, 장애 발생 시 자동 복구가 어려운 등 문제가 있었다.
Kubernetes 핵심 구조
- Cluster 구성
- Control Plane
- Worker Node
[1] Control Plane
주요 컴포넌트
- (1) API Server
- 모든 요청의 출입구
- kubectl 명령이 여기로 들어간다
- (2) etcd
- (3) Scheduler
- (4) Controller Manager
- 시스템 상태를 지속적으로 원하는 상태로 유지한다
[2] Worker Node
: 실제로 컨테이너가 실행되는 곳이다
- (1) Kubelet
- (2) Kube Proxy
- (3) Container Runtime
핵심 개념
- Pod
- K8s의 가장 작은 실행 단위다
- 하나 이상의 컨테이너를 포함하고 같은 네트워크, 스토리지를 공유한다
- Deployment
- 원하는 Pod 개수를 유지
- 자동 복구와 롤링 업데이트를 지원한다
- Service
- Pod에 접근하기 위한 네트워크 추상화
- Pod는 IP가 계속 바뀌기 때문에 직접 접근이 불가하다.
- 종류 : ClusterIP, NodePort, LoadBalancer
- Namespace
- ConfigMap, Secret
- ConfigMap : 설정 정보
- Secret : 비밀번호, API Key 등 민감 정보
Kubernetes의 동작 흐름
상황 예시 : 웹 서버 3개를 띄워보자
- 개발자가 yaml 작성
- kubectl로 API Server에 요청
- etcd에 상태를 저장
- Scheduler가 Pod 배치
- Kubelet이 컨테이너 실행
- Controller가 상태 유지
→ 핵심 : 원하는 상태를 유지
YAML 예시
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
뜻 : nginx 컨테이너를 3개 실행하고, 장애 발생 시 자동 복구한다.
Kubernetes 핵심 특징
- Self-Healing
- Auto Scaling
- Rolling Update
- Declarative 방식
Kubernetes VS Docker
그래서 둘의 차이가 무엇인가??
| 구분 | Docker | Kubernetes |
|---|
| 역할 | 컨테이너 실행 | 컨테이너 관리 |
| 범위 | 단일 호스트 | 클러스터 |
| 기능 | 실행 | 배포/확장/관리 |
- Docker : 컨테이너 실행
- K8s : 컨테이너 오케스트레이션
Kubernetes를 써야하는 경우는 언제인가
- MSA(마이크로서비스) 구조
- 트래픽 변동이 큰 서비스
- 무중단 배포 필요
- 대규모 서비스
위와 같은 상황에서 사용하는 것이 좋다!