본문 바로가기

Infra/Google Cloud

[Google Cloud] Google Study Jam : Create and Manage Cloud SQL for PostgreSQL Instances (2)

728x90
반응형
본 포스트는 2024년 Google Study Jam을 공부하면서 개인적으로 내용을 정리한 포스트 입니다.

 

Task 1. Initialize APIs and create a Cloud IAM service account

Google Cloud Shell에 다음 명령어를 입력해  Artifact Registry API를 활성화 한다.

gcloud services enable artifactregistry.googleapis.com

 

계정을 생성하고 Cloud SQL 관리자 권한을 준다.

export PROJECT_ID=$(gcloud config list --format 'value(core.project)')
export CLOUDSQL_SERVICE_ACCOUNT=cloudsql-service-account

gcloud iam service-accounts create $CLOUDSQL_SERVICE_ACCOUNT --project=$PROJECT_ID

gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$CLOUDSQL_SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/cloudsql.admin"

로컬 파일로 key를 만들고 내보낸다.

gcloud iam service-accounts keys create $CLOUDSQL_SERVICE_ACCOUNT.json \
    --iam-account=$CLOUDSQL_SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com \
    --project=$PROJECT_ID

 

Task 2. Deploy a lightweight GKE application

Google Cloud Shell : 쿠버네티스 클러스터를 만든다.

ZONE=ZONE
gcloud container clusters create postgres-cluster \
--zone=$ZONE --num-nodes=2

 

Google Cloud Shell : 보안 비밀번호를 만든다.

kubectl create secret generic cloudsql-instance-credentials \
--from-file=credentials.json=$CLOUDSQL_SERVICE_ACCOUNT.json
    
kubectl create secret generic cloudsql-db-credentials \
--from-literal=username=postgres \
--from-literal=password=supersecret! \
--from-literal=dbname=gmemegen_db

 

Google Cloud Shell : gMemegen 애플리케이션 코드를 다운로드 받고 디렉토리를 변경한다.

gsutil -m cp -r gs://spls/gsp919/gmemegen .
cd gmemegen

 

Google Cloud Shell : 지역, 프로젝트 ID, Artifact Registry repository에 대한 환경변수 설정

export REGION="REGION"
export PROJECT_ID=$(gcloud config list --format 'value(core.project)')
export REPO=gmemegen

 

Google Cloud Shell : Artifact Registry의 도커 인증 구성

gcloud auth configure-docker ${REGION}-docker.pkg.dev

 

Google Cloud Shell : Artifact Registry repository 만들기

gcloud artifacts repositories create $REPO \
    --repository-format=docker --location=$REGION

 

Google Cloud Shell : 도커 이미지 빌드

docker build -t ${REGION}-docker.pkg.dev/${PROJECT_ID}/gmemegen/gmemegen-app:v1 .

 

Google Cloud Shell : Artifact Registry로 이미지를 push

docker push ${REGION}-docker.pkg.dev/${PROJECT_ID}/gmemegen/gmemegen-app:v1

 

 

Cloud Shell > Open Editor Cloud Shell Editor를 열고 Navigate > Explorer 판넬에서 gmemegen 폴더를 확장하고 gmemegen_deployment.yaml 파일을 수정한다.

 

33번 줄에 image 속성에 ${REGION}을 (지정된 값)로, ${PROJECT_ID}를 (지정된값)로 바꾼다.

 

60번 줄에 ${REGION}을 (지정된 값)로, ${PROJECT_ID}를 (지정된값)으로 바꾼다.

(Connection name이 유효한지 확인하려면 Databases > SQL에서 postgres-gmemegen instance에 Overview에서 Connection name 와 비교한다.)

 

파일 저장 후 Cloud console을 누르고 Open Terminal을 눌러 Cloud Shell을 다시 열고 다음 명령어를 입력해서 쿠버네티스pods를 구성한다.

kubectl create -f gmemegen_deployment.yaml

 

확인

kubectl get pods

 

Task 3. Connect the GKE application to an external load balancer

다음 명령어로 쿠버네티스 로드밸런서를 생성한다.

kubectl expose deployment gmemegen \
    --type "LoadBalancer" \
    --port 80 --target-port 8080

 

명령어를 쳐서 나온 LoadBalancerIngress external IP를 카피한다.

kubectl describe service gmemegen

 

다음 명령을 사용하여 Cloud Shell에서 로드 밸런서의 external IP 주소에 대한 클릭 가능한 링크를 만들 수 있다.

export LOAD_BALANCER_IP=$(kubectl get svc gmemegen \
-o=jsonpath='{.status.loadBalancer.ingress[0].ip}' -n default)
echo gMemegen Load Balancer Ingress IP: http://$LOAD_BALANCER_IP

생성된 링크를 누르면 새로운 브라우저에 gMemegen 애플리케이션이 구동되는 것을 볼 수 있다.

다음 명령을 따르면 된다.

  • 홈페이지에 제시된 이미지 한개를 누른다.
  • 위쪽 및 아래쪽 텍스트 상자에 텍스트를 입력한다.
  • Submit 버튼을 누른다.

Cloud Shell에 다음 명령어를 입력해 애플리케이션이 동작을 확인할 수 있다.

POD_NAME=$(kubectl get pods --output=json | jq -r ".items[0].metadata.name")
kubectl logs $POD_NAME gmemegen | grep "INFO"

 

Task 4. Verify full read/write capabilities of application to database

Databases > SQL > pstgres-gmemegen instance > Overview > Connect to this instance를 스크롤해서 Open Cloud Shell 버튼을 누른다.

Cloud Shell에 자동으로 명령어가 삽입되고 Enter 후 패스워드 입력 한 다음 SQL 문을 입력한다.

\c gmemegen_db

supersecret!

select * from meme;

728x90
반응형