Kubernetes, 흔히 K8s라고도 불리는 이 기술은 Google이 자사의 컨테이너 운영 경험을 바탕으로 개발한 오픈 소스 프로젝트입니다. 현재 Kubernetes는 최고의 컨테이너 오케스트레이션 기술 중 하나로 널리 인정받고 있습니다. 이번 포스팅에서는 Kubernetes를 고수준에서 이해해보도록 하겠습니다.
Kubernetes를 이해하려면 먼저 "컨테이너"와 "오케스트레이션"이라는 두 가지 개념을 이해해야 합니다. 이 두 용어에 익숙해지면 Kubernetes가 무엇을 할 수 있는지 이해할 수 있을 것입니다.
컨테이너는 응용 프로그램과 그 종속성을 포함하는 독립적인 실행 환경입니다. 가장 인기 있는 컨테이너 기술인 Docker를 통해 컨테이너가 무엇인지 살펴보겠습니다.
A 프로젝트에서 웹 서버(Node.js), 데이터베이스(MongoDB), 메시징 시스템(Redis), 오케스트레이션 도구(Ansible) 등의 다양한 기술을 사용하여 엔드 투 엔드 스택을 설정해야 했습니다. 이 과정에서 여러 가지 문제가 발생했습니다.
이 모든 문제를 해결하기 위해 Docker를 도입했습니다. Docker를 통해 각 구성 요소를 독립적인 컨테이너에서 실행할 수 있었으며, 모든 개발자가 동일한 Docker 이미지를 사용하여 일관된 환경을 구축할 수 있었습니다.
Docker는 LXC(Linux Containers)를 사용하여 컨테이너 환경을 설정합니다. Docker 컨테이너는 운영 체제 커널을 공유하지만, 각자 고유한 프로세스, 서비스, 네트워킹 인터페이스, 마운트 등을 가질 수 있습니다.
운영 체제는 커널과 소프트웨어로 구성됩니다. 커널은 하드웨어와 상호 작용하는 역할을 하며, 소프트웨어는 사용자 인터페이스, 드라이버, 컴파일러, 파일 관리자 등을 포함합니다.
Docker 컨테이너는 Docker 호스트의 커널을 공유하며, 각 컨테이너는 추가 소프트웨어만 포함합니다.
컨테이너와 가상 머신(VM)은 각각의 장단점이 있습니다.
Docker 이미지는 패키지나 템플릿과 같으며, 이를 통해 하나 이상의 컨테이너를 생성할 수 있습니다. 컨테이너는 이미지의 실행 인스턴스로, 독립적인 환경과 프로세스를 갖습니다.
Docker는 개발자와 운영 팀 간의 협업을 원활하게 합니다. 개발자는 Docker 파일을 사용하여 필요한 인프라 설정을 이미지로 만들고, 운영 팀은 이를 활용하여 애플리케이션을 배포할 수 있습니다. 이를 통해 개발 환경과 프로덕션 환경의 일관성을 유지할 수 있습니다.
이번 포스팅에서는 Kubernetes의 개요와 함께 컨테이너와 Docker에 대해 살펴보았습니다. Docker는 컨테이너 기술을 통해 개발과 배포 과정에서 발생하는 많은 문제를 해결해줍니다. 다음 포스팅에서는 Kubernetes의 기능과 아키텍처에 대해 다뤄보겠습니다.