kubernetes와 컨테이너 오케스트레이션(쿠버네티스 개요)

2022. 3. 1. 14:49DevOps/Docker & kubernetes

쿠버네티스는 가장 대표적이며, 사실상 표준인(De Facto Standard) 컨테이너 오케스트레이션 시스템이다. 구글 내부에서 사용하던 배포시트템인 borg라는 프로그렘을 기반으로 오픈소스로 "재작성"하여 2014년에 공개한 프로그렘이다. CNCF라는 오픈소스 제단에 기부가 되어 있으며 매인 프로젝트 중 하나로 되어있다. 

 

컨테이너 오케스트레이션 시스템은 아래의 의미를 가진다.

 

"

컨테이너의 배포, 관리, 확장, 네트워킹을 자동화 하는 기술

"

 

도커, 도커 컴포즈 등을 통한 Scaling작업을 지원하기도 하며, Rollback/Rollout등을 하기도 하며 다양한 머신들의 유효자원을 관리하는 Resource Allocation(CPU,GPU등등), 어떤 노드에 스케줄링 되어야하는지 관리하는 Scheduling, 클러스터 시스템인 만큼 overlay network(가상 네트워크 영역)를 사용하는데 이때 자동으로 서비스 위치를 발견하는 service discovery(interanl DNS가 필요함 -ectd가 대신하는 중), 여러 컨테이너로 구성된 서비스에 대해 트래픽을 분산할 수 있는 Load Balancing, 특정 이슈가 생겨 프로그렘에 문제가 생겼을때 스스로 복구할 수 있는 self Healing, 컨테이너 간의 설정, 데이터 등을 주입할 수 있는 기능인 Configuration Management, 어플리케이션에서 영구적인 데이터 저장소가 필요할때 외부저장소를 관리하는 기능인 Storage Orchestration기능이 있다.

 

즉 조금 더 쉽게 설명하고자 하면, 컨테이너 오케스트레이션 시스템은 여러대의 머신으로 구성되어 있는 클러스터 상에서 컨테이너를 좀 더 효율적으로 관리하고자 하는 시스템의 일환이다. 라고 할 수 있다. 즉 컨테이너 상의 하나의 운영체제 라고 볼 수 있다.

 

쿠버네티스를 사용해야하는 이유는 크게 3가지로 아래와 같다.

 

1. Planet Scale

기본적으로 보그 기반이기에, 구글에서 수 십억 개 단위의 컨테이너를 운영할 수 있게 하는 원칙을 유지하고 있다. 즉 행성규모로 확장할 수 있는 스케일이다.

 

2. Never Outgrow

어떠한 요구 사항이던 어지간하면 만족할 수 있는 유연함을 가지고 있다. 또한 테스트용 로컬 규모로부터 글로벌 서비스 규모까지 유연하게 크기 조정이 가능하며, 필요한 기능이 없을 경우 CRD를 통해 확장이 가능하다.

 

3. Run Anywhere

온프레미스/퍼블릭 클라우드/하이브리드 환경 어디서나 동작이 가능하며 대부분의 리눅스 환경에서 동작하기 때문에 환경 이동에 제약이 없다.

 

이런 장점이 있지만 주의해야할 상황이 있다.

 

1. 복잡한 클러스터 구성인 만큼 각각에 대한 이해가 필요하다.

 - 다양한 인증서와, 쿠버네티스 자체가 여러 컴포넌트로 구성된 분산 시스템이기 때문이다. 

 - 매니지드 클러스터를 고려하는것이 좋을 수 있다.(AWS EKS, Google GKE 등)

 

2. 방대학 학습량이 필요하다.

 - 1의 문제와 연관되는데 다른 시스템에 비해 더 많은, 다양한 지식이 필요하며, 익혀야하는 기능이 많다.

 

3. 오버 엔지니어링이 될 수 도 있다.

 - 운영하는 서비스에 대한 적합도 검사, 운영 및 관리에 필요한 인력, 비용에 대해 고민해 봐야한다.