최근 개인적으로 이직을 하고 연말, 연초다 보니 포스팅이 소홀해졌는데, 새해 새마음으로 다시 포스팅을 시작하려고 합니다, 새해에 사내 스터디로 쿠버네티스를 공부하기로 했는데, 관련 내용을 공부하며, 같이 블로그에 정리를 해보고자 합니다. 학습할 때 참고한 책은 쿠버네티스 입문 입니다.


컨테이너(Container)

컨테이너는 기존의 리눅스에서 자원을 격리해서 사용할 수 있는 cgroup과 특정 디렉토리로 권한을 제한하는 chroot 등의 격리 환경을 구성할 수 있었는데, 여기에 변경 사항을 레이어 형태로 저장하는 파일 시스템을 합해 컨테이너라는 개념을 탄생시켰습니다.

간단히 말해서 격리된 공간에서 프로세스가 동작하게 해주는 가상화 기술입니다.

[왼쪽 : VM, 오른쪽 : 컨테이너]

기존의 VM (Virtual Machine)은 가상화를 위해서 하이퍼바이저 위에 개별 게스트 운영체제가 있고 그 위에 어플리케이션이 올라가지만, 컨테이너는 호스트 운영체제 위에 도커가 올라가고 바로 어플리케이션이 올라갑니다. 이렇듯 컨테이너는 하나의 호스트 운영체제위에서 자원을 공유해 사용하기 때문에 가볍습니다.


도커 (Docker)

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다. 다양한 프로그램, 실행환경 등을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줍니다.

도커에서는 컨테이너이미지라는 개념이 가장 중요한데, 이미지는 컨테이너 실행에 필요한 파일들과 설정을 가지고 있는 개념으로 변하지 않습니다. 컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장이 됩니다. 이러한 도커 이미지는 간단한 명령어를 통해서 손쉽게 만들고, 저장할 수 있습니다.

도커에 대해서 더 자세히 알고 싶으면 이전에 포스팅 했던 Docker 정리에서 확인할 수 있습니다.


컨테이너 오케스트레이션 시스템

도커가 컨테이너를 사용하기 편하게 만들면서 어플리케이션 개발 과정 전반적으로 큰 혁신을 가져왔습니다. 하지만 실제 상용 서비스를 하다보면 여러 서버를 운영해야하는데, 매번 배포때마다 여러대 서버에 컨테이너를 배포하는 전체 과정을 수동으로 제어해야 합니다. 이러한 불편함을 해결하기 위해 컨테이너 오케스트레이션 시스템들이 나타났습니다.

컨테이너 오케스트레이션 시스템을 사용하면 상용 서비스에 사용할 서버들을 클러스터로 구성하기만 하면 명령어 한번으로 자동 배포할 수 있습니다. 또 클러스터 일부에 장애가 발생하면 시스템이 알아서 장애가 발생한 서버에 있는 컨테이너를 정상 운영 중인 다른 서버로 옮겨서 실행하며 트래픽도 자동으로 중지시키고 새로 옮겨서 실행시킵니다.


쿠버네티스(Kubernetes)

쿠버네티스는 2014년 구글에서 사용하기 위해 만들었던 컨테이너 오케스트레이션 시스템인 보그(borg)를 오픈 소스로 공개한 것입니다. Kubernetes라고도 부르고 k8s 라고도 표기합니다.

쿠버네티스의 특징은 아래와 같습니다.

  • 선언적 API : 쿠버네티스가 어떤 상태가 되야 할지만 설정하면 지속해서 컨테이너의 상태를 확인하여 설정한 상태에 맞춥니다.
  • 워크로드 분리 : 쿠버네티스는 분산된 프로세스의 관리를 추상화하는 레이어가 있어 시스템 운영에서 많은 고민을 덜어줍니다.
  • 어디서나 실행 가능 : Local, On-Premise, Cloud 환경 어디서나 손 쉽게 사용할 수 있습니다.
  • 커뮤니티 : 다양한 커뮤니티가 존재하여 필요한 정보를 쉽게 얻을 수 있습니다.