![movie](https://img.youtube.com/vi/Ia8IfowgU7s/0.jpg)
[초보를 위한 쿠버네티스 안내서] 컨테이너 오케스트레이션이란?
컨테이너 오케스트레이션
서버의 상태를 관리하기 위한 노력
- 역사
서버를 관리하는 것에 대한 모든 것을 문서화 -> 서버 관리 도구(chef, puppet, ansible ...) 이용 -> 가상화 머신 이용 -> 도커의 등장
도커의 등장
컨테이너의 특징
- 가상머신과 비교하여 컨테이너 생성이 쉽고 효율적
- 컨테이너 이미지를 이용한 배포와 롤백이 간단
- 언어나 프레임워크에 상관없이 애플리케이션을 동일한 방식으로 관리
- 개발, 테스팅, 운영 환경은 물론 로컬 PC와 클라우드까지 동일한 환경을 구축
- 특정 클라우드 벤더에 종속적이지 않음
개발 흐름
Development -> Build(image 생성) -> Ship(Docker Hub에 업로드) -> Run(containerization)
=> 이전에는 어떤 언어와 프레임워크를 사용하는지에 따라 개발 방법이 달랐지만, 도커 도입 이후로 개발 과정이 위처럼 정형화 되었고, 서버의 관리가 굉장히 편해졌음
그 이후
- 도커의 도입으로 서버 관리가 편해진 것은 사실이지만, 도커를 통해 관리하는 어플리케이션이 많아지면서 여전히 손이 많이 가는 부분이 생김
배포는 어떻게 할까 ?
- 여러 서버에서 구동 중인 어플리케이션을 재배포 하기 위해서는 각각의 서버에 접속하여 컨테이너를 종료하고 업데이트된 컨테이너를 다시 실행시켜줘야 한다.
- 여러 서버를 운영하다보면 컨테이너가 실행되고 있지 않은 서버가 생긴다.
- 새로운 컨테이너를 실행하려면 비어있는 서버에 실행하는 것이 좋다.
- 서버가 비어있는지 알기 위해선 모니터링 도구가 필요할 수도 있고, 아니라면 하나하나 접속해서 확인해야할 것이다.
- 여러 서버에 버전 1을 배포 중인 상태에서 버전 2로 배포를 하기 위해선 하나하나 작업해야 한다.
- 만약 버전 2에 문제가 발생하여 버전 1으로 롤백해야 한다면 또 같은 작업을 서버의 수 만큼 진행해야 할 것이다.
=> 한 번에 모든 서버에 대한 배포를 관리하고자 하는 욕구가 생김
서비스 검색은 어떻게 할까 ?
- 프록시 프로그램이 있고, 웹 프로그램이 있다 가정하자.
- 프록시는 웹을 바라보도록 설정
- 웹 서버에 부하가 많아져서 부하를 분산하기 위해 서버를 하나 더 만들었다.
- 중간에 load balancer 를 설치하고, 프록시는 load balancer를 바라보게 하고, load balancer는 적절히 부하를 두 서버에 분산하여 보낸다.
서비스 노출은 어떻게 할까 ?
- 퍼블릭 영역에 프록시 서버를 두고, 들어오는 호스트에 따라 내부 프라이빗 영역에 있는 서버에 연결해준다.
- 새로운 도메인을 등록하면 프록시 서버 설정을 통해 컨테이너와 연결하는 작업이 필요
=> 자동으로 연결되도록 하고자 하는 욕구가 생김
서비스 이상/부하 모니터링은 어떻게 할까 ?
- 서비스에 문제가 생기면 해당 컨테이너의 로그를 확인하고 문제를 해결해야 한다.
- 특정 서비스에 부하가 몰린다면, 새로운 서버를 생성한다든가 조치를 취해야 한다.
=> 이러한 작업을 자동화하는 방법이 필요
Container Orchestration
- 복잡한 컨테이너 환경을 효과적으로 관리하기 위한 도구
=> 서버 관리자 대신 할 일을 해주는 프로그램
- cluster
=> 노드를 하나하나 관리하는 것이 아닌 클러스터 단위로 추상화하여 관리
=> 중앙 제어. 마스터 서버를 하나 두고, 마스터 서버에 명령을 보내면 마스터 서버에서 클러스터에 일괄적으로 명령을 보냄
=> 노드들 끼리 네트워크 통신이 가능해야함
=> 노드의 개수가 수천개, 수만개가 되더라도 잘 작동해야함
- 상태 관리
=> 개발자가 원하는 상태를 작성하면, 오케스트레이션이 원하는 상태에 맞춰 상태를 관리
- 배포 관리
=> 컨테이너를 한 개 더 띄우고자 하는데, 현재 어떤 서버에 여유가 있는지 확인하여 여유가 있는 서버에 어플리케이션을 띄워준다. 여유가 있는 서버가 존재하지 않으면 서버를 하나 더 띄워 그 서버에 컨테이너를 띄워준다. 관리자가 일일이 모든 서버의 상태를 체크할 필요가 없다.
- 배포 버전 관리
=> 버전 관리를 관리자가 하나하나 관리하는 것이 아니라 중앙에서 일괄적으로 관리.
- 서비스 등록 및 조회
=> 프록시 서버는 서버가 등록되는 저장소를 보고 있다가 새로운 서버가 등록되면, 설정을 변경하고, 프록시 서버를 재시작
- 볼륨 스토리지
=> 각 노드 별로, 스토리지 연결 설정을 추상적으로 관리할 수 있게 해준다.
컨테이너 관리도구의 춘추전국시대
=> 컨테이너 오케스트레이션이란 복잡한 컨테이너들을 편리하게 관리하기위한 하나의 개념이고, 다양한 관리 도구들이 쏟아져 나옴. 그 중 하나가 쿠버네티스