GW LABS

Google Cloud StudyJam (7) - Kubernates 본문

Infrastructure/Cloud Computing

Google Cloud StudyJam (7) - Kubernates

GeonWoo Kim 2020. 12. 15. 16:20

Google Cloud StudyJam

이번 포스팅에서는 GCP 내에서 kubernetes를 다루는 방법에 대해 알아본다. kubernetes는 컨테이너 오케스트레이션의 표준으로 자리잡고 있다. 대부분의 클라우드 제공자들은 kubernetes 엔진 및 서비스들을 제공하고 있고 GCP에서는 아주 손쉽게 kubernetes를 사용할 수 있다. 이는 GCP에서 kubernetes를 쉽게 이용할 수 있도록 Google Kubernetes Engine(GKE)을 제공하기 때문이다. 이 포스팅에서는 GCP 내에서의 kubernetes를 다루는 기본적인 사항에 대해 다루기 때문에 kubernetes에 대한 개념과 로컬 개발환경에 대한 포스팅은 아래 링크를 참조하자.

 

 

 

kubernetes 시작하기

Docker와 같은 컨테이너 기술은 개발팀의 개발환경 구성문제, 애플리케이션 단위로 격리하여 코드로 서버를 관리하는 등 다양한 운영과 관련된 문제를 해결해줬다(44bits Docker 필요성 포스팅). 그

gwlabs.tistory.com


 

Google Kubernetes Engine

GKE는 Google 인프라를 사용하여 컨테이너식 애플리케이션을 배포, 관리, 확장할 수 있는 관리형 환경을 제공한다. GKE를 사용하면 아래와 같은 이점을 얻을 수 있다.

 

GKE 실습

다음으로 GKE 실습을 진행해보겠다. 활용할 소스코드들은 위에 링크로 첨부한 "kubernetes 시작하기" 포스팅에서 사용한 소스들을 변경하여 사용한다. 실습소스 저장소는 아래의 링크를 통해서 볼 수 있다.

 

 

 

youlive789/kubernetes-php-example

example for checking concepts of kubernetes using php internal web server - youlive789/kubernetes-php-example

github.com

 

 

리전을 설정하고 GKE 클러스터를 생성

우선 GKE 클러스터를 생성해야 우리의 앱을 kubernetes에 배포할 수 있다. 위의 그림처럼 gcloud config set compute/zone 명령어로 프로젝트의 존을 설정했다. 그 다음 gcloud container clusters create [클러스터 이름] 명령어로 클러스터를 생성할 수 있다. GKE 클러스터를 생성하는 데에 시간이 좀 걸리기 때문에 쉘을 하나 더 생성해서 github 저장소에서 실습 소스를 클론하자.

 

실습 소스들을 클론한 모습

다음으로는 GKE kubernetes에 배포할 이미지를 빌드하고 빌드한 이미지를 gcr 레포지토리에 푸시할 것이다. gcr에 푸시할 때에는 이미지의 태그를 gcr 레포지토리 규칙에 따라 작성해야한다. 아래와 같이 gcr.io/[프로젝트이름]/[이미지이름]:[버전태그] 형태로 빌드해주면 된다.

 

Docker 이미지 빌드
빌드한 이미지를 gcr 레포지토리에 푸시하는 모습

 

사용할 이미지의 준비를 마쳤다. 다음으로는 kubernetes의 deployment 문서를 수정해줄 것이다. 클라우드 쉘쪽에 open editor 버튼을 통해서 현재 폴더에 있는 파일들을 수정할 수 있다. sample-deployment.yaml 문서를 아래와 같이 고친다. 사용할 image의 값을 gcr에 푸시한 이미지 이름으로 바꾸고, imagePullPolicy 항목을 삭제해주면 된다.

 

GKE에 맞는 Deployment 문서로 수정

다음은 kubernetes deployment를 생성하고 서비스를 오픈해주는 것이다. 아래의 명령어들로 손쉽게 kubernetes 서비스를 사용할 수 있다.

 

kubernetes apply sample-deployment.yaml
kubernetes expose deployment sample --type=LoadBalancer

kubernetes 서비스를 생성하는 모스

여기까지 진행했다면 위의 그림과 같이 kubectl get svc로 서비스 목록을 봤을 때, 우리가 생성한 sample 서비스에 로드 밸런서 IP가 할당된 것을 볼 수 있다. 이 IP로 브라우저를 통해 접근하면 아래와 같은 화면을 볼 수 있다. 새로고침 할 때마다 파드 10개를 번갈아가면서 접속이되며 로드밸런싱이 된다는 것을 확인할 수 있다.

 

로드밸런서 IP로 접속한 모습

GCP 콘솔 화면에서도 생성한 서비스들을 모니터링할 수 있는데 Kubernetes Engine > services & ingress 항목을 보면 우리가 생성한 서비스들의 상세정보와 로드밸런서 정보까지 확인할 수 있다. 또한 로드밸런서가 정말로 생성되어 있는지 확인할 수도 있다.

 

우리가 생성한 sample 서비스의 상세정보 화면
로드밸런서가 생성되어 GKE 인스턴스에 트래픽이 분배되고 있음을 알 수 있다.

 

 

여기까지 GKE를 사용하는 방법에 대해 알아봤다. 확실히 로컬 개발 환경에서 Minikube를 이용하는 것보다도 편하다는 느낌이 있다. 큰 규모의 마이크로 서비스 아키텍처가 필요하고 이를 직접 관리해야하는 상황이라면 GKE를 사용하는 것도 아주 좋은 선택이 될 것이다.

Comments