초보를 위한 쿠버네티스 안내서를 수강하며 정리한 내용입니다.
서버의 상태를 관리하기 위한 노력
첫 번째 아이디어: 문서화
- 방법: 프로그램을 설치하는 방법을 세세하게 문서로 작성
- 문제점: 아무리 문서를 잘 만들어도 환경(OS, 버전 등)이 바뀌면 잘 되지 않는 경우가 발생할 수 있음
두 번째 아이디어: 서버 관리 도구
- 방법: Ansible, Puppet, Chef와 같은 도구를 사용, 사용자가 직접 서버에 접속해서 명령어를 입력하는 대신에 서버 관리자가 서버 상태를 어떻게 관리하고 싶은지 설정해두면 도구가 그에 맞춰서 수행
- 문제점: 관리 도구에 대한 학습 필요, 서버 관리가 복잡해지면 도구 사용 방법도 어려워짐
세 번째 아이디어: 가상 머신
- 방법: 새로 생성한 가상 머신에 프로그램 설치
- 장점: 하나의 가상 머신에 하나의 프로그램만 실행되어 충돌과 같은 문제가 발생 가능성을 낮출 수 있음
- 단점: 속도가 느리고 특정 벤더에 의존성이 생김, 클라우드 환경에 적합하지 않을 수 있음
네 번째 아이디어: 도커
- 방법: 모든 실행 환경을 컨테이너로 구성
- 장점
- 가상 머신과 비교하여 컨테이너 생성이 쉽고 효율적
- 컨테이너 이미지를 이용한 배포와 롤백이 간단
- 언어나 프레임워크에 상관없이 애플리케이션을 동일한 방식으로 관리
- 개발, 테스팅, 운영 환경은 물론 로컬 PC와 클라우드까지 동일한 환경 구축
- 특정 클라우드 벤더에 종속되지 않음
- 도커를 사용하는 흐름: 코드 작성 -> 도커 이미지 생성 -> 도커 허브나 별도의 저장소에 보관 -> 도커 이미지를 컨테이너로 실행
- 한계: 관리해야 할 컨테이너가 너무 많아지면 운영하기 어려워짐
도커 그 이후
문제 상황
- 여러 서버에 직접 접속해서 컨테이너를 관리하기에는 번거로움
- 컨테이너를 실행하기에 여유가 있는 서버를 찾아야 함
- 다량의 컨테이너에서 롤아웃/롤백을 할 때 중앙에서 관리하고 싶은 요구
- 새로 컨테이너와 도메인을 등록하면 관련 요청이 해당 컨테이너로 전달되도록 설정 자동화 요구
- 서비스 이상, 부하 모니터링과 대응 자동화 요구
복잡한 컨테이너 환경을 효과적으로 관리하기 위한 도구의 필요성이 높아졌고 여기에 사용되는 것이 컨테이너 오케스트레이션 기술
컨테이너 오케스트레이션
첫 번째 특징: 클러스터
- 노드를 각각 관리하지 않고 클러스터 단위로 추상화하여 관리
- 노드에 일일이 접속하기 어렵하기 때문에 마스터 서버를 두고 관리자는 마스터 서버에 명령어 사용, 마스터 서버가 노드들에게 명령어 전달
- 클러스터에 속한 노드 간에 네트워크 통신이 잘 되어야 함
- 노드의 개수가 수 만개가 되더라도 잘 동작해야 함, 부하를 잘 견디도록 설계해야 함
두 번째 특징: 상태 관리
- 관리자가 상태를 변경하면 컨테이너 오케스트레이션이 자동으로 그에 맞춰서 작업 수행
세 번째 특징: 배포 관리
- 어떤 서버에 여유가 있는지를 자동으로 파악해서 애플리케이션 배포
네 번째 특징: 버전 관리
- 직접 애플리케이션의 버전을 관리하지 않고 중앙에서 관리
다섯 번째 특징: 서비스 등록 및 조회
- 애플리케이션이 실행되고 특정 주소가 부여되면 중앙 서버에 등록
- 프록시 서버는 서비스가 등록된 저장소를 관찰하다가 변경이 감지되면 내부적으로 설정을 바꾸고 프로세스 재시작
- 관리자가 IP 주소를 일일이 바꿀 필요 없이 프로그램이 자동으로 재설정
여섯 번째 특징: 볼륨 스토리지
- 노드에 볼륨을 마운트 할 때 직접 관리하지 않고 설정을 이용해 추상적으로 관리
쿠버네티스 소개
- 컨테이너를 쉽고 빠르게 배포 / 확장하고 관리를 자동화하는 오픈소스 플랫폼
- 컨테이너를 쉽게 관리하고 연결하기 위해 논리적인 단위로 그룹화