Terraform으로 VPC 및 클러스터 만들기

개요

Terraform은 AWS와 같은 클라우드 환경을 구성하고 Kubernetes와 같은 소프트웨어를 설치할 수 있는 오픈소스 도구입니다. Terraform이나 GKE on AWS 설치 안내를 통해 AWS 환경을 구성하고 클러스터를 만들 수 있습니다.

이 페이지에서는 Terraform을 사용하여 AWS 환경을 구성하고 GitHub에 저장된 샘플 구성을 사용하여 클러스터를 설치하는 방법을 설명합니다. 이러한 스크립트를 사용하려면 Terraform에 대한 기본 지식이 필요합니다. 특히 Terraform 구성 파일을 수정하여 사용자 및 프로젝트 정보를 추가하고 기본 클러스터 구성을 변경해야 합니다.

Terraform을 사용하지 않고 AWS 환경을 구성하고 클러스터를 만들려면 AWS 기본 요건 개요클러스터 만들기 안내를 참조하세요.

스크립트 기능

이 스크립트는 Terraform에서 AWS VPC를 만들고 여기에 클러스터를 배포하도록 구성합니다. 결과 VPC는 모든 GKE on AWS 기본 요건을 충족하며 Google의 수동 VPC 생성 안내에서 만든 VPC와 동일한 네트워크 토폴로지를 갖습니다.

스크립트 세트가 생성되는 클러스터의 특징은 다음과 같습니다.

  • 제어 영역 노드 3개(구성된 가용성 영역 3개 각각에 하나씩) 이러한 노드는 t3.large 유형입니다.
  • t3.large 유형의 노드 2개가 있는 노드 풀 1개 이 노드 풀은 AWS us-east-1 리전에 배포되며 노드 5개로 자동 확장할 수 있습니다.

기본 VPC 및 클러스터 변경 방법

적절한 Terraform 파일을 수정하여 Terraform 스크립트에서 만든 VPC와 클러스터의 특성을 변경할 수 있습니다.

  • variables.tf 파일을 수정하여 리전과 가용성 영역을 조정합니다.
  • AWS 인스턴스 유형을 변경합니다.
  • modules/vpc 하위 폴더에서 파일을 수정하여 서브넷, 가용성 영역, 부하 분산기를 포함한 VPC 특성을 변경합니다.

특정 Google Cloud 리전 및 연결된 Kubernetes 버전에서 제어되는 AWS 리전의 목록을 보려면 다음 명령어를 실행합니다.

gcloud container aws get-server-config --location `GOOGLE_CLOUD_REGION`

GOOGLE_CLOUD_REGION을 GKE on AWS에서 클러스터를 제어할 Google Cloud 리전의 이름으로 바꿉니다.

기본 요건

  1. Google Cloud CLI 설치 안내를 따라 Google Cloud CLI를 설치합니다. 이미 설치했으면 다음 안내를 따라 버전 412.0.0 이상이 실행 중인지 확인합니다.

  2. AWS CLI 설치 안내를 따라 AWS CLI를 설치합니다.

  3. AWS 액세스 키를 만듭니다.

  4. 다음 명령어를 사용하여 로컬 AWS 환경을 구성합니다.

    aws configure
    

Terraform 준비

  1. 다음 명령어를 실행하여 Google Cloud CLI 인증을 구성합니다.

    gcloud config set project GOOGLE_PROJECT_ID
    gcloud auth application-default login --no-launch-browser
    
  2. Google Cloud 프로젝트에서 필요한 서비스를 사용 설정합니다.

    gcloud --project="GOOGLE_PROJECT_ID" services enable \
      gkemulticloud.googleapis.com \
      gkeconnect.googleapis.com \
      connectgateway.googleapis.com \
      cloudresourcemanager.googleapis.com \
      anthos.googleapis.com \
      logging.googleapis.com \
      monitoring.googleapis.com \
      opsconfigmonitoring.googleapis.com
    

    GOOGLE_PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.

  3. 저장소의 로컬 사본을 만들고 AWS 폴더로 변경합니다.

    git clone https://github.com/GoogleCloudPlatform/anthos-samples.git
    cd anthos-samples/anthos-multi-cloud/AWS
    

