티스토리 뷰

이전에 봤던 Compute Engine은 클라우드에서 가상 머신을 지속적인 저장, 네트워킹, App Engine을 가능하게 하는 GCP IaaS를 제공하였습니다. Kubernetes Engine은 IaaS와 비슷하며 또한, 개발자들의 수요에 의해 구축되었기에 PaaS offering과도 비슷합니다.

* Infrastructure as a service (IaaS) offering은 하드웨어를 가상화하여 compute resource를 공유할 수 있습니다.

 

각 가상 머신은 하나의 운영체제에 대한 인스턴스가 존재합니다. 가상 머신에서 memory, file systems, networking interfaces, 물리적인 컴퓨터들이 갖고 있는 다른 특징에 접근하며 application을 구축하고 운영할 수 있습니다. 하지만 유연성은 비용이 듭니다. 이런 환경에서 compute의 가장 작은 unit은 application을 포함한 가상 머신입니다. 

 

Guest OS는 gigabyte처럼 큰 용량일지도 모릅니다. 그래서 부팅을 할 때 몇 분이 걸릴 수도 있습니다. 가상 머신은 구성이 용이하고 tool을 선택하여 설치하고 실행할 수 있습니다. 디스크와 네트워킹 같은 기본 시스템 리소스를 설정할 수 있습니다. 그리고 웹 서버 데이터베이스 또는 미들웨어를 설치할 수 있습니다. 수요가 증가하면, 전체 가상 머신의 단위를 guest os와 함께 규모를 늘려야 합니다. 이 의미는, 리소스 소비가 생각보다 더 빨리 성장한다는 것입니다.

 

반면, PaaS App Engine은 빈 가상 머신을 얻는 것이 아니라 application이 필요로 하는 서비스의 묶음에 접근하게 되는 것입니다. 그래서 코드와 독립적인 라이브러리와 서비스를 사용하는 self-contained 워크로드를 작성하기만 하면 됩니다. Application에 대한 수요가 증가하면서, 워크로드와 인프라에 의해 platform이 application을 균일하고 독립적으로 확장합니다. 빠르게 확장되지만, 근본적인 서버 아키텍처 제어를 포기해야 합니다. 이때, 컨테이너를 사용합니다.

 

1. Containers

Container는 소프트웨어를 묶는 방법으로, 운영체제 인스턴스를 갖고 있지 않습니다. 컨테이너 개념은 PaaS 환경과 운영체제와 하드웨어의 abstraction layer에서 마치 IaaS인 것처럼 독립적인 워크로드의 확장성을 제공합니다. 그리고 새로운 프로세스를 빠르게 시작합니다. 각각의 host에서 컨데이터와 컨테이너 run-time을 제공하는 운영체제를 사용하기만 하면 됩니다. 본질적으로, 운영체제를 시각화하는 것입니다. 환경이 PaaS와 같이 확장되지만, IaaS와 같은 유연성을 줍니다.

 

Container abstraction은 코드를 이동하기 쉽도록 합니다. 그래서 OS와 하드웨어를 블랙박스처럼 사용할 수 있습니다. 코드를 개발에서부터 staging이나 생산까지 또는 개인 컴퓨터에서부터 cloud까지 변경과 재구축 없이 이동할 수 있습니다. 예를 들어, web server를 확장하고 싶다면, 몇 초만에 할 수 있습니다. 그리고 워크로드의 크기에 따라 하나의 host에 다수의 서버를 배치할 수 있습니다.

 

2. Kubernetes

Micro-services pattern은 여러 컨데이터들이 각각의 기능을 수행하는 것입니다. 이런 컨테이너에서 실행되는 코드 unit들은 network fabric을 통해 커뮤니케이션할 수 있습니다. 이렇게 application modular를 제작할 수 있습니다. Application moudar는 host group 사이에서 컨테이너를 쉽게 배치하고 독립적으로 확장시킬 수 있습니다. 호스트는 application의 요구에 따라 컨테이너를 확장하거나 축소할 수 있고, 시작하고 멈출 수 있습니다. 호스트가 fail 하거나 재배치되는 동안에도 가능합니다. 이것을 도와주는 것이 Kubernetes입니다. Kubernetes는 많은 호스트에서 여러 컨테이너들이 조직되기 쉽게 만들어 줍니다. 확장하고, 새로운 버전을 roll out 하고, 오래된 버전을 roll back 할 수 있습니다.

 

3. Docker

컨테이너 이미지의 가장 흔한 포맷은 오픈 소스 툴인 Docker로 정의된 것입니다. 예를 들어, Docker로 application이나 dependency를 묶을 수 있습니다. 다른 툴도 사용할 수 있습니다. Google Cloud는 컨테이너를 구축하는 서비스를 관리하는 Cloud Build를 제공합니다.

 

Application을 배포할 때, 컨테이너에 어떻게 코드를 패키지화했는지 명시하기 위해 docker file을 사용합니다. 예시로, 개발 환경과 똑같은 방식으로 python을 설치할 수 있습니다. 'requirements.txt' 파일로 application dependency를 설치하고, 반복적으로 사용할 수 있습니다. 파일을 이용해 application을 만들고 컨테이너를 어떻게 launch 하고,실행하는지 환경에게 전달하는 것입니다. 그 후, 컨테이너를 빌드하기 위해 Docker build command를 사용합니다. Docker build command로 local system에 실행 가능한 이미지로 컨테이너를 구축하고 저장할 수 있습니다. Image를 실행할 땐, docker run command를 사용하면 됩니다. 현업에서는 Google Container Registry와 같은 Container Registry service에 이미지를 업로드하고 공유하거나 다운로드할 것입니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크