GCP (Google Cloud Platform) 시작하기 (2)

Updated:

지난 포스팅에서는 GCP (Google Cloud Platform) 에 대해 알아보고 가장 기본적인 서비스인 VM(가상머신) 인스턴스를 생성하고 웹서버까지 설치해보았다. 이번 편에서는 쿠버네티스 엔진을 생성하고 설정해보자.

쿠버네티스 (Kubernetes, k8s)

쿠버네티스는 가장 많이 알려진 컨테이너 오케스트레이션 시스템이다. 마치 컨테이너라고 하면 도커를 떠올리는 것처럼 컨테이너 오케스트레이션이라고 하면 쿠버네티스를 가장 먼저 떠올 릴 것이다. 쿠버네티스는 구글에서 2014년에 프로젝트를 오픈소스화했는데 오래전부터 운영한 대규모 컨테이너 시스템에서 얻은 경험과 그 과정에서 발견한 여러 사례들의 집합체라고 할 수 있다. 쿠버네티스는 애플리케이션의 확장과 장애 조치에 용이하며, 특히 기본적으로 무중단 배포를 지원한다. 즉, 지속적인 배포가 가능하다고 할 수 있다.

쿠버네티스 in GCP

클라우드에서 쿠버네티스를 사용하기 위해서는 직접 설치 후 운영할 수도 있지만 이미 퍼블릭 클라우드 사에서는 관리형 쿠버네티스 서비스를 제공하고 있다. 쿠버네티스의 시작이 구글인만큼 GCP 에서는 GKE (Google Kubernetes Engine) 라는 관리형 쿠버네티스 서비스를 안정적으로 사용할 수 있다. 물론 다른 퍼블릭 클라우드인 AWS, Azure 에서도 관리형 쿠버네티스 서비스를 제공하고 있다.

GKE 클러스터 만들기

GCP 에서 GKE 를 사용하기 위해서는 가장 먼저 GKE 클러스터를 생성해야한다.

  1. 사이트에 접속 후, 콘솔에 접속한다. 콘솔에 접속하면 아래와 같다.

  2. Compute Engine > VM 인스턴스 메뉴로 이동한다.

  3. ‘만들기’ 버튼을 클릭한다.

  4. Standard, Autopilot 중에 원하는 버튼을 클릭한다. 테스트용으로 생성하는 것이니 둘 중 원하는 걸로 선택하면 된다. 본 포스팅에서는 Autopilot 으로 생성하였다. Autopilot 같은 경우 클러스터 관리 부담을 덜어준 서비스로 Standard 보다 자동화되어있으나 일부 제한적일 수 있다.

  5. 기본 설정 값에서 아래 2가지를 설정한 후, ‘만들기’ 버튼을 클릭한다. GKE 클러스터를 생성하는데 몇 분 정도 걸린다.
    • 리전 : asia-northeast3(서울)
  6. Cloud Shell 에서 아래 명령어로 GKE 클러스터 생성 확인한다.
    $ kubectl get nodes
    NAME                                                 STATUS   ROLES    AGE   VERSION
    gk3-autopilot-cluster-1-default-pool-9622a709-sstv   Ready    <none>   15m   v1.20.9-gke.1001
    gk3-autopilot-cluster-1-default-pool-ae6cb56b-605x   Ready    <none>   15m   v1.20.9-gke.1001
    
  • 사전에 클러스터 인증을 하지 않으면 타임아웃이 발생할 수 있다. 클러스터 인증 방법은 아래를 참고한다.
    $ gcloud container clusters get-credentials {cluster_id} --region asia-northeast3 --project {project_id}
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for autopilot-cluster-1.
    

쿠버네티스에 애플리케이션 배포

쿠버네티스에 애플리케이션을 배포하려면 먼저 컨테이너 이미지가 필요하다. 직접 컨테이너 이 미지를 생성해도 되고 도커 허브나 각 벤더 레지스트리에서 제공하는 공식 이미지를 사용해도 상관없다. 이미지가 확보되면 다음과 같이 배포하면 된다.

1) 디플로이먼트 생성 2) 서비스 생성

그럼 여기서는 nginx 이미지를 사용해 쿠버네티스에 nginx 애플리케이션을 배포해보자.

  1. Cloud Shell 에서 아래 명령어를 수행하여 nginx 이미지를 사용해 디플로이먼트를 생성한다.
    $ kubectl create deployment my-nginx --image nginx
    deployment.apps "my-nginx" created
    
  2. Cloud Shell 에서 아래 명령어를 수행하여 쿠버네티스 서비스를 생성한다. 배포한 애플리케이션을 외부에 노출하기 위해서는 쿠버네티스 서비스가 필요하다. GKE 의 기본 서비스 유형을 ClusterIP 인데 여기서는 LoadBalancer 유형으로 서비스를 생성했다. LoadBalancer 유형으로 생성된 서비스는 외부 IP 가 할당되어 인터넷을 통해 애플리케이션을 외부에 서비스할 수 있다.
    $ kubectl expose deployment/my-nginx --type=LoadBalancer --port=80
    service/my-nginx exposed
    
  3. 다음 명령어를 통해 생성한 쿠버네티스 리소스를 확인해보자. 파드를 비롯해 디플로이먼트, 레플리카, 서비스 오브젝트가 모두 생성되고, 서비스에는 외부 IP가 할당된 것도 확인할 수 있다.
$ kubectl get all
NAME                            READY   STATUS    RESTARTS   AGE
pod/my-nginx-6b889c5595-rf5zr   1/1     Running   0          5m55s

NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)        AGE
service/kubernetes   ClusterIP      10.114.128.1    <none>         443/TCP        33m
service/my-nginx     LoadBalancer   10.114.129.69   34.64.97.211   80:32558/TCP   2m53s

NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/my-nginx   1/1     1            1           5m55s

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/my-nginx-6b889c5595   1  

쿠버네티스 서비스의 외부 IP 주소로 브라우저에서 접속하면 다음과 같이 nginx 서비스가 구동된 모습을 확인할 수 있다.

쿠버네티스 리소스 삭제하기

  • 리소스를 삭제하지 않으면 과금되어 크레딧이 사용되니, 미리 삭제해주자.

지금까지 GCP (Google Cloud Platform) 에서 쿠버네티스를 생성하고 애플리케이션 배포까지 수행해보았다.