개발 아카이브

쿠버네티스란? feat. 데이터 처리도 이제는 컨테이너로, 우아한형제들의 데이터플랫폼 혁신

딤섬뮨 2024. 10. 13. 21:11
728x90

요즘 쿠버네티스 이야기가 많이 들려서, 관련된 AWS 써밋을 보았는데, 일단 내용이 좀 어려웠다.

그래서 쿠버네티스 내용부터 훑고, 내용 정리를 진행했다.

 

 

쿠버네티스란?

서비스를 제공하려면 만든 서버를 특정 서버에 배포해야 함. 기존에는 물리 서버에 여러 개의 가상 머신을 띄우는 가상화를 많이 사용했음. 하지만 가상화에는 몇 가지 한계가 있어서 이를 해결하기 위한 기술로 컨테이너가 등장했고, 컨테이너를 효율적으로 관리하기 위해 쿠버네티스(Kubernetes)가 나옴.

 

가상화(Virtualization)

 

가상화는 물리적인 하드웨어를 논리적인 객체로 추상화해 한 서버 위에 여러 운영체제를 설치하고, 각각 독립적으로 애플리케이션을 실행하는 방식임. 이 방식의 특징과 한계는 다음과 같음.

 

1. 확장성의 한계: 새로운 애플리케이션을 실행할 때마다 별도의 OS를 설치해야 해서 확장이 어려움.

2. 무거운 리소스 사용: 여러 개의 운영체제를 실행해야 하므로 메모리, CPU 자원이 많이 소모됨.

 

이런 문제를 해결하기 위해 등장한 것이 컨테이너임.

 

컨테이너란?

 

컨테이너는 Host OS 위에서 독립적인 논리 구획을 만들어서 애플리케이션과 그에 필요한 모든 파일(라이브러리, 설정 파일 등)을 하나의 패키지로 묶어 실행함. 기존 가상화와 달리, 애플리케이션끼리 OS를 공유하므로 매번 OS를 설치할 필요가 없음.

 

컨테이너의 주요 특징:

 

빠른 설정과 확장성: OS 설치 작업이 없기 때문에 배포와 확장이 매우 빠름.

경량화: VM보다 훨씬 가벼워 마이그레이션, 백업, 전송이 쉬움.

이식성: 컨테이너 안에 애플리케이션과 필요한 모든 파일이 들어있어 다른 환경에서도 안정적으로 실행 가능함.

 

하지만 단점도 존재함:

 

OS를 공유하기 때문에 한 애플리케이션에서 발생한 문제가 Host OS에 영향을 미칠 수 있음.

 

도커(Docker)란?

 

도커는 애플리케이션의 실행 환경을 이미지로 만들고, 이를 컨테이너로 실행하기 위한 플랫폼임. 이미지는 애플리케이션 실행에 필요한 모든 파일과 설정을 포함하고 있는 일종의 템플릿이고, 이 이미지를 기반으로 컨테이너를 실행함.

 

쿠버네티스(Kubernetes)란?

 

컨테이너를 관리하고 배포하는 오픈소스 플랫폼임.

컨테이너의 배포, 확장, 모니터링 등을 자동화하고, 여러 대의 컨테이너를 효율적으로 관리할 수 있게 도와줌.

“조타수”라는 뜻의 이름에서 유래하며, 복잡한 애플리케이션을 컨테이너 단위로 배포하고 관리하는 데 최적화된 도구임.

 

쿠버네티스의 등장 배경

 

도커의 인기가 높아지면서 컨테이너 사용이 증가함.

여러 서버에 컨테이너를 배포하는 일이 복잡해지고 리소스 관리가 어려워짐.(이미지도 많아지고 컨테이너도 많아지고…

컨테이너 어느 서버에 배포하냐… 리소스 남은 서버 있냐..)

컨테이너 오케스트레이션 도구의 필요성이 대두되면서 쿠버네티스가 등장하게 됨.

 

쿠버네티스가 인기 있는 이유

 

1. 구글의 기술 노하우가 반영된 프로젝트임.

2. 대기업들의 적극적인 참여: AWS, Google Cloud 등 주요 클라우드 서비스들이 관리형 쿠버네티스 서비스를 제공함.

