이번에 Google Cloud Platform 클라우드 스터디잼 GKE 중급을 신청하게 되었는데, 강의를 들으며 정리한 내용을 올려보려 한다.

1. 클라우드 컴퓨팅과 구글 클라우드

클라우드 컴퓨팅의 특성

  • 온디맨드 & 셀프서비스: 필요한 처리능력, 스토리지, 네트워크를 사람의 노력 없이 확보 수 있다.
  • 넓은 네트워크 액세스: 어디서나 네트워크를 통해 리소스에 접근
  • 리소스 풀링: 제공업체에서 대규모 풀의 리소스를 고객에게 할당(규모의 경제)
  • 리소스 탄력적 공급: 리소스가 추가로 필요하면 신속히 확보할 수 있고 적게 필요하면 축소
  • 측정된 서비스: 서비스를 사용하거나 예약하는 만큼만 지불

Google Cloud Platform(GCP)

구글 클라우드는 다양한 서비스를 제공한다. 예를들어 코드를 클라우드에서 실행하고 싶을 경우, 아래와 같은 컴퓨팅 리소스 옵션을 제공한다.

  • Compute Engine: 주문형 가상 머신을 실행하게 해 주는 Google Cloud Infrastructure-as-a-Service 솔루션
  • GKE: 클라우드 환경에서 컨테이너화된 애플리케이션을 실행하며, 코드를 패키지화하는 방식으로 Kubernetes는 컨테이너 내부에서 코드를 조정
  • App Engine: 완전 관리형 Platform-as-a-Service 프레임워크입니다 즉 인프라에 대한 걱정 없이 클라우드에서 코드를 실행
  • Cloud Functions: 완전 서버리스 실행 환경 또는 Function-as-a-Service

데이터베이스의 경우, 아래와 같은 옵션을 제공한다.

  • 사용자 직접 설치: Compute Engine / GKE
  • 구글의 관리형 서비스
    • Cloud Bigtable
    • Cloud Storage
    • Cloud SQL
    • Cloud Spanner
    • Datastore

또한, GCP는 완전 관리형 및 빅데이터 머신러닝 서비스를 제공한다.

  • 빅테이터
    • BigQuery
    • Pub / Sub
    • Dataflow
    • Dataproc
    • AI Platform Notebooks
  • 머신러닝
    • Vision API
    • AI Platform
    • Speech-to-Text API
    • Cloud Translation API
    • Cloud Natural Language API

2. 리소스 관리

구글 클라우드는 멀티 리전, 리전, 영역(zone)을 통해 리소스를 제공한다.

멀티 리전은 전 세계를 크게 아메리카, 유럽, 아시아 태평양 세 지역으로 나눈다.

이 멀티 리전들은 리전으로 나뉘게 되는데, 리전은 같은 대륙 내에서 독립된 지리적 위치이다. 리전 내에서는 네트워크 연결이 빠르다(95 percentile에서 1ms 미만의 TTS).

리전은 영역으로 나뉘게 되는데, 영역이란 집중된 지리적 위치 내에 있는 GCP 리소스의 배포 위치(한 리전 내에 위치한 데이터센터 혹은 데이터센터들)를 뜻한다.

Compute Engine 가상 머신 인스턴스는 특정 영역 내에 위치하기 때문에, 해당 영역이 사용 불가 상태가 되면 가상 머신과 워크로드 또한 사용할 수 없게 된다. GKE도 마찬가지로 GCE를 사용해 비슷한 영향을 받을 수 있다. 따라서 멀티 영역에 애플리케이션을 배포하여 내결함성과 고가용성을 확보한다.

Google 데이터 센터는 Google 네트워크를 통해 연결된다. 공개된 추정치에 ,먄 Google 네트워크는 매일 전 세계 인터넷 트래픽의 40%를 담당하는데, 이는 지구에서 가장 큰 네트워크이다.

Google 네트워크는 사용자 앱을 포함한 모든 애플리케이션에 최대 처리량과 최소 지연 시간을 제공하도록 설계되었고, Google 네트워크는 전 세계 90개 이상의 인터넷 교환 시설(Internet Exchange: IX)과 100개 이상의 접속 지점(Point of Presence: PoP)을 통해 공개 인터넷을 연결한다.

사용자가 Google 리소스로 트래픽을 전송하면, Google은 지연 시간이 가장 낮은 에지(edge) 네트워크 위치에서 사용자의 요청에 응답한다. Google의 에지 캐싱 네트워크는 지연 시간을 최소화하도록 사용자 가까이에 콘텐츠를 배치하게 되며, GKE를 비롯한 GCP상의 애플리케이션들은 이 에지 네트워크의 이점을 활용할 수 있다.

