1. 개요


2. GKE란?

2.1. 특징

GCP(Google Cloud Platform)이 제공하는 관리형 Kubernetes 서비스다. 그런데 모든 부분이 관리형으로 제공되는 것은 아니고 마스터 노드가 관리형으로 제공된다.

그 외에 일반 쿠버네티스와의 차별점이 존재한다.

  • 로깅 : Stackdriver(로깅/모니터링)를 이용할 수 있으며 이를 통해 애플리케이션 상태를 확인 가능
  • 빌드 : Google Container Build를 통해 GKE에 배포 가능
  • 권한 : Google 계정을 이용하여 억세스 권한 관리

AWS EKS도 마스터에 대한 관리형 서비스를 제공하는 것은 같다. 근데 GKE는 클러스터 관리를 무료로 제공하지만 EKS는 클러스터마다 시간당 0.20불을 내야 한다. 30일이라면 144불이다.

2.2. 유의할 점

GKE 생성 시 한 프로젝트마다 3개의  C 클래스 IP 대역을 할당해야 하며 이는 이후 수정이 불가능하다. 노드가 얼만큼 증가할지 예상할 수 없기 때문에 최대치를 기준으로 대역을 할당해야 한다.


3. 클러스터 노드

GKE의 클러스터 노드로 GCE(Google Compute Engine)를 사용한다. 이말은 즉 GCE 노드 수만큼 비용이 청구된다. 각 노드는 최소 1분부터 초 단위로 과금된다.

Private 클러스터 구성 시에는 클러스터 리전이 라우터와 VPN 리전과 동일해야 외부에서 접근이 가능하다. 


4. 업그레이드

GKE 클러스터 마스터는 Stable 최신 버전의 쿠버네티스로 자동 업그레이드되며 수동으로도 업그레이드할 수 있다. 

참고로 쿠버네티스의 버전은 Alpha, Beta, Stable로 구분된다. 


5. On-Prem

GKE On-Prem을 사용하면 데이터센터에서도 GKE를 사용할 수 있다.


6. Containter Registry

도커 컨테이너 이미지 관리를 위한 관리형 레지스트리이다. gcr.io/<프로젝트명> 으로 접근 가능하다.

일반 도커 레지스트리를 사용하듯이 docker tag, docker push, docker pull로 접근 가능한데 그 전에 gcloud auth를 통해 구글 단에서 인증을 받아야 한다.

사용료는 저장공간 요금과 네트워크 비용으로 청구된다.


7. CI/CD

7.1. Jenkins

설치는 다음 방법 중 선택하여 설치 가능하다.

  • Helm을 통한 설치
  • Marketplace를 통한 설치

7.2. Spinnaker

넷플릭스에서 개발하여 오픈한 배포 자동화 솔루션이다. 구글 뿐 아니라 AWS, Auzre, OpenStack 등도 멀티 클라우드를 지원한다.


8. GKE에 웹 애플리케이션 배포 

8.1. 컨테이너 이미지 빌드

  • git clone하여 소스 코드를 다운로드한다.
  • docker build -t 명령어를 통해 컨테이너 이미지를 빌드하고 태깅한다.
  • docker images 명령어를 사용하여 확인한다.

8.2.컨테이너 이미지 업로드

  • GKE를 컨테이너 레지스트리에 업로드한다.
  • 그러기 위해서는 컨테이너 레지스트리에 인증하도록 커맨드 라인을 친다. (gcloud auth)
  • docker push를 통해 컨테이너 레지스트리에 업로드한다.

8.3. 컨테이너를 로컬로 실행 (옵션)

  • 로컬 Docker 엔진을 통해 컨테이너 이미지를 테스트 한다. (docker run)

8.4. 컨테이너 클러스터 생성

  • 클러스터는 Compute Engine VM의 풀로 구성한다.
  • gcloud container clusters create hello-cluster --num-nodes=2 (2노드 클러스터 생성)
  • gcloud compute instances list (클러스터의 vm 인스턴스 확인)

8.5. 애플리케이션 배포

  • kubectl create deployment hello-app --images= 명령어를 통해 애플리케이션을 배포한다.
  • kubectl get pods 명령어를 통해 배포에 의해 생성된 파드를 확인한다.

8.6. 애플리케이션 노출

  • 기본적으로 GKE의 애플리케이션은 외부 IP가 없어서 인터넷으로부터 억세스 불가하다.
  • 애플리케이션을 인터넷에 노출하기 위해서는 kubectl expose deployment hello-app --type=LoadBalancer ...를 실행한다.

8.7. 애플리케이션 확장

  • kubectl scale 명령어를 통해 더 많은 복제본을 추가한다.
  • 복제본 2개를 추가하여 총 3개로 구성하려면 kubectl scale deployment hello-app --replicas=3 명령어를 수행한다.
  • 결과를 확인하려면 kubectl get deployment hello-app을 실행한다.

8.8. 신버전 배포

  • docker build -t, ducker push 명령어를 통해 이미지를 만든 후 컨테이너 레지스트리에 푸시한다.
  • 그리고 kubectl set image deployment... 명령어를 통해 순차적 업데이트를 기존 환경에 적용한다.

8.9. 삭제

  • 서비스 삭제는 kubectl delete service hello-app을 수행한다.
  • 컨테이너 클러스터 삭제는 gcloud container clusters delete hello-app을 수행한다.

9. 모니터링

GKE prometheus pod 모니터링에 대해 알아본다.