GKE on AWS 배포

  1. terraform.tfvars 파일에서 다음 줄을 수정하여 기본값을 바꿉니다.

    gcp_project_id = GOOGLE_PROJECT_ID
    admin_users = ["GCP_ACCOUNT_EMAIL"]
    

    다음을 바꿉니다.

    • GOOGLE_PROJECT_ID: Google 프로젝트 ID로 바꿉니다. Google Cloud 콘솔의 대시보드 페이지 왼쪽에 표시됩니다.

    • ACCOUNT_EMAILS: 클러스터가 생성된 후 클러스터에 로그인할 수 있는 쉼표로 구분된 이메일 주소 목록입니다(예: "admin@example.com","operator@example.com"). 하나 이상의 주소에 Google Cloud 계정이 있어야 합니다. 클러스터에 ID 공급업체를 추가하려면 GKE Identity Service로 ID 관리를 참조하세요.

  2. Terraform 계획을 초기화하고 만듭니다.

    terraform init
    

    Terraform은 Google Cloud 제공업체와 같은 필요한 라이브러리를 설치합니다.

  3. Terraform 계획을 적용하여 AWS Virtual Private Cloud 및 클러스터를 만듭니다.

    terraform apply
    

    안내에 따라 클러스터 만들기를 시작합니다.

설치하는 데 12분 정도 걸립니다. Terraform에서 AWS Virtual Private Cloud 및 클러스터 만들기가 완료되면 클러스터에 대한 정보를 출력하고 var.sh라는 파일이 생성됩니다. 추가 노드 풀을 만들 경우 이 파일의 값을 사용할 수 있습니다.

클러스터가 성공적으로 생성되었는지 확인하려면 Google Cloud 프로젝트의 Google Cloud 콘솔 Kubernetes Engine 페이지에 표시되는지 확인합니다.

클러스터에 연결

클러스터에 대한 연결을 확인하고 세부정보를 가져오려면 다음 명령어를 실행합니다.

   gcloud container fleet memberships get-credentials CLUSTER_NAME
   kubectl get nodes

CLUSTER_NAME을 클러스터 이름으로 바꿉니다. var.sh Terraform 출력 파일에 클러스터 이름이 표시됩니다.

출력에는 클러스터에 있는 노드 목록과 해당 상태가 포함됩니다.

클러스터 및 AWS Virtual Private Cloud 삭제

클러스터와 AWS Virtual Private Cloud를 삭제하기 전에 다음 항목을 모두 삭제해야 합니다.

  • AWS Virtual Private Cloud의 모든 활성 AWS 부하 분산기
  • Terraform으로 만들지 않은 클러스터의 추가 노드 풀
  • Terraform으로 만들지 않은 AWS Virtual Private Cloud의 추가 클러스터

Terraform으로 만든 클러스터와 AWS Virtual Private Cloud를 삭제하려면 다음 명령어를 실행합니다.

terraform destroy

Terraform은 노드에서 워크로드를 드레이닝하고, 기본 노드 풀 및 클러스터를 삭제하고, AWS Virtual Private Cloud를 삭제합니다.

Cloud Logging 및 Cloud Monitoring 승인

Cloud Logging 및 Cloud Monitoring을 사용 설정하려면 클러스터를 만든 후 Google Cloud 프로젝트에 허용 정책을 추가해야 합니다.

Google Cloud CLI로 허용 정책을 추가합니다.

gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:PROJECT_ID.svc.id.goog[gke-system/gke-telemetry-agent]" \
--role=roles/gkemulticloud.telemetryWriter

PROJECT_ID를 프로젝트 ID로 바꿉니다.

다음 단계

Terraform GKE on AWS 스크립트에 대한 자세한 내용은 다음을 참조하세요.