GCP 리소스는 지리적 위치를 지정할 수 있고, 대부분 멀티 리전 수준, 리전 수준, 영역 수준 중 어느 수준에서 지정할지도 결정할 수 있다.

영역(Zone) 리소스는 단일 영역 내에서 실행된다. 따라서 해당 영역을 사용할 수 없게 되면 리소스 역시 사용할 수 없다. 예를 들어 GCE 가상 머신 인스턴스와 영구 디스크, GKE의 구성요소의 하나인 ‘노드’가 영역 리소스에 해당한다.

리전(Region) 리소스는 하나의 리전 내, 여러 영역에 걸쳐 실행된다. 리전 리소스를 사용하는 앱은 가용성을 높이기 위해 중복 배포될 수 있다. GKE를 사용해 한 리전 내의 여러 영역에 리소스를 분산할 수 있으며, Cloud Datastore도 중복 방식을 통해 배포할 수 있다.

마지막으로 전역(Global) 리소스는 멀티 리전을 통해 관리된다. 전역 리소스는 애플리케이션의 가용성을 극대화한다. 예를 들어 HTTPS 로드밸런서와 VPC 네트워크가 해당된다.

GCP 리소스는 위치와 상관없이 **프로젝트(Project)**에 속하게 된다. 

  • 프로젝트(Project): GCP 리소스들를 구성하는 기본 수준

  • 리소스 및 서비스의 생성 및 사용은 물론 결제, API, 권한 관리의 기초

  • 리전과 영역 = 물리적 구성 vs 프로젝트 = 논리적 구성

  • 프로젝트는 손쉽게 생성, 관리, 삭제가 가능하며 실수로 삭제할 경우 복구할 수 있다.

  • 각 프로젝트는 고유한 프로젝트 ID와 프로젝트 번호가 부여된다.

  • 프로젝트 이름, 필터링을 위한 라벨 지정 가능(라벨 = 변경가능 / 프로젝트 ID & 프로젝트 번호= 고정)

  • 프로젝트는 ’폴더(folder)‘라는 그룹으로 묶어(프로젝트 < 폴더) 기업의 계층 구조를 반영 및 기업의 정책을 알맞은 수준에서 적용

    • 폴더 내 다른 폴더 중첩 가능(부서별 폴더 > 팀별 하위 폴더 생성)
    • 폴더를 사용하려면 조직이 필요
  • 모든 폴더는 하나의 **조직(organization)**에 포함(프로젝트 < 폴더 < 조직)

    • 조직: GCP 리소스 계층 구조의 루트 노드
    • 조직이 없더라도 GCP를 사용할 수 있다.
    • 조직을 이용해 기업 전반에 적용되는 정책을 설정
    • 조직 설정은 무료
    • 조직 ID(고정) & 표시 이름(변경 가능)
    • 여러 부서와 팀의 리소스 관리 편리
  • Cloud IAM(Cloud Identity and Access Management)

    • 사용자가 사용하는 GCP 리소스에 세부 액세스 제어
    • 신뢰 경계(Trust boundary) & 리소스 격리 구현하는 계층구조 정의 가능
    • 정책은 낮은 레벨로 상속된다 (조직 레벨 적용 → 폴더, 프로젝트, 리소스에 정책 적용)
    • 낮은 레벨에서 정책을 적용해 추가 권한 부여
  • 결제(Billing) → 프로젝트 수준에서 누적

  • 리소스 계층 구조 = 인사 조직도 vs. 프로젝트 결제: 비용 센터 구조

    • 리소스 계층 구조 → GCP 공유 보안 모델에서 중요
    • GCP 상의 애플리케이션의 경우 하위 레이어 보안을 구글이 담당
    • 데이터 보안 등 상위 레이어는 사용자 책임 → 리소스 계층구조, Cloud IAM 등으로 구현

