쿠버네티스를 배우기전에 서버 가상화 기술의 역사와 도커(Docker)를 간단하게 살펴보겠습니다.
초기에는 애플리케이션을 물리 서버에서 실행했었다. 한 물리 서버에서 애플리케이션의 리소스 한계를 정의할 방법이 없었기에, 리소스 할당의 문제가 발생했다. 리소스 전부를 차지하는 애플리케이션 인스턴스가 있을 수 있고, 결과적으로는 다른 애플리케이션의 성능이 저하될 수 있었다.
하나의 서버에 여래 개의 애플리케이션이 동작하기 때문에 애플리케이션 배포 과정이나 모듈의 충돌로 인해 시스템 장애가 발생하는 경우가 많았다. 여러 개의 애플리케이션을 운영하면서도 충돌이나 간섭이 발생하지 않도록 독립적인 서버 환경을 구축하는 가상화 기술이 각광받게 되었다.
물리버서에 발생하는 단점들을 해결하기 위해 가상화 기술이 도입되었다. 단일 물리서버의 CPU에서 여라 가상 시스템(VM)을 실행할 수 잇게 한다. 가상화를 사용하면 VM간에 애플리케이션을 격리하고 애플리케이션의 정보를 다른 애플리케이션에서 자유롭게 액세스 할 수 없으므로 일정 수준의 보안성을 제공할 수 있다.
가상화를 사용하면 물리 서버에서 리소스를 보다 효율적으로 활용할 수 있으며, 쉽게 애플리케이션을 추가하거나 업데이트할 수 있고 하드웨어 비용을 절감할 수 있어 더 나은 확장성을 제공한다. 가상화를 통해 일련의 물리 리소스를 폐기 가능한(disposable) 가상 머신으로 구성된 클러스터로 만들 수 있다.
물리서버나 가상머신이나 모두 그것을 제어하는 OS를 실행하고 있다. 가상 머신으로 여러 서버를 하나의 물리적 서버에 실행시키더라도 가상머신마다 OS를 실행해야한다. OS는 범용 적으로 사용할 수 있도록 만들어져있는 반면, 많은 기능이 포함되어 그만큼 자원을 필요로 한다. 따라서 이 OS 부분도 공유 할 수 있다면 물리적 서버 한 대당 애플리케이션 집약도를 더 높일 수 있다.
애플리케이션을 실행하기 위해 필요한 자원 (즉 응용 프로그램 자체와 라이브러리, 미들웨어 등)을 하나의 패키지로 묶어 OS 별로 분리하여 여러 애플리케이션을 실행하는 기술이 현재 주목 받고 있다. 이 기술을 컨테이너라고 한다.
도커는 앞서 말한 컨테이너를 기반으로 하여 특정한 서비스를 패키징하고 배포하는데 유용한 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
위의 그림을 보면 알 수 있듯이 도커 플랫폼 위에 컨테이너 구동 중이라는 것을 알 수 있다. 컨테이너 안에 다양한 프로그램, 실행환경을 이미지로 만들고 컨테이너에 배포하여 사용하기 때문에 프로그램의 배포 및 관리를 단순하게 해준다.
컨테이너는 프로세스나 애플리케이션을 독립적으로 구성하기 위해 만들어져서 개별 컨테이너를 생성하고 배치하기는 쉽다. 근데 만약 여러 컨테이너를 모아 하나의 단위로 관리할 수 있는 커다란 애플리케이션을 만들고자 한다면? 문제가 발생한다. 이 때 나온 개념이 컨테이너 오케스트레이션이며, 그 중 하나가 쿠버네티스이다.
쿠버네티스는 컨테이너화된 애플리케이션을 배포하기 위한 오픈소스 오케스트레이터다. 쿠버네티스는 구글이 지난 십여 년 동안 애플리케이션 지향 API를 통해 컨테이너 환경에서 확장성과 신뢰성을 갖춘 시스템을 배포했던 경험으로 만들어졌다.
쿠버네티스란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래했다. K8s라는 표기는 "K"와 "s"와 그 사이에 있는 8글자를 나타내는 약식 표기이다. 구글이 2014년에 쿠버네티스 프로젝트를 오픈소스화했다. 쿠버네티스는 프로덕션 워크로드를 대규모로 운영하는 15년이상의 구글 경험과 커뮤니티의 최고의 아이디어와 적용 사례가 결합되어 있다.
위의 그림을 보면, 쿠버네티스는 컨테이너를 관리해주는 오케스트레이터인 것을 알 수 있으며, 다수의 컨테이너 실행을 관리 및 조율을 해주고, 생성과 소멸, 시작 및 중단 시점 제어, 스케줄링, 로드 밸런싱, 클러스터링 등 모든 과정을 관리할 수 있다. 또한 쿠버네티스는 클라우드 환경에서 애플리케이션을 빌드하고 배포하는 방식을 근본적으로 변화시키기 위해 개발됐다.
쿠버네티스의 특징
참조 : https://kubernetes.io
https://wooono.tistory.com/109?category=929053
https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
댓글 영역