구글이 처음 개발해 오픈소스화한 쿠버네티스 프로젝트는 현재 독립 기관인 클라우드 네이티브 컴퓨팅 재단(Cloud Native Computing Foundation)이 관리한다. 쿠버네티스는 애저를 포함한 모든 주요 퍼블릭 클라우드 플랫폼에서 제공한다. 데이터센터 운영체제라고 할 수 있는 쿠버네티스는 컨테이너화된 애플리케이션이 사용하는 리소스를 모니터링하고 각 요소를 기반 인프라에 배치해 서비스가 올바르게 수행되도록 보장하고 컨테이너 요구 사항과 기반 인프라 역량 간의 매핑을 관리한다.
마이크로소프트의 쿠버네티스 구현은 현재 애저의 컨테이너 서비스에 포함되며, 최신 애저 CLI 릴리스를 통해 접근할 수 있다. 쿠버네티스와 도커의 대부분은 익숙한 명령줄 도구를 사용해 조작하므로 애저에서도 명령줄을 사용하는 것은 적절한 선택이다. 애저 CLI는 데스크톱 PC에서 실행되지만 다른 옵션도 있다. 애저의 클라우드셸(CloudShell)은 윈도우 배시(Bash) 셸과 마찬가지로 iOS 및 안드로이드 기기에서 실행되는 브라우저 또는 애저 클라이언트에 배시 프롬프트를 제공한다.
애저 컨테이너 서비스는 컨테이너 관리와 오케스트레이션을 위한 세 가지 접근 방법을 제공한다. 애저는 쿠버네티스 외에 메소스피어(Mesosphere)의 DC/OS와 도커의 스웜(Swarm), 컴포즈(Compose)를 지원하며, 리눅스와 윈도우 컨테이너 모두에서 사용할 수 있다. 또한 이러한 도구를 위한 표준 API 엔드포인트도 제공하므로 기존의 지속적 통합 툴체인 및 다른 컨테이너 관리 툴에 통합할 수 있다.
애저 리소스 그룹 시작
쿠버네티스로 관리되는 클러스터를 만드는 과정은 간단하다. 먼저 클러스터를 위한 애저 리소스 그룹을 설정한다. 그려면 애저에서 클러스터가 호스팅되는 위치가 정의되고 모든 명령을 위한 네임스페이스가 제공된다. 네임스페이스에 클러스터를 만들려면 오케스트레이터(이 경우 쿠버네티스)를 선택하고 클러스터 이름을 지정하고 컨테이너 관리를 위해 쿠버네티스에 안전하게 연결하는 데 사용되는 SSH 키를 생성한다.
애저에서 클러스터가 실행되면 쿠버네티스의 명령줄 클라이언트를 사용해서 데스크톱 또는 애저 클라우드셸에서 클러스터를 관리할 수 있다. 그러면 컨테이너를 배포하기 전에 도커 허브 리포지토리 또는 자신의 시스템에서 쿠버네티스 클러스터의 현재 상태를 볼 수 있다. 이미지가 배포되면 애플리케이션을 외부 환경에 노출하기 전에 부가적인 쿠버네티스 명령을 사용해 네트워킹 서비스를 설정할 수 있다.
쿠버네티스는 매니페스트 파일을 사용해 개체를 배포하고 관리한다. 이러한 파일은 YAML로 작성되므로 일반적인 텍스트 편집기에서 손쉽게 편집할 수 있다. 애저의 쿠버네티스 구현에서 한 가지 유용한 점은 애저용 플러그인이 이미 설치된 상태이므로 표준 쿠버네티스 매니페스트에서 사용하는 서비스에 대한 YAML 설명으로 스토리지와 같은 애저 리소스를 손쉽게 관리할 수 있다는 것이다.
다른 매니페스트 파일에는 현재 배치 중인 서비스 컨테이너의 세부 사항이 포함되며, 일단 배치되면 하나의 명령줄로 애플리케이션을 호스팅하는 쿠버네티스 팟(pod)이 생성된다. 쿠버네티스 명령줄은 실행 중인 항목을 보여주고 네트워킹을 관리한다.
쿠버네티스와 같은 데이터센터 자동화 툴은 필요에 따라 규모의 확장과 축소를 처리할 수 있으므로 현대적인 애플리케이션을 구축하는 데 있어 중요한 요소다. 팟의 규모를 확장하고 축소하는 과정은 비교적 간단하다. 명령줄을 사용해서 사용 중인 복제본의 수를 조절하거나 CPU 제한에 따라 자동으로 팟을 추가하는 규칙을 설정할 수 있다. 예를 들어 서비스 YAML에서 한계치를 적용한 CPU 리소스를 요청하는 규칙을 작성할 수 있다. 그런 다음 쿠버네티스 명령줄을 사용해서 배포되는 최소 팟과 최대 팟을 설정해 자동으로 배포 환경 규모를 조절할 수 있다.
쿠버네티스는 사용하기 어렵지는 않지만 최대한 활용하기 위해서는 단순히 클러스터를 설정하고 규모 조정이 되는 팟을 배포하는 것 이상의 작업이 필요하다. 사용할 리소스에 대한, 그리고 리소스에 따른 규모 조정 방법에 대한 고민이 필요하다. 또한 쿠버네티스 배포를 예를 들어 오퍼레이션 매니지먼트 스위트(Operations Management Suite)와 같은 다른 애저 서비스에 연결하는 것도 좋은 방법이다. OMS 에이전트가 쿠버네티스 클러스터에서 실행되면서 애저 대시보드에 컨테이너 진단 정보를 제공한다.
개발자를 위한 쿠버네티스 관련 툴
마이크로소프트는 오픈소스를 계속 지지하면서 애저에 쿠버네티스 도구를 더 추가하기 위해 최근 엔진 야드(Engine Yard)의 데이스(Deis) 팀을 인수했다. 데이스의 워크플로우(Workflow), 헬름(Helm), 스튜어드(Steward) 외에 이제 쿠버네티스에서의 애플리케이션 개발 속도를 높여주는 툴인 드래프트(Draft)가 추가됐다. 드래프트는 완전한 애플리케이션 배치에 초점을 두는 대신 개발자에게 샌드박스 배포, 그리고 친숙한 버전 제어 시스템에 대한 링크가 포함된 쿠버네티스 지원 컨테이너 집합을 신속하게 구성할 수 있는 방편을 제공한다.
데이스의 다른 쿠버네티스 툴 및 도커와 연계 작동하도록 만들어진 드래프트는 마이크로서비스의 대표 주자인 파이썬과 Node.js를 포함한 익숙한 프로그래밍 언어와 환경을 지원한다. 애플리케이션의 드래프트 설명을 만들기는 쉽다. 기존 자산을 가져와 이를 편집하기 쉬운 구성 파일 집합과 함께 도커로 패키징하면 된다. 그 결과로 얻는 패키지 집합은 테스트를 위해 쿠버네티스 호스트로 업로드된다. 개발자가 개발 시스템에서 수행하는 변경 사항은 바로바로 호스트에 적용된다. 드래프트는 쿠버네티스 작업을 시작하는 과정을 간소화하며 애저의 컨테이너 서비스와 함께 사용할 수 있다.
쿠버네티스 프로젝트의 창시자 중 한 명인 브랜던 번스는 현재 애저 팀에 소속되어 있다. 번스는 최근 컨퍼런스 프레젠테이션에서 쿠버네티스와 같은 툴이 새로운 PaaS 세대의 기반이라고 주장했다. 설득력이 있는 이야기다. 컨테이너가 마이크로서비스 호스팅 수단이 되고 쿠버네티스가 규모의 확장과 축소를 처리하기 위한 유연한 토대가 되면 개발자는 기반 인프라에 대해 알 필요가 없다. 코드, 그리고 애플리케이션이 사용할 수 있는 리소스에 대한 한계를 설정하는 몇 가지 규칙만 있으면 된다.
호스팅되는 마이크로서비스 개발 환경과 도커 컨테이너 지원을 혼합한 애저의 서비스 패브릭(Service Fabric) PaaS 최신 버전에서 이러한 접근 방식에 해당되는 요소를 볼 수 있다. 사용자는 코드에 대해서만 생각하면 되고, 기반이 되는 인프라에 대해서는 신경 쓸 필요가 없다. 쿠버네티스와 같은 데이터센터 운영체제를 사용하면 인프라는 아무래도 좋기 때문이다.
애저에서 쿠버네티스를 지원하는 것은 마이크로소프트 클라우드 플랫폼이 지향하는 방향을 보여주는 지표다. 또한 가상 인프라와 애플리케이션을 구축하고 배포하는 방법을 재고할 이유이기도 하다. 그러한 역할의 대부분을 수행하고 코드를 호스팅하는 서버를 처리하고 확장을 관리하는 일을 쿠버네티스와 같은 툴에 맡기는 것이 좋은 이유는 아주 많다. 사용자가 할 일은 코드를 가져와 드래프트와 같은 툴을 사용해 쿠버네티스 인프라를 신속하게 구축하고 이를 기존 개발 툴체인 및 프로세스와 연계하는 것뿐이다. editor@itworld.co.kr