ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Google Container Engine
    Container 2016. 4. 18. 09:00
    반응형
    구글에서는 구글 컴퓨트 엔진에서 컨테이너를 이용한 서비스 운영을 할 수 있도록 해주는 구글 컨테이너 엔진(Google Container Engine, GCE)이라는 서비스를 하고 있다. 구글 컨테이너 엔진은 구글의 컨테이너 관리 시스템인 보그(Borg)를 오픈소스화한 쿠버네티스(Kubernetes)를 이용한다. Borg의 구성과 장단점은 Large-scale cluster management at Google with Borg라는 논문으로 2015년 초에 발표되었다. 구글은 이미 컨테이너 시스템을 10년 넘게 서비스에 이용해 왔고 이런 노하우를 이용해서 GCE 서비스를 하고 있다. 쿠버네티스 자체를 사용자가 운영할 필요없이 구글이 직접 운영해주기 때문에 운영부담없이 서비스를 사용하기만 하면 된다.
    여기서는 구글 컨테이너 엔진을 이용하는 방법을 알아 본다.
     
     
    구글 컴퓨트 엔진 사용 준비
    쿠버네티스의 명령행 인터페이스(Command Line Interface, CLI)kubectl을 실행할 수 있는 환경이어야 한다. 리눅스와 맥 OS X 가 사용가능하고 윈도우는 지원하지 않는다.
    구글 계정이 있어야 한다.
    구글 컴퓨트 엔진에 있는 계정이 지불가능한 상태여야 한다. 구글 컴퓨트 엔진을 이용하고 난 후의 비용을 지불할 수 있게 결제수단이 등록되어 있어야 한다.
    구글 개발자 콘솔에서 구글 컨테이너 엔진 API와 이와 관련되어서 구글 컴퓨트 엔진과 관련된 API들이 사용가능한 상태로 설정되어 있어야 한다.
    구글 개발자 콘솔의 왼쪽 메뉴에서 [APIs & auth] => APIs 메뉴로 들어가면 설정가능한 API 목록들을 확인할 수 있다.

    여기서 Compute Engine APIContainer Engine API등 필요한 API를 선택해서 Enable API 버튼을 눌러서 사용가능하게 해주면 된다.
    gcloud 명령행 인터페이스가 있어야 한다. 컨테이너 엔진 APIgcloud를 이용해서 클러스터를 관리하기 때문에 필요하다.
    gcloud의 자세한 설치법은https://cloud.google.com/sdk/에서 확인 가능하다.
    리눅스나 맥 OS X 환경에서는 아래처럼 간단하게 gcloud를 설치할 수 있다.
    구글 클라우드 SDK 설치
     
    셀 재시작
    exec -l $SHELL
     
    구글 클라우드 플랫폼에 인증하기
    gcloud auth login
     
    인증에 성공하면 아래처럼 성공했다는 웹페이지를 볼 수 있게 된다.

     
     
    kubectl 설치. 아래처럼 gcloud를 이용해서 설치할 수 있다.
    gcloud components update kubectl
     
    이제 gcloud에서 사용할 프로젝트를 설정해 보자.
    우선 개발자 콘솔에서 Create Project 버튼을 이용해서 프로젝트를 생성하자.

     
    여기서는arisucontainer라는 이름을 이용했다.
    프로젝트를 새로 생성했다면 앞에서도 한번 나왔지만 사용하려는 API들을 enabled 상태로 변경하자.
     
    이제 아래처럼 gcloud에서 사용할 프로젝트를 설정하면 된다. PROJECTID에는 개발자 콘솔에서 보이는 Project ID를 입력하면 된다.
    gcloud config set project PROJECTID

     
    이제 프로젝트에서 사용할 zone을 설정하자.
    gcloud config set compute/zone ZONE
    이용 가능한 ZONE에는 미국, 유럽, 아시아가 있는데 여기서는 아시아(asia-east1-a)를 선택해서 진행한다.
     
    이제 컨테이너에서 사용할 클러스터를 설정해 보자.
    우선 개발자 콘솔에서 컨테이너의 클러스터를 만들자. 아래처럼 container enginecontainer clusters를 선택한 후 “Create container cluster”를 이용해서 사용할 클러스터를 생성한다.

     
    testcluster라는 이름으로 클러스터를 생성했다.

     
    이걸 gcloud에서 사용할 기본 클러스터로 설정해 주자.
    gcloud config set container/cluster CLUSTER_NAME
     
    설정이 잘 됐으면 아래와 같은 결과를 볼 수 있다.
    gcloud config list

     
    이제 준비가 됐으니 컨테이너 엔진에 앱을 배포해보자.
    간단한 Node.js 앱을 배포해 보도록 하자.
     
    우선 사용할 프로젝트의 ID를 시스템 환경변수로 등록해놓고 시작한다.
    export PROJECT_ID="xxx-xxx-xxx"
     
    그리고 간단한 node.js 소스를 만들자. 아래 내용을 server.js 파일로 저장한다.
    var http = require('http');
     
    var handleRequest = function(request, response) {
      response.writeHead(200);
      response.end("Hello World!");
    }
     
    var www = http.createServer(handleRequest);
     

    그리고 이 소스로 docker 이미지를 만들기 위해서 Dockerfile을 만든다.
    FROM node:0.12
    COPY server.js /server.js
    CMD node server.js 

    그런 다음 docker 이미지를 만든다. 이때 앞서 등록했던 PROJECT_ID 변수를 이용한다.
     
    이렇게 만들어진 이미지를 구글 컨테이너 저장소(Google Container Registry)에 업로드 한다.
     
    이제 방금 업로드한 docker 이미지를 실행할 클러스터를 구성해 보자. 클러스터는 구글이 제공해주는 마스터 API서버와 구글 컴퓨트 엔진의 VM인 워커 노드(worker node)들로 구성된다. 워커 노드를 몇개를 사용할지는 처음에 클러스터를 만들때 설정한다.
    여기서는 간단한 샘플이기 때문에 CPU 1개에 메모리 1.7GB인 작은 g1-small 타입의 노드 하나만 이용한다.
    gcloud를 이용해서 아래처럼 클러스터를 생성한다.
    gcloud container clusters create hello-world \
        --num-nodes 1 \
        --machine-type g1-small
     
    생성한 후에는 아래 명령을 이용해서 사용중인 인스턴스 목록을 확인해 볼 수 있다.
    gcloud compute instances list
     
    쿠버네티스에서는 컨테이너 묶음을 포드(pod)라고 한다. 포드는 1개 이상의 컨테이너를 가질 수 있다. kubectl 을 이용해서 포드를 만들 수 있다.
    kubectl run hello-node --image=gcr.io/${PROJECT_ID}/hello-node --port=8080
     
    이렇게하면 hello-node 이미지를 이용하는 컨테이너를 1개 가진 포드가 만들어 진다. 포드의 기본설정은 클러스터 내부에서의 통신만 허용하고 있다. 이제 외부에서도 포드에 접근할 수 있게 설정해 보자.
    kubectl expose rc hello-node --create-external-load-balancer=true
     
    이렇게하면 쿠버네티스 마스터가 로드밸런서를 만들고, 컨테이너 엔진에 포워딩하는 규칙, 대상 풀, 방화벽 규칙등을 만든다.
     
    포드에 접근하기 위한 로드밸런서의 IP는 다음과 같이 확인한다.
    kubectl get services hello-node

    그러면 IP 부분에 2개의 IP가 나오는데 10.207.241.168 대역의 아이피는 클라우드 내부 네트워크를 위한 내부용 IP, 나머지 아이피인104.155.227.2가 외부용 아이피다.
    이제 웹 브라우저에서 http:// 104.155.227.2:8080으로 접근해보면 정상적으로 Hello World!가 출력되는걸 볼 수 있다.
     
    컨테이너 엔진 서비스의 장점 중 하나는 이 상태에서 원하는 만큼 지정된 docker 이미지를 실행하는 추가 노드를 쉽게 추가할 수 있다는 것이다.
    간단히 아래 명령을 입력하면 노드가 3개로 늘어난걸 볼 수 있다.
    kubectl scale rc hello-node --replicas=3
     
     
    이렇게 생성된 클러스터를 삭제하려면 생성했던 역순으로 삭제하면 된다.
    우선 로드밸런서를 지우고
    kubectl delete services hello-node
     
    포드를 지우고
    kubectl stop rc hello-node
     
    클러스터를 지운다.
    gcloud container clusters delete hello-world

     
     
    참조
    https://cloud.google.com/container-engine/?utm_source=google&utm_medium=cpc&utm_campaign=2015-q2-cloud-japac-kr-gke-bkws-freetrial-en&gclid=CjwKEAjw7O6vBRDpi7O-8OWSkwESJACNFsgxCDKzPpCwBfbbpOxBFgDzUf7WFcWBkJvKUWGZL0ol0hoC6kDw_wcB
     
     
    반응형

    댓글

Designed by Tistory.