Terraform을 사용하여 클러스터 만들기 및 워크로드 배포
Kubernetes 클러스터는 가상 데이터 센터와 비슷하게 컴퓨팅, 스토리지, 네트워킹 및 기타 애플리케이션 서비스를 제공합니다. Kubernetes에서 실행되는 앱과 관련 서비스를 워크로드라고 합니다.
이 튜토리얼에서는 Terraform을 사용하여 설정되어 실행 중인 Google Kubernetes Engine 클러스터와 샘플 워크로드를 빠르게 확인할 수 있습니다. 그런 다음 Google Cloud 콘솔에서 워크로드를 살펴본 후 심화 학습 과정으로 이동하거나 자체 프로덕션 레디 클러스터를 계획하고 만들 수 있습니다. 이 튜토리얼에서는 Terraform에 이미 익숙하다고 가정합니다.
Google Cloud 콘솔에서 샘플 클러스터와 워크로드를 설정하려면 Google Cloud 콘솔에서 클러스터 만들기를 참조하세요.
시작하기 전에
다음 단계에 따라 Kubernetes Engine API를 사용 설정합니다.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE API.
-
Make sure that you have the following role or roles on the project: roles/container.admin, roles/compute.networkAdmin, roles/iam.serviceAccountUser
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role colunn to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
IAM으로 이동 - 프로젝트를 선택합니다.
- 액세스 권한 부여를 클릭합니다.
-
새 주 구성원 필드에 사용자 식별자를 입력합니다. 일반적으로 Google 계정의 이메일 주소입니다.
- 역할 선택 목록에서 역할을 선택합니다.
- 역할을 추가로 부여하려면 다른 역할 추가를 클릭하고 각 역할을 추가합니다.
- 저장을 클릭합니다.
-
환경 준비
이 튜토리얼에서는 Cloud Shell을 사용하여 Google Cloud에서 호스팅되는 리소스를 관리합니다. Cloud Shell에는 Terraform, kubectl
, Google Cloud CLI를 포함하여 이 튜토리얼에 필요한 소프트웨어가 사전에 설치되어 있습니다.
Cloud Shell 활성화 아이콘 Cloud Shell 활성화 를 클릭하여 Google Cloud 콘솔에서 Cloud Shell 세션을 시작합니다. 그러면 Google Cloud 콘솔 하단 창에서 세션이 시작됩니다.
이 가상 머신과 연결된 서비스 사용자 인증 정보가 자동으로 생성되므로 서비스 계정 키를 설정하거나 다운로드할 필요가 없습니다.
명령어를 실행하기 전에 다음 명령어를 사용하여 gcloud CLI에서 기본 프로젝트를 설정합니다.
gcloud config set project PROJECT_ID
여기서
PROJECT_ID
를 프로젝트 ID로 바꿉니다.GitHub 저장소를 클론합니다.
git clone https://github.com/terraform-google-modules/terraform-docs-samples.git --single-branch
작업 디렉터리로 변경합니다.
cd terraform-docs-samples/gke/quickstart/autopilot
Terraform 파일 검토
Google Cloud 제공업체는 Terraform을 사용하여 Google Cloud 리소스를 관리하고 프로비저닝할 수 있게 해주는 플러그인입니다. Terraform 구성과 Google Cloud API 사이의 브리지 역할을 하므로 가상 머신 및 네트워크와 같은 인프라 리소스를 선언적으로 정의할 수 있습니다.
이 튜토리얼의 클러스터와 샘플 앱은 Google Cloud 및 Kubernetes 제공업체를 사용하는 두 개의 Terraform 파일에 지정되어 있습니다.
cluster.tf
파일을 검토합니다.cat cluster.tf
출력은 다음과 비슷합니다.
이 파일은 다음 리소스를 설명합니다.
- 내부 IPv6가 사용 설정된 VPC 네트워크
- 이중 스택 서브네트워크
us-central1
에 있는 이중 스택 Autopilot 클러스터
app.tf
파일을 검토합니다.cat app.tf
출력은 다음과 비슷합니다.
이 파일은 다음 리소스를 설명합니다.
- 샘플 컨테이너 이미지가 포함된 배포
- LoadBalancer 유형의 서비스. 이 서비스는 포트 80에서 배포를 노출합니다.
(선택사항) 애플리케이션을 인터넷에 노출
이 예시의 Terraform 파일은 샘플 앱과 동일한 가상 프라이빗 클라우드(VPC)에서만 액세스할 수 있는 내부 IP 주소가 있는 애플리케이션을 설명합니다. 인터넷(예: 노트북)에서 실행 중인 데모 앱의 웹 인터페이스에 액세스하려면 클러스터를 만들기 전에 Terraform 파일을 수정하여 공개 IP 주소를 대신 만드세요. Cloud Shell에서 직접 텍스트 편집기를 사용하거나 Cloud Shell 편집기를 사용하여 이 작업을 수행할 수 있습니다.
데모 애플리케이션을 인터넷에 노출하려면 다음 단계를 따르세요.
cluster.tf
에서ipv6_access_type
을INTERNAL
에서EXTERNAL
로 변경합니다.ipv6_access_type = "EXTERNAL"
app.tf
에서networking.gke.io/load-balancer-type
주석을 삭제하여 외부 부하 분산기를 구성합니다.annotations = { "networking.gke.io/load-balancer-type" = "Internal" # Remove this line }
클러스터 만들기 및 애플리케이션 배포
Cloud Shell에서 다음 명령어를 실행하여 Terraform을 사용할 수 있는지 확인합니다.
terraform
출력은 다음과 비슷하게 표시됩니다.
Usage: terraform [global options] <subcommand> [args] The available commands for execution are listed below. The primary workflow commands are given first, followed by less common or more advanced commands. Main commands: init Prepare your working directory for other commands validate Check whether the configuration is valid plan Show changes required by the current configuration apply Create or update infrastructure destroy Destroy previously-created infrastructure
Terraform을 초기화합니다.
terraform init
Terraform 구성을 계획합니다.
terraform plan
Terraform 구성 적용
terraform apply
메시지가 표시되면
yes
를 입력하여 작업을 확인합니다. 이 명령어가 완료되는 데 몇 분이 소요될 수 있습니다. 출력은 다음과 비슷합니다.Apply complete! Resources: 6 added, 0 changed, 0 destroyed.
클러스터가 작동하는지 확인
클러스터가 올바르게 실행 중인지 확인하려면 다음을 수행합니다.
Google Cloud 콘솔에서 워크로드 페이지로 이동합니다.
example-hello-app-deployment
워크로드를 클릭합니다. 포드 세부정보 페이지가 표시됩니다. 이 페이지에는 주석, 포드에서 실행되는 컨테이너, 포드를 노출하는 서비스, 측정항목(예: CPU, 메모리, 디스크 사용량)과 같은 포드에 대한 정보가 표시됩니다.Google Cloud 콘솔에서 서비스 및 인그레스 페이지로 이동합니다.
example-hello-app-loadbalancer
LoadBalancer 서비스를 클릭합니다. 서비스 세부정보 페이지가 표시됩니다. 이 페이지에는 서비스와 연결된 포드 및 서비스에서 사용하는 포트와 같은 서비스에 대한 정보가 표시됩니다.외부 엔드포인트 섹션에서 IPv4 링크 또는 IPv6 링크를 클릭하여 브라우저에서 서비스를 봅니다. 출력은 다음과 비슷합니다.
Hello, world! Version: 2.0.0 Hostname: example-hello-app-deployment-5df979c4fb-kdwgr
삭제
이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.
추가 튜토리얼을 진행하거나 샘플을 좀 더 살펴보려면 이 삭제 단계가 완료될 때까지 기다리세요.
Cloud Shell에서 다음 명령어를 실행하여 Terraform 리소스를 삭제합니다.
terraform destroy --auto-approve
삭제 오류 문제 해결
The network resource 'projects/PROJECT_ID/global/networks/example-network' is already being used by 'projects/PROJECT_ID/global/firewalls/example-network-yqjlfql57iydmsuzd4ot6n5v'
와 유사한 오류 메시지가 표시되면 다음을 수행합니다.
방화벽 규칙을 삭제합니다.
gcloud compute firewall-rules list --filter="NETWORK:example-network" --format="table[no-heading](name)" | xargs gcloud --quiet compute firewall-rules delete
Terraform 명령어를 다시 실행합니다.
terraform destroy --auto-approve
다음 단계
배포한 주요 워크로드 설정 및 리소스에 대해 Google Cloud 콘솔에서 클러스터 및 워크로드를 탐색하여 자세히 알아보기
GKE에 대한 Terraform 지원에서 GKE와 함께 Terraform을 설정하고 사용하는 방법을 자세히 알아보기
심화 학습 과정: 확장 가능한 앱 사용해 보기
클러스터 관리 개요에서 실제 클러스터 관리를 시작하는 방법 알아보기