Infra/Kubernetes

Container Orchestration

호나우지규 2021. 9. 24. 09:42

서버를 관리한다는 것 -> 서버의 상태를 관리하기 위한 노력

 

서버 관리 방법

  1. 문서화 - OS 가 바뀌는 등 문서화를 해도 한계점이 있음
  2. chef, puppet, ansible 등 도구를 사용 - 설정을 관리하는 것은 좋으나 설치된것이랑 달라 충돌 날 수 도 있음 + 난이도 높음
  3. VM (가상머신) - 느리지만 관리가 직관적이지 않지만 좋긴 좋음. 그라나 요새 클라우드가 대세인데 클라우드에 알맞지 않음
  4. docker 모든 실행환경을 컨테이너로 함. 어디서든 동작하고 쉽고 효율적임.

 

컨테이너의 특징

  1. 가상머신과 비교하여 컨테이너 생성이 쉽고 효율작
  2. 컨테이너 이미지를 이용한 배포와 롤백이 매우 간단
  3. 언어나 프레임워크에 상관없이 어플리케이션을 동일한 바식으로 관리
  4. 개발, 테스팅, 운영 환경은 물론 로컬 PC와 클라우드까지 동일한 환경을 구축
  5. 오픈소스라서 특정 클라우드 벤더에 종속적이지 않음

 

ex) mysql, redis, rabbitMq, jenins, wordpress 등 다 containerization

 

 

결국 도커라는 기술은 좋긴한데 수백개 수천개 관리할땐 힘듦

ex) ssh 통해 하나하나 씩 서버를 접속해서 관리하기 귀찮다는 뜻

 

Developer (코드작성) -> 빌드 -> ship -> docker(run)

 

 

Proxy -> Web server 

웹서버가 부하되면 하나가 더생김

Proxy가 새로운 웹서버를 바라보지 않으면 안됨

그래서 Load balancer를 이용하면 됨

Proxy -> Load balancer -> Web server 1 / Web server2

 

결국 컨테이너를 다 관리하기 위해서 컨테이너 오케스트레이션이 생김.

 

복잡한 컨테이너 환경을 효과적으로 관리하기 위한 도구 - Container Orchestration

 

특징

  1. 클러스터
    노드를 하나하나 관리하는 것이 아닌 클러스터 단위로 관리
    마스터 서버를 하나를 두고 마스터가 노드에게 명령을 내림
  2. 상태관리
    replicas 가 예를들어 3개 이면 1개가 알 수 없는 오류로 죽었을때, 4개째가 생성됨
  3. 배포 관리 (스케줄링)
  4. 배포 버전 관리
  5. 서비스 등록 및 조회 (service discovery)
  6. 볼륨 스토리지