3. 청구(Billing)

  • GCP 결제: GCP 프로젝트 수준에서 설정

  • GCP 프로젝트를 정의할 때 **결제 계정(Billing Account)**을 연결해야 한다.

    • 결제 계정에서 지불 옵션 등 모든 결제 정보를 설정
    • 결제 계정은 하나 이상의 프로젝트에 연결할 수 있다
    • 결제 계정을 연결하지 않은 프로젝트는 무료 GCP 서비스만 사용 가능
    • 결제 계정은 매월 또는 기준액 도달 시 자동으로 청구 및 인보이스 되도록 설정 가능
    • 결제 하위 계정을 설정하면 프로젝트 결제를 분리할 수 있다(Reseller의 경우 고객별로 하위 계정 사용)
  • 과다 청구 방지 도구

    • 예산 및 알림
      • 결제 계정 수준 혹은 프로젝트 수준에서 예산 정의 가능
      • 알림 설정으로 비용이 예산 한도에 근접할 때 알림 & 알림에 대한 응답으로 웹훅이 호출되도록 설정 및 자동화 제어 가능(예: 알림 발생 시 리소스 종료 스크립트 트리거 및 장애 신고 등 기능)
    • 결제 내보내기에서 보기
      • 외부 분석 검색이 손쉬운 곳에 결제 세부정보를 저장(예: BigQuery 데이터 셋 & Cloud Storage 버킷)
    • 보고서 보기
      • 콘솔의 시각적 도구로 프로젝트 또는 서비스를 기준으로 지출을 모니터링
  • 할당량(Quotas) 설정

    • 예기치 못한 추가적인 결제 청구를 제한
    • 할당량은 오류나 악성 공격으로 인해 리소스를 과소비하는 것을 방지하기 위해 설계
    • 프로젝트 수준에서 적용
    • 할당량 종류
      • 비율 할당량: 특정 시점을 기준으로 재설정 가능
      • 배정 할당량: 프로젝트 내에서 보유할 수 있는 리소스 수를 제어(시간이 지나도 재설정되지 않음)

4. Google Cloud 와 상호 작용

  • Google 도구 및 인터페이스

    • Google Cloud Platform Console / 모바일 앱
    • Cloud SDK Cloud Console
    • Cloud Shell
    • REST 기반 API (해당 강의에서는 생략): 개발자가 GCP 리소스를 할당 및 관리하는 앱 구축
  • GCP Console

    • 웹 기반 그래픽 사용자 인터페이스
    • 마우스 클릭으로 리소스 관리
    • GCP 프로젝트와 리소스를 가시적으로 파악
    • 사용 방법: 웹브라우저로 console.cloud.google.com에 접속하여 GCP Console에 로그인
  • Cloud Console 모바일 앱

    • iOS와 Android에서 사용 가능
    • 가상 머신 관리, 가상 머신 로그 조회, 프로젝트의 최신 결제 정보 확인, 예산을 초과하는 프로젝트에 대해 결제 알림 받기, 커스텀 그래프를 설정하여 CPU 사용량과 네트워크 사용량 초당 요청 수, 서버 오류와 같은 주요 항목 표시 등
  • Google Cloud SDK

    • Cloud SDK를 다운로드 및 원하는 컴퓨터에 설치하여 사용
    • Google Cloud Platform용 명령줄 도구 모음: gcloud 및 kubectl 명령어, gsutil 및 bq 유틸리티 등
    • 위의 CLI 도구를 대화형으로 사용하거나, 자동화 스크립트에서 사용 가능
    • 다양한 프로그래밍 언어를 위한 클라이언트 라이브러리 포함
  • Cloud Shell

    • 사용 중인 머신에서 Cloud SDK 설치가 어려운 경우 사용: 인증된 & 최신 상태로 사용 가능
      • 실제로는 과금이 되지 않는 임시 GCE 가상 머신 인스턴스를 이용해 빌드되어있음 (5GB 영구 디스크 스토리지가 연결)
      • 사용자가 상호작용을 멈추면 가상머신의 작동이 중단되며, 다시 접속시 작동을 재시작
      • 따라서 Cloud Shell에서 Production 웹서버 사용하지 않는 것을 권장
    • 브라우저에서 직접 명령줄을 통해 클라우드 리소스에 액세스
    • 웹 미리보기 기능 탑재
    • GKE 리소스를 비롯한 GCP Console 프로젝트 및 리소스에 대한 액세스 인증 기본 제공
    • Cloud Shell 코드 편집기로 브라우저에서 Cloud Shell 환경 내 파일을 실시간으로 편집 가능
    • Cloud Shell 명령 프롬프트에서 텍스트 편집기 사용 가능
    • 코드 우선 앱, 컨테이너 기반 워크로드 작업 시 편리: 변경사항을 다운로드, 업로드하지 않아도 간편하게 파일을 편집(다른 경우에는 적합하지 않을 수 있음)

5. 컴퓨팅 옵션

컴퓨팅 워크로드를 다루기 위한 옵션들은 아래와 같다.

서비스명 설명
Kubernetes Engine 컨테이너화 된 앱들을 배포하기 위한 관리형 환경
Compute Engine 가상 머신을 배포하기 위한 관리형 환경
App Engine 애플리케이션을 배포하기 위한 관리형 서버리스 플랫폼
Cloud Functions 이벤트 주도형 함수를 배포하기 위한 관리형 서버리스 플랫폼

우리는 이 중에서 Kubernetes Engine에 대해 중점적으로 다룰 것이다.