
멋쟁이 사자처럼 면접을 보다가 인프라 쪽으로 공부하신 분을 만날 기회가 있었다. Kubernetes 용어를 들었는데 배포 관련 용어라는 정도만 인지한 채 제대로 파고들 기회가 없었다. 이 참에 배포에 대한 정리를 하고 넘어가보려고 한다.
🤨 kubernetes?
컨테이너화된 애플리케이션을 배포하고 관리하는 오픈소스 플랫폼이다. 자동화된 운영을 지원하며, 대규모 분산 시스템의 안정적인 실행을 돕는다.
기능 요약: 자동화된 배포, 스케일링, 로드 밸런싱, 장애 복구
분산 시스템(Distributed System)
분산 시스템(Distributed System) 은 여러대의 독립적인 컴퓨터가 네트워크를 통해 작업(예> 트래픽, 데이터) 등을 서버 다운 없이 처리하는 것 » 대규모 서비스에 유용
VM VS Container
VM과 컨테이너는 애플리케이션을 격리하여 실행하는 기술이지만, 구조와 활용 방식이 다름.
VM(가상 머신, Virtual Machine)
• 물리 서버 위에 하이퍼바이저(Hypervisor)가 여러 개의 VM을 실행
• 각 VM은 독립된 운영체제(OS)를 가짐
• OS마다 CPU, 메모리, 디스크 등의 자원을 할당받아 실행됨
컨테이너(Container)
• 하나의 OS 커널을 공유하면서 여러 개의 애플리케이션을 격리하여 실행
• 컨테이너마다 필요한 라이브러리와 실행 환경을 포함한 이미지(Image)를 사용
• 가볍고 빠르게 배포 및 실행 가능
다시 말해 각각의 아키텍쳐를 컨테이너 형식으로 올리되, 분산하여 관리할 수 있도록 해주는 플랫폼이라고 할 수 있다.
용어
용어를 먼저 정리 해보겠다.
- Pod: 컨테이너의 최소 단위. 아키텍쳐의 트래픽을 분산시켜줄 수 있는 어플리케이션
- Node: Pod를 실행하는 실제 서버. 한 노드에 여러개의 팟이 실행되는 형식이다.
- Deployment: Deployment는 배포(배치)를 관리하는 자원으로, 원하는 상태의 Pod 수를 유지하도록 해준다.
- Service: 서비스는 외부에서 접근하는 트래픽에게 노출되는 고정 ip를 제공해줌 (load balance)
기능
- 서비스 디스커버리와 로드 밸런싱: 쿠버네티스는 자체 DNS라든가 자체 IP 주소를 사용하여 컨테이너를 외부에 보여준다. 때문에 로드밸런싱 역할을 할 수 있다.
- 자동화된 배포: 새로운 애플리케이션 버전이 들어오면 자동으로 배포하는 기능을 가지고 있다. 버전 업그레이드 중 문제가 발생하면 자동으로 롤백해주기도 한다.
- 스케일링: 트래픽에 맞게 리소스를 확장하거나 축소시키는 역할을 하기도 한다. 트랙픽이 급증하면 Horizontal Pod Autoscaler (HPA) 기능을 이용해서 pods 개수를 늘려주어 성능을 높일 수 있다.
- 장애 복구: 쿠버네티스는 시스템에서 장애가 발생했을 때 자동으로 복구한다. 동시에, 서비스 중단을 최소화합니다. 예를 들어, Pod가 다운되면 쿠버네티스가 새로운 Pod를 생성해 동일한 서비스를 제공하도록 하는 경우가 있다.
Pod의 장점?
한 서버에서 여러 Pod를 실행하는 이유는 확장성, 신뢰성, 비용 절감, 효율적인 자원 활용이라고 할 수 있다.
물론 비싼 서버 하나로 모든 것을 처리할 수도 있지만, 그 경우 단일 장애점이 생기고, 리소스 관리가 어려워지는 등의 문제점이 예상되기도 한다.
쿠버네티스는 여러 서버에 걸쳐 Pod를 효율적으로 배포하고 관리할 수 있어 더 안정적이다.
단일 장애점을 예방하고 서버 비용을 절약할 수 있다는 점에서 장점이 있다고 할 수 있다.