3. 다양한 배포 방식 지원: Cron Job, Deployment 등 다양한 배포 방식 지원.

4. 확장성과 관리 편의성: 라벨 기능으로 리소스 관리, 네임스페이스로 클러스터 구분, RBAC(Role-Based Access Control)로 권한 관리 가능.

 

쿠버네티스의 주요 기능

 

자동 스케일링(Auto Scaling): 사용량에 따라 리소스를 자동으로 확장함.

HPA: CPU, 메모리 사용량에 따라 Pod를 수평으로 확장.

VPA: Pod의 리소스 할당량을 조정.

클러스터 오토스케일링: 클라우드 환경에서 노드 개수 조정 가능.

 

쿠버네티스의 구조

마스터-노드 구조로 이루어짐.

API 서버와 상태 저장소를 중심으로 각 노드(서버)와 통신함.

마스터는 클러스터 전체의 상태를 관리하고, 노드들은 컨테이너 실행을 담당함

 

관련된 영상을 보았다.

 

써밋 연설

 

aws에서 데이터 처리도 이제는 컨테이너로, 우아한 형제들의 데이터 플랫폼 혁신이라는  주제의 영상이었다.

https://www.youtube.com/watch?v=T2mtIkQ1vbA&t=136s

 

 

정리를 했으나 너무 어려웠다. 우선 data 쪽에 무지해서 그런가, 사용하는 아키텍처가 어려웠다.

 

정리하자면, 기존 ec2를 사용해서 애플리케이션을 가동하는데 많은 어려움이 있었고 컨테이너를 통해 유연성을 확보했다.

(나도 실무에서 느끼는 고통이기에 이해한다)

 

우리는 서버를 돌리지만, 데이터 분야는 데이터에 필요한 앱을 돌릴 것이다. 그것을 EMR이라고 인지했고, 이를 EKS 위에서 돌린다고 이해했다.

즉 EKS 위에서 EMR 워크로드를 처리하였다.

하나의 EMR 워크로드는 여러 개의 파드 즉 여러개의 컨테이너로 쪼개서 관리될 수 있다.

그래서, EMR 워크로드가 컨테이너 안에서 동작해서, 대부분은 컨테이너 이미지에 내장돼서 ECR 같은 레지스트리에 있으면 이후에는 워크로드를 빨리 실행 가능하다.

 

그래서 컴퓨팅과 데이터 스토리지를 분리해서, 확장이 쉬웠다.

 

하지만 EKS 위에 EMR를 사용하면서도 문제가 있었다.

자원을 할당받지 못해서, 모든 태스크가 실행되지 못하고 놀거나

여유 있는 메모리를 꽉꽉 사용하지 않고 노드를 띄우는 바람에 노드 개수가 늘어난다거나 하는 문제가 있었다.

 

 

따라서 커스텀 스케줄링을 사용해서 이를 해결했다고 한다

 

 

너무 어려운 내용이라, 여기선 EKS와 EMR 이 뭔지 정도만 알고 가자로 마무리한다.

 

AWS EMR이란?

Elastic Map Reduce로, 빅 데이터 서비스이다.

 

https://youtu.be/iBDi6 qFqG68

Spark, Hive와 같은 오픈 소스 프레임워크를 사용해 빅데이터 환경 및 애플리케이션을 간단하게 구축하고 운영할 수 있다.

EMR은 클러스터를 여러 개 만들어서, 오픈소스의 데이터를 가져올 수 있고, 각 클러스터를 옵티마이징 할 수 있다.

 

 

AWS EKS란?

Amazon Elastic Kubernetes Service

쿠버네티스 컨트롤 플레인을 설치하고, 운영 및 유지 관리할 필요가 없는 서비스

 

다수의 가용영역에 있는 쿠버네티스 컨트롤 플레인을 실행한다.

다양한 AWS 서비스와 통합하여 확장성 및 보안성을 제공한다.

예를 들어 ECR로 이미지 저장소를 사용한다거나, VPC내에 EKS를 배치하여, VPC 내 IP를 파드에 할당하는 등..

 

 

어렵다... 쿠버네티스부터 앞으로 알면 좋겠다. 맛보기로 배웠다고 생각한다.

 

728x90