1. 개요
이 실습에서는 GKE Autopilot에서 실행되는 포드가 있는 2계층 마이크로서비스를 배포하고 AlloyDB 데이터베이스의 비공개 인스턴스에 연결합니다. 고객 서비스 애플리케이션은 Cymbal Eats 시스템의 일부이며 등록된 사용자를 관리하는 기능을 제공합니다. 고객 서비스 애플리케이션은 Quarkus 프레임워크를 사용하는 Java 기반 마이크로서비스입니다.
AlloyDB는 비공개 서비스 액세스용으로 구성된 비공개 내부 IP 주소를 통해 네트워크 연결을 지원합니다.
비공개 서비스 액세스는 VPC 네트워크와 AlloyDB 리소스 (클러스터 및 인스턴스)가 있는 기본 Google Cloud VPC 네트워크 간의 VPC 피어링 연결로 구현됩니다. 비공개 연결을 사용하면 VPC 네트워크의 리소스가 내부 IP 주소를 사용하여 독점적으로 액세스하는 AlloyDB 리소스와 통신할 수 있습니다. VPC 네트워크의 리소스에는 AlloyDB 리소스에 연결하기 위해 인터넷 액세스나 외부 IP 주소가 필요하지 않습니다.
GKE Autopilot이란 무엇인가요?
GKE Autopilot은 Google이 노드, 확장, 보안, 기타 사전 구성된 설정을 포함한 클러스터 구성을 관리하는 GKE의 작업 모드입니다. Autopilot 클러스터는 대부분의 프로덕션 워크로드를 실행하고 Kubernetes 매니페스트를 기반으로 컴퓨팅 리소스를 프로비저닝하는 데 최적화되어 있습니다. 간소화된 구성은 클러스터 및 워크로드 설정, 확장성, 보안에 대한 GKE 권장사항과 권장사항을 따릅니다. 기본 제공 설정 목록은 Autopilot 및 Standard 비교 표를 참고하세요.
AlloyDB란 무엇인가요?
가장 까다로운 데이터베이스 워크로드를 위한 완전 관리형 PostgreSQL 호환 데이터베이스 서비스입니다. AlloyDB는 우수한 성능, 확장성, 가용성을 위해 가장 인기 있는 오픈소스 데이터베이스 엔진 중 하나인 PostgreSQL과 Google의 장점을 결합합니다.
학습할 내용
이 실습에서는 다음 작업을 진행하는 방법을 학습합니다.
- AlloyDB 데이터베이스의 비공개 인스턴스 만들기
- AlloyDB 인스턴스에 연결하는 GKE Autopilot 클러스터에 애플리케이션을 배포합니다.
기본 요건
- 이 실습에서는 Cloud 콘솔 및 Cloud Shell 환경에 익숙하다고 가정합니다.
- 이전 GKE 및 AlloyDB 경험이 도움이 되지만 필수는 아닙니다.
2. 설정 및 요구사항
Cloud 프로젝트 설정
- Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.
- 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
- 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔이 고유한 문자열을 자동으로 생성합니다. 보통은 그게 뭔지 상관하지 않습니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로
PROJECT_ID
로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 무작위로 다른 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다. - 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
- 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스를 삭제하거나 전체 프로젝트를 삭제하면 됩니다. Google Cloud 새 사용자에게는 미화 $300 상당의 무료 체험판 프로그램에 참여할 수 있는 자격이 부여됩니다.
환경 설정
검색창 오른쪽에 있는 아이콘을 클릭하여 Cloud Shell을 활성화합니다.
저장소를 클론하고 디렉터리로 이동한 후 아래 명령어를 복사하여 터미널에 붙여넣고 Enter 키를 누릅니다.
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service
gke-lab-setup.sh
를 실행하여 필요한 종속 항목을 배포합니다.
다음 리소스가 생성됩니다.
- AlloyDB 클러스터 및 인스턴스
- Cloud Run 작업 및 고객 서비스의 컨테이너 이미지를 저장하는 Artifact Registry
- AlloyDB 데이터베이스와 통신하기 위한 Cloud Run 작업용 VPC 액세스 커넥터
- AlloyDB 데이터베이스를 만드는 Cloud Run 작업
- GKE Autopilot 클러스터
./gke-lab-setup.sh
승인하라는 메시지가 표시되면 '승인'을 클릭합니다. 계속하려면
설정하는 데 10분 정도 걸립니다. 필요한 종속 항목을 만드는 데 사용되는 설정 스크립트를 검토합니다.
gke-lab-setup.sh
스크립트가 완료될 때까지 기다렸다가 다음 단계를 실행하기 전에 출력하세요.
Job [db-job] has successfully been created. To execute this job, use: gcloud beta run jobs execute db-job OK Creating execution... Done. OK Provisioning resources... Done. Execution [db-job-k94ps] has successfully started running.
3. 애플리케이션 배포
AlloyDB 클러스터 검토
아래 명령어를 실행하여 생성된 AlloyDB 인스턴스를 검토합니다.
gcloud alloydb instances describe customer-instance --cluster=customer-cluster --region=us-central1
샘플 출력:
createTime: '2023-01-06T14:40:07.213288293Z' instanceType: PRIMARY ipAddress: 10.77.176.2 machineConfig: cpuCount: 2 name: projects/cymbal-eats-20056-16671/locations/us-central1/clusters/customer-cluster/instances/customer-instance nodes: - zoneId: us-central1-f queryInsightsConfig: queryPlansPerMinute: 5 queryStringLength: 1024 recordApplicationTags: true recordClientAddress: true reconciling: false state: READY uid: df90d57d-88df-49be-a626-6dfec0513e64 updateTime: '2023-01-06T14:49:40.907977843Z' writableNode: zoneId: us-central1-b
콘솔에서 사용 가능한 기능(쿼리 통계, Monitoring)을 살펴보세요.
GKE Autopilot 클러스터 검토
프로젝트 환경 변수를 설정합니다.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
초기 설정의 일부로 클러스터가 아래 명령어를 사용하여 생성되었습니다 (이 명령어는 실행할 필요가 없음).
gcloud container clusters create-auto $CLUSTER_NAME --region $REGION
명령어를 실행하여 생성된 GKE Autopilot 클러스터를 확인합니다.
gcloud container clusters list
샘플 출력:
다음 명령어를 실행하여 클러스터의 사용자 인증 정보를 저장합니다.
CLUSTER_NAME=rewards-cluster
REGION=us-central1
gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION
애플리케이션 배포
다음으로 고객 서비스 애플리케이션을 배포합니다.
고객 서비스 애플리케이션은 Quarkus 프레임워크를 사용하는 Java 기반 마이크로서비스입니다.
cymbal-eats/customer-service
폴더로 이동하고 명령어를 실행하여 컨테이너 이미지를 빌드하고 업로드합니다.
./mvnw clean package -DskipTests
export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0
gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .
콘솔에서 Cloud Build를 열어 최신 빌드의 세부정보를 검토합니다.
AlloyDB 비공개 IP 주소 값을 사용하여 아래의 환경 변수를 설정하세요.
export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
--cluster=customer-cluster \
--region=$REGION \
--format=json | jq \
--raw-output ".ipAddress")
echo $DB_HOST
아래 명령어를 실행하여 Kubernetes 보안 비밀 객체를 만들어 고객 서비스 애플리케이션에서 데이터베이스에 연결하는 데 사용할 데이터베이스 사용자 인증 정보를 저장합니다.
DB_NAME=customers
DB_USER=postgres
DB_PASSWORD=password123
kubectl create secret generic gke-alloydb-secrets \
--from-literal=database=$DB_NAME \
--from-literal=username=$DB_USER \
--from-literal=password=$DB_PASSWORD \
--from-literal=db_host=$DB_HOST
명령어를 실행하여 배포.yaml 파일에서 CUSTOMER_SERVICE_IMAGE를 바꿉니다.
sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml
다음 명령어를 실행하여 애플리케이션을 배포합니다.
kubectl apply -f customer-service-deployment.yaml
애플리케이션이 RUNNING 상태로 전환되기까지 몇 분 정도 걸립니다.
명령어를 실행하여 테스트 단계에서 사용할 외부 IP를 만듭니다.
SERVICE_NAME=customer-service
kubectl expose deployment $SERVICE_NAME \
--type LoadBalancer --port 80 --target-port 8080
다음 명령어를 실행하여 생성된 리소스를 확인합니다.
kubectl get all
샘플 출력:
4. 애플리케이션 테스트
아래 명령어를 실행하여 고객 서비스 URL을 저장합니다.
kubectl get svc
이전 출력의 외부 IP 값을 사용하여 아래 환경 변수를 설정합니다.
CUSTOMER_SERVICE_URL=$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
아래 명령어를 실행하여 새 고객 레코드를 만듭니다.
curl -X POST $CUSTOMER_SERVICE_URL/customer \
-H 'Content-Type: application/json' \
-d '{"id": "id1","rewardPoints": 3,"address": "1845 Denise St","city": "Mountain View","createDateTime": "2022-11-11T15:56:45.487566","email": "ajensen9090+eats@gmail.com","name": "Angela Jensen","state": "CA","updateDateTime": "2022-11-11T15:56:45.866125","zip": "94043"}'
위의 명령어를 여러 번 실행하여 나중에 로그 탐색기에서 확인할 로그 메시지를 생성합니다.
고객 기록 검토
아래 명령어를 실행하여 생성된 고객 레코드를 확인합니다.
curl $CUSTOMER_SERVICE_URL/customer | jq
샘플 출력:
[ { "address": "1845 Denise St", "city": "Mountain View", "createDateTime": "2023-01-06T16:13:19.118744", "email": "ajensen9090+eats@gmail.com", "id": "id1", "name": "Angela Jensen", "rewardPoints": 3, "state": "CA", "updateDateTime": "2023-01-06T16:13:19.118896", "zip": "94043" } ]
GKE 워크로드 및 서비스 검토
Cloud 콘솔에서 Kubernetes Engine을 열고 생성된 워크로드 및 서비스를 검토합니다.
애플리케이션 로그
로그 탐색기를 열고 '고객이 이미 존재함'이 포함된 로그를 검색합니다. 있습니다.
5. 축하합니다.
축하합니다. Codelab을 완료했습니다.
학습한 내용
- AlloyDB 데이터베이스의 비공개 인스턴스를 만드는 방법
- AlloyDB 인스턴스에 연결하는 GKE Autopilot 클러스터에 애플리케이션을 배포하는 방법
다음 단계:
다른 Cymbal Eats Codelab 살펴보기:
- Eventarc로 Cloud Workflows 트리거
- Cloud Storage에서 이벤트 처리 트리거
- Cloud Run에서 Private CloudSQL에 연결
- Cloud Run에서 완전 관리형 데이터베이스에 연결
- IAP (Identity-Aware Proxy)를 사용한 안전한 서버리스 애플리케이션
- Cloud Scheduler로 Cloud Run 작업 트리거
- Cloud Run에 안전하게 배포
- Cloud Run 인그레스 트래픽 보호
삭제
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
프로젝트 삭제
비용이 청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.