Tech

쿠버네티스를 시작하는 방법

by 파시스트 posted Dec 31, 2018
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

Serdar Yegulalp | InfoWorld


모든 혁신에는 항상 새로운 문제가 뒤따른다. 컨테이너는 편리하고 이식 가능한 폼 팩터로 애플리케이션을 패키징해 실행할 수 있게 해주지만 대규모로 컨테이너를 관리하는 일은 좋게 말해 … 무척 까다롭다.
 

ⓒ Getty Images Bank 


이 문제를 해결하기 위해 구글 내부적으로 만든 쿠버네티스는 전체 클러스터에서 컨테이너가 실행되는 방법을 관리하기 위한 단일 프레임워크를 제공한다. 쿠버네티스가 제공하는 서비스는 "오케스트레이션(orchestration)"이라는 포괄적인 용어로 표현되는 경우가 많은데, 컨테이너 일정 관리, 컨테이너 간 서비스 검색, 시스템 전반의 부하 분산, 롤링 업데이트/롤백, 고가용성 등 상당히 넓은 범위를 포괄한다.

이번 가이드에서는 쿠버네티스를 설정하고 컨테이너 기반 애플리케이션으로 쿠버네티스를 채우는 과정의 기본을 단계별로 알아본다. 이 가이드의 목적은 쿠버네티스의 개념을 소개하는 것이 아니라, 간단한 쿠버네티스 실행 예를 통해 이 개념이 어떻게 실현되는지 보여주는 데 있다.
 

쿠버네티스 배포판 사용하기

쿠버네티스는 리눅스 컨테이너 관리를 위해 태어났다. 쿠버네티스 1.5부터는 윈도우 서버 컨테이너도 지원하지만 쿠버네티스 제어 영역은 여전히 리눅스에서 실행해야 한다. 물론 가상화 덕분에 모든 플랫폼에서 쿠버네티스를 접할 수 있다.

자체 하드웨어 또는 VM에서 쿠버네티스를 실행하려는 경우, 일반적인 방법은 패키징된 쿠버네티스 배포판을 받는 것이다. 배포판은 보통 업스트림 쿠버네티스 비트와 완전한 배포에 필요한 다른 요소(컨테이너 레지스트리, 네트워킹, 스토리지, 보안, 로깅, 모니터링, 지속 통합 파이프라인 등)이 결합되어 있다. 또한 쿠버네티스 배포판은 일반적으로 아마존 EC2(Amazon EC2), 애저 버추얼 머신(Azure Virtual Machines), 구글 컴퓨트 엔진(Google Compute Engine), 오픈스택(OpenStack) 등 모든 가상 머신 인프라에 설치, 실행할 수 있다.

쿠버네티스 배포판은 수십 가지에 이르는데, 몇 가지 예를 들면 캐노니컬 쿠버네티스(Canonical Kubernetes), 클라우드 파운드리 컨테이너 런타임(Cloud Foundry Container Runtime), 메소스피어 쿠버네티스 서비스(Mesosphere Kubernetes Service), 오라클 리눅스 컨테이너 서비스(Oracle Linux Container Services), 피보탈 컨테이너 서비스(Pivotal Container Service), 랜처(Rancher), 레드햇 오픈시프트(Red Hat OpenShift), 수세 CaaS 플랫폼(Suse CaaS Platform) 등이 있다. 캐노니컬, 레드햇, 수세 배포판은 쿠버네티스와 리눅스 배포판을 묶어 제공하므로 운영체제에서 쿠버네티스를 설정하는 과정이 필요없다. 다운로드하고 설치하는 프로세스뿐만 아니라 구성 및 관리 프로세스도 일부 생략된다.

다른 방법은 일반적인 리눅스 배포판 위에서 쿠버네티스를 실행하는 방법이다. 다만 관리 오버헤드가 더 크고 손이 많이 가는 편이다. 예를 들어 레드햇 엔터프라이즈 리눅스의 패키지 리포지토리에는 쿠버네티스가 있지만 레드햇조차 이 쿠버네티스는 테스트 용도로만 사용할 것을 권장한다. 현재 오픈시프트는 자체 네이티브 오케스트레이터로 쿠버네티스를 사용하므로 레드햇 스택 사용자라면 일일이 직접 맞추려 하지 말고 오픈시프트 PaaS를 통해 쿠버네티스를 사용하는 것이 좋다.

많은 기존 리눅스 배포판이 쿠버네티스 및 여타 대규모 소프트웨어 스택을 설정하기 위한 특수한 툴을 제공한다. 예를 들어 우분투는 클라우드 인스턴스와 베어메탈 인스턴스에서 모두 쿠버네티스 업스트림 버전을 배포하는 데 사용할 수 있는 컨저-업(conjure-up)이라는 툴을 제공한다. 캐노니컬도 스냅(Snap) 패키지 시스템을 통해 설치되는 쿠버네티스 버전인 MicroK8s를 제공한다.
 

클라우드에서 쿠버네티스 서비스 사용하기

쿠버네티스는 구글 클라우드 플랫폼(Google Cloud Platform, GCP)의 네이티브 기능이지만 사실 많은 클라우드에서 표준 항목으로 쿠버네티스를 사용할 수 있다. GCP가 제공하는 쿠버네티스 실행 방법은 크게 두 가지다. 가장 편리하고 견고하게 통합되는 방법은 생성된 클러스터를 쿠버네티스 명령줄 툴을 실행해 관리할 수 있게 해주는 구글 쿠버네티스 엔진을 사용하는 방법이다.

대안으로 구글 컴퓨트 엔진을 사용해 수동으로 컴퓨팅 클러스터를 설정하고 쿠버네티스를 배포하는 방법도 가능하다. 더 많은 수작업이 필요하지만 컨테이너 엔진에서는 불가능한 맞춤 설정이 가능하다. 컨테이너를 처음 접한다면 컨테이너 엔진을 사용하는 편이 좋다. 이후 쿠버네티스에 익숙해지고 쿠버네티스 맞춤 버전이나 자체 수정판 등 더 고급 기능을 시도해 보고 싶다면 그때 쿠버네티스 배포판을 실행하는 VM을 배포하면 된다.

아마존에서는 원래 EC2에 컴퓨팅 클러스터를 배포하는 방법으로 쿠버네티스를 실행해야 했다. 지금도 옵션으로 이 방법을 사용할 수 있지만 현재 아마존은 쿠버네티스용 일래스틱 컨테이너 서비스(Elastic Container Service for Kubernetes, EKS)를 제공한다. EKS에서는 아마존이 제어 영역에서 실행하므로 사용자는 원하는 구성으로 사용할 컨테이너를 배포하는 데 집중할 수 있다. 또한 EKS는 쿠버네티스의 표준 업스트림 에디션을 실행한다. 한 가지 유용한 기능은 쿠버네티스와 나머지 AWS 포트폴리오의 통합이다. AWS 서비스는 EKS에서 쿠버네티스 네이티브 맞춤 리소스 정의(Custom Resource Definitions)로 나타난다. 즉, AWS 또는 쿠버네티스의 어느 부분을 변경하더라도 이러한 연결이 끊어지는 일은 없다.

많은 쿠버네티스 배포판에는 AWS를 비롯한 여러 환경에서의 설정을 위한 세부적인 지침이 함께 제공된다. 예를 들어 레드햇 오픈시프트는 대화형 설치 프로그램이나 스크립트를 통해, 또는 테라폼(Terraform) "코드형 인프라(infrastructure-as-code)" 프로비저닝 툴을 사용해 하나 또는 여러 개의 호스트에 설치할 수 있다. 또는 쿠버네티스 캅스(Kops) 툴을 사용하면 구글 클라우드 엔진, VM웨어 v스피어 및 기타 사용 중인 클라우드를 지원하도록 AWS에서 일반 VM의 클러스터를 프로비저닝할 수 있다.

마이크로소프트 애저는 애저 쿠버네티스 서비스를 통해 쿠버네티스를 지원한다. 애저가 쿠버네티스 마스터 노드를 관리하고, 사용자는 리소스 매니저(Resource Manage) 템플릿 또는 테라폼을 통해 클러스터를 만든다. 마스터 노드와 에이전트 노드를 모두 제어하고자 한다면 애저 버추얼 머신에 쿠버네티스 배포판을 설치하면 된다. 다만 AKS를 사용하면 마스터 노드 사용에는 비용이 청구되지 않으므로 에이전트에 대한 비용만 지불하면 된다는 중요한 이점을 얻을 수 있다.

클라우드든 아니든 다양한 환경에서 기본 쿠버네티스 클러스터를 신속하게 프로비저닝하는 한 가지 방법은 쿠버네티스 애니웨어(Kubernetes Anywhere)라는 프로젝트를 사용하는 것이다. 이 스크립트는 구글 컴퓨트 엔진, 마이크로소프트 애저, VM웨어 v스피어(v센터 필요), 오픈스택에서 작동한다. 각각의 경우 쿠버네티스 애니웨어가 설정의 일정 부분을 자동화해준다.
 

미니큐브를 사용해 로컬에서 쿠버네티스 실행하기

개발 머신과 같은 로컬 환경에서만 쿠버네티스를 실행할 예정이고 다양한 부가 기능까지는 필요없다면, 이 용도에 맞게 "적당한 만큼만" 설정할 수 있는 방법이 몇 가지 있다.

이 가운데 하나는 쿠버네티스 개발 팀 자체에서 제공하는 미니큐브(Minikube)라는 툴이다. 이 툴을 실행하면 원하는 가상화 호스트에 싱글노드 쿠버네티스 클러스터가 배포된다. 미니큐브에는 몇 가지 전제 조건이 있지만 맥OS, 리눅스 또는 윈도우에서 모두 손쉽게 충족할 수 있다.
 

쿠버네티스 데모 앱 실행하기

쿠버네티스를 실행하면 이제 컨테이너를 배포하고 관리한 준비가 됐다. 다양한 컨테이너 기반 앱 데모 가운데 하나를 사용해 컨테이너 운영을 익힐 수 있다.

기존 컨테이너 기반 앱 데모를 하나 골라서 직접 만져보면서 어떻게 구성되는지 살펴보고 배포한 다음, 조금씩 수정해 자신에게 유용한 무언가로 만들어 보자. 미니큐브를 선택했다면 헬로 미니큐브(Hello Minikube) 자습서를 통해 싱글노드 쿠버네티스 데모 설치에서 간단한 Node.js 앱이 포함된 도커 컨테이너를 만들 수 있다. 감을 잡고 나면 자체 컨테이너로 바꿔 넣어서 배포 연습을 할 수 있다.

다음 단계는 프로덕션에서 사용하는 애플리케이션과 비슷한 예제 애플리케이션을 배포하면서 포드(pod, 애플리케이션을 구성하는 하나 이상의 컨테이너), 서비스(포드의 논리적 집합), 복제본 집합(머신 장애 시 자가 치유 제공), 배포(애플리케이션 버전 관리)와 같은 고급 쿠버네티스 개념에 익숙해지는 것이다.

예를 들어 워드프레스(WordPress)/MySQL 샘플 애플리케이션에서는 각 조각을 쿠버네티스에 배포해서 실행하는 방법에 대한 지침도 있지만 다른 내용도 있다. 여기서 프로덕션 수준의 쿠버네티스 애플리케이션에 사용되는 많은 개념에 대한 구현 세부사항도 볼 수 있다. 영구 볼륨을 설정해 애플리케이션 상태를 보존하는 방법, 서비스를 사용해 포드를 상호, 또는 외부에 노출하는 방법, 애플리케이션 암호와 API 키를 비밀로 저장하는 방법 등을 알아볼 수 있다.

위브웍스(Weaveworks)에는 스톡 숍(Stock Shop)이라는 예제 앱이 있다. 이 앱은 마이크로서비스 패턴을 사용해서 쿠버네티스에서 애플리케이션을 구성하는 방법을 보여준다. 스톡 숍은 기반 기술인 Node.js, 고(Go) 키트, 스프링 부트(Spring Boot)에 익숙한 사람에게 가장 유용하지만 핵심 원칙은 특정 프레임워크를 초월해 클라우드 네이티브 기술에 전반적으로 해당된다.

워드프레스/MySQL 애플리케이션을 보면 '내 요구 사항을 충족하는 사전 제작된 쿠버네티스 앱이 있지 않을까'라는 생각이 드는데, 실제로 그런 앱이 존재할 가능성이 있다. 쿠버네티스에는 쿠버네티스 애플리케이션을 위한 패키징, 버전 관리 및 공유 방법을 제공하는 헬름(Helm)이라는 애플리케이션 정의 시스템이 있다. 깃랩(GitLab), 워드프레스 등 여러 가지 인기있는 앱과 앱 빌딩 블록(MySQL, Nginx)에는 쿠버네티스 포털을 통해 즉시 사용할 수 있는 헬름 "차트"가 있다.
 

쿠버네티스를 사용한 컨테이너 관리하기

쿠버네티스는 포드, 서비스와 같은 강력한 추상화(abstractions)를 통해 컨테이너 관리를 간소화하는 동시에 포드와 서비스, 배포를 분리하는 데 사용할 수 있는(예를 들어 개발, 스테이징 및 프로덕션 워크로드) 레이블, 네임스페이스 등의 메커니즘을 통해 높은 유연성도 제공한다.

앞의 예제 가운데 하나를 택해 여러 네임스페이스에서 다양한 인스턴스를 설정하면 각 네임스페이스의 구성요소를 상호 독립적으로 변경하는 과정을 연습할 수 있다. 이후 배포를 사용해서 이러한 업데이트가 지정된 네임스페이스의 전체 포드로 점진적으로 롤아웃되도록 할 수 있다.

다음 단계는 인프라 관리를 위한 툴로 쿠버네티스를 조작하는 방법을 배울 차례다. 예를 들어 퍼펫(Puppet)에는 쿠버네티스에서 리소스를 만들고 조작하기 위한 모듈이 있다. 마찬가지로 해시코프(HashiCorp)의 테라폼도 리소스로서의 쿠버네티스에 대한 지원을 강화하고 있다. 

이런 리소스 관리자를 사용할 계획이라면 툴마다 기본 전제가 상당히 다를 수 있음을 유의해야 한다. 예를 들어 퍼펫과 테라폼은 기본적으로 각각 가변성 인프라와 불변성 인프라를 사용한다. 이런 원칙과 동작의 차이에 따라 필요한 쿠버네티스 환경을 만들기가 쉬울 수도, 어려울 수도 있다. editor@itworld.co.kr

원문보기: http://www.itworld.co.kr/news/113214#csidx204477a89dcc13183cf797f334e095a onebyone.gif?action_id=204477a89dcc13183






Articles

1 2 3 4 5 6 7 8 9 10