본 포스트는 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
명령어를 쳐서 나온 LoadBalancer의 Ingress 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;