[KUBERNETES] 컨테이너 오케스트레이션

김맥스·2023년 8월 9일

데브옵스

목록 보기
6/8
post-thumbnail

컨테이너의 특징

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

Containerization

  • 프로그램을 컨테이너화해서 사용하는 것

  • 도커의 등장으로 프로그램 개발과정이 정형화됨 -> 일단 도커 이미지 만드는게 핵심

도커의 불편함

  • 컨테이너의 개수가 무수히 많아지면 관리가 어려워짐

1. 배포 측면

  • 도커 서버 3대가 있다고 할 경우, 각각 서버의 컨테이너를 실행하려면 각 서버에 접속해서 각각 docker run을 해줘야 함
    • 즉, 하나하나 접속해서 배포하고 관리해야 하는 불편함이 존재
  • 도커 서버가 여러개가 있을 경우, 놀고 있는 서버에 새로운 컨테이너를 실행시켜야 하는데 어떤 서버가 여유가 있는지 확인하려면 모니터링 도구가 필요하거나 하나하나 접속해서 관리해야 하는 불편함도 있을 수 있음
  • 배포 후 컨테이너별 버전관리도 손이 많이 감

2. 서비스 검색 측면

  • 로드밸런서를 끼더라도 ip 많아지면 관리 어려워짐

3. 서비스 노출

  • 보통 public 영역에 nginx같은 프록시 서버를 하나 두고 거기에 들어오는 host에 따라 private에 있는 host에 연결하는 방법이지만, 이것도 추후 손이 많이 가게 되는 작업

4. 서비스 이상, 부하 모니터링

  • 같은 서버 컨테이너가 3개가 돌다가 하나의 컨테이너가 죽으면 남은 2개의 서버에 부하가 생길 수 있고, 서버가 죽지 않았는데 트래픽이 많아지면 부하가 걸려 느려질 수 있다. 이와 같은 상황을 위해 자동화가 필요함

Container Orchestration

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

특징

  1. 클러스터(cluster)

    • 이전에는 서로 다른 노드의 CPU와 RAM 상태 등을 각각 관리
    • 하지만 노드 수가 증가하면 관리가 어렵기 때문에, 컨테이너 오케스트레이션에서는 클러스터 단위로 추상화해서 관리함
    • 클러스터 하나하나의 노드에 ssh로 직접 접속하는 것이 어렵기 때문에 마스터 서버를 두고 마스터 서버에 명령을 던지면 알아서 노드에 명령을 보낸다
    • 클러스터 내 노드끼리는 서로 통신이 잘 되어야 함
    • 노드 규모가 커지더라도 잘 돌기 위해 부하를 감당하도록 잘 설계되어야 함
  2. 상태관리(state)

    • 트래픽 증가나 서버 장애 등이 발생했을 때 자동으로 서버를 늘려준다
  3. 배포관리(scheduling)

    • 여유가 있는 서버에 자동으로 배포
  4. 배포 버전관리(rollout & rollback)

    • 전체 컨테이너에 대한 버전관리를 중앙에서 처리
  5. 서비스 등록 및 조회(service discovery)

    • 프록시 서버가 새로 등록 or 수정된 ip를 자동으로 관리
  6. 볼륨 스토리지(volume)

    • 각 서버에 필요한 어떤 볼륨을 마운트해주는 것을 설정으로 실행

참조
초보를 위한 쿠버네티스 안내서

profile
3년차 백엔드 개발자의 공부 기록

0개의 댓글