컨테이너 오케스트레이션

Chori·2025년 11월 13일
post-thumbnail

초보를 위한 쿠버네티스 안내서를 수강하며 정리한 내용입니다.


서버의 상태를 관리하기 위한 노력

첫 번째 아이디어: 문서화

  • 방법: 프로그램을 설치하는 방법을 세세하게 문서로 작성
  • 문제점: 아무리 문서를 잘 만들어도 환경(OS, 버전 등)이 바뀌면 잘 되지 않는 경우가 발생할 수 있음

두 번째 아이디어: 서버 관리 도구

  • 방법: Ansible, Puppet, Chef와 같은 도구를 사용, 사용자가 직접 서버에 접속해서 명령어를 입력하는 대신에 서버 관리자가 서버 상태를 어떻게 관리하고 싶은지 설정해두면 도구가 그에 맞춰서 수행
  • 문제점: 관리 도구에 대한 학습 필요, 서버 관리가 복잡해지면 도구 사용 방법도 어려워짐

세 번째 아이디어: 가상 머신

  • 방법: 새로 생성한 가상 머신에 프로그램 설치
  • 장점: 하나의 가상 머신에 하나의 프로그램만 실행되어 충돌과 같은 문제가 발생 가능성을 낮출 수 있음
  • 단점: 속도가 느리고 특정 벤더에 의존성이 생김, 클라우드 환경에 적합하지 않을 수 있음

네 번째 아이디어: 도커

  • 방법: 모든 실행 환경을 컨테이너로 구성
  • 장점
    • 가상 머신과 비교하여 컨테이너 생성이 쉽고 효율적
    • 컨테이너 이미지를 이용한 배포와 롤백이 간단
    • 언어나 프레임워크에 상관없이 애플리케이션을 동일한 방식으로 관리
    • 개발, 테스팅, 운영 환경은 물론 로컬 PC와 클라우드까지 동일한 환경 구축
    • 특정 클라우드 벤더에 종속되지 않음
  • 도커를 사용하는 흐름: 코드 작성 -> 도커 이미지 생성 -> 도커 허브나 별도의 저장소에 보관 -> 도커 이미지를 컨테이너로 실행
  • 한계: 관리해야 할 컨테이너가 너무 많아지면 운영하기 어려워짐

도커 그 이후

문제 상황

  • 여러 서버에 직접 접속해서 컨테이너를 관리하기에는 번거로움
  • 컨테이너를 실행하기에 여유가 있는 서버를 찾아야 함
  • 다량의 컨테이너에서 롤아웃/롤백을 할 때 중앙에서 관리하고 싶은 요구
  • 새로 컨테이너와 도메인을 등록하면 관련 요청이 해당 컨테이너로 전달되도록 설정 자동화 요구
  • 서비스 이상, 부하 모니터링과 대응 자동화 요구

복잡한 컨테이너 환경을 효과적으로 관리하기 위한 도구의 필요성이 높아졌고 여기에 사용되는 것이 컨테이너 오케스트레이션 기술

컨테이너 오케스트레이션

첫 번째 특징: 클러스터

  • 노드를 각각 관리하지 않고 클러스터 단위로 추상화하여 관리
  • 노드에 일일이 접속하기 어렵하기 때문에 마스터 서버를 두고 관리자는 마스터 서버에 명령어 사용, 마스터 서버가 노드들에게 명령어 전달
  • 클러스터에 속한 노드 간에 네트워크 통신이 잘 되어야 함
  • 노드의 개수가 수 만개가 되더라도 잘 동작해야 함, 부하를 잘 견디도록 설계해야 함

두 번째 특징: 상태 관리

  • 관리자가 상태를 변경하면 컨테이너 오케스트레이션이 자동으로 그에 맞춰서 작업 수행

세 번째 특징: 배포 관리

  • 어떤 서버에 여유가 있는지를 자동으로 파악해서 애플리케이션 배포

네 번째 특징: 버전 관리

  • 직접 애플리케이션의 버전을 관리하지 않고 중앙에서 관리

다섯 번째 특징: 서비스 등록 및 조회

  • 애플리케이션이 실행되고 특정 주소가 부여되면 중앙 서버에 등록
  • 프록시 서버는 서비스가 등록된 저장소를 관찰하다가 변경이 감지되면 내부적으로 설정을 바꾸고 프로세스 재시작
  • 관리자가 IP 주소를 일일이 바꿀 필요 없이 프로그램이 자동으로 재설정

여섯 번째 특징: 볼륨 스토리지

  • 노드에 볼륨을 마운트 할 때 직접 관리하지 않고 설정을 이용해 추상적으로 관리

쿠버네티스 소개

  • 컨테이너를 쉽고 빠르게 배포 / 확장하고 관리를 자동화하는 오픈소스 플랫폼
  • 컨테이너를 쉽게 관리하고 연결하기 위해 논리적인 단위로 그룹화
profile
전부인 것처럼, 전부가 아닌 것처럼

0개의 댓글