[GKE] Deploy, Scale, and Update Your Website on Google Kubernetes Engine

yejin·2026년 4월 22일

Google Skills

목록 보기
20/46

Course

Build a Website on Google Cloud

Lab

목록

  • Deploy Your Website on Cloud Run
  • Host a Web App on Google Cloud Using Compute Engine
  • Deploy, Scale, and Update Your Website on Google Kubernetes Engine ⬅️ 오늘의 Lab!
  • Migrating a Monolithic Website to Microservices on Google Kubernetes Engine
  • Case Study: Hosting Scalable web apps on Google Cloud
  • Build a Website on Google Cloud: Challenge Lab

🌠 Deploy, Scale, and Update Your Website on Google Kubernetes Engine

개요

실습과정

1. Zone 설정

# lab zone을 할당받은 실습용 zone으로 변경
gcloud config set compute/zone lab zone

2. GKE 클러스터 만들기

GKE ✨

Google Kubernetes Engine의 약자로, Google Cloud에서 컨테이너화된 애플리케이션을 배포, 확장 및 관리하기 위한 관리형 프로덕션 환경용 컨테이너 오케스트레이션 서비스

(1) 클러스터 생성

gcloud container clusters create fancy-cluster --num-nodes 3

➡️ 3개의 노드가 있는 fancy-cluster 생성
➡️ 클러스터를 만드는 데 몇 분의 시간이 소요된다.

(2) VM 인스턴스 확인

  1. 명령어로 확인
gcloud compute instances list
  1. 콘솔에서 확인

    ➡️ 네비게이션 메뉴 > Kubernetes Engine

3. 소스 저장소 클론

(1) 기존 웹사이트 소스 클론

cd ~
git clone https://github.com/googlecodelabs/monolith-to-microservices.git

(2) NodeJS 종속 항목 설치

cd ~/monolith-to-microservices
./setup.sh

(3) 최신 버전의 npm 설치

nvm install --lts

(4) 웹 서버 실행

cd ~/monolith-to-microservices/monolith
npm start

(5) 동작 확인


4. Cloud Build로 Docker 컨테이너 만들기

참고✨

Docker 컨테이너를 빌드하고 레지스트리에 푸시하여 GKE가 가져올 이미지를 저장하는 2단계 방식을, Cloud Build를 사용하여 단일 명령어로 Docker 컨테이너 빌드 및 이미지를 Artifact Registry에 넣을 수 있다.

(1) Cloud Build API 사용 설정

gcloud services enable cloudbuild.googleapis.com

(2) 컨테이너 이미지 빌드

cd ~/monolith-to-microservices/monolith
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .

참고✨

🚀 이 명령어를 실행하면 일어나는 일

  • 소스 업로드: 현재 폴더(.)의 파일들을 구글 클라우드 스토리지로 압축해서 보낸다.
  • 클라우드 빌드: 구글 서버 내에서 Dockerfile을 읽어 컨테이너 이미지를 만든다.
  • 이미지 저장: 완성된 이미지를 gcr.io라는 저장소에 업로드한다.
  • 확인: 빌드가 성공하면 나중에 이 이미지를 가져다가 GKE(Kubernetes)나 Cloud Run 같은 서비스에서 바로 실행할 수 있다.

➡️ 웹사이트를 컨테이너화하고, 컨테이너를 Artifact Registry에 푸시하는 과정을 한 것이다!


5. GKE에 컨테이너 배포

(1) 배포하기

kubectl create deployment monolith --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0

➡️ 지정된 컨테이너 이미지를 기반으로, 쿠버네티스 클러스터 내에 monolith라는 이름의 Deployment 리소스를 생성하여 앱을 가동시킨다.

참고✨

GKE 클러스터에서 애플리케이션을 배포하고 관리하려면 Kubernetes 클러스터 관리 시스템과 통신해야 한다. 일반적으로는 kubectl 명령줄 도구를 사용하여 이 작업을 수행한다.

  • Kubernetes에서는 애플리케이션을 Pods로 나타낸다.
  • Pods는 Kubernetes에서 배포 가능한 최소 단위이다.

(2) 배포 확인

kubectl get all

➡️ 현재 배포
➡️ 원하는 포드 수가 1인 ReplicaSet
➡️ 실행 중인 Pod

(3) 배포 관련 명령어 (Optional)

# Show pods
kubectl get pods

# Show deployments
kubectl get deployments

# Show replica sets
kubectl get rs

# 여러가지 한 번에 보기 
kubectl get pods,deployments

6. GKE에 배포 표출

참고

GKE에 애플리케이션을 배포했지만, GKE에서 실행하는 컨테이너에는 외부 IP 주소가 없으므로 인터넷에서 이 컨테이너에 액세스할 수 없다.
Service Resource를 통해 애플리케이션을 인터넷 트래픽에 명시적으로 노출시켜야 한다.

(1) Expose 하기

kubectl expose deployment monolith --type=LoadBalancer --port 80 --target-port 8080

(2) 서비스 액세스

kubectl get service


➡️ 애플리케이션의 외부 IP 주소를 확인한 후, IP 주소를 복사한 다음 브라우저에서 URL(예: http://x.x.x.x)로 접속하여 애플리케이션에 액세스할 수 있는지 확인한다.
➡️ 동일한 웹사이트가 표시되면 정상!


7. GKE 배포 확장

(1) 배포를 최대 3개의 복제본으로 확장

kubectl scale deployment monolith --replicas=3

➡️ monolith라는 이름으로 실행 중인 배포의 규모를 조절
➡️ --replicas=3: 실행할 복제본(Pod)의 총 개수를 3개로 맞추기
➡️ 트래픽 대응(부하분산) 및 고가용성 확보를 위하여 적용한다.

(2) 배포 확인

kubectl get all

8. 웹사이트에 변경사항 적용

(1) 업데이트된 파일 가져오기

cd ~/monolith-to-microservices/react-app/src/pages/Home
mv index.js.new index.js

(2) 변경사항 확인

cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js

(3) Reacct 앱 빌드 후 모놀리식 공개 디렉터리에 복사

cd ~/monolith-to-microservices/react-app
npm run build:monolith

(4) 새로운 컨테이너 이미지를 빌드하여 이미지 저장소에 업로드

cd ~/monolith-to-microservices/monolith
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .

9. 다운타임 없이 웹사이트 업데이트

(1) 새 이미지를 실제 실행 중인 서비스에 적용(업데이트)

kubectl set image deployment/monolith monolith=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0

(2) 배포 확인

kubectl get pods

(3) 웹 서버 실행

npm start

(4) 변경사항 확인


10. 삭제

(1) Git 저장소 삭제

cd ~
rm -rf monolith-to-microservices

(2) Artifact Registry 이미지 삭제

# Delete the container image for version 1.0.0 of the monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --quiet

# Delete the container image for version 2.0.0 of the monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --quiet

(3) Google Cloud Storage에서 Google Cloud Build 아티팩트를 삭제

# The following command will take all source archives from all builds and delete them from cloud storage

# Run this command to print all sources:
# gcloud builds list | awk 'NR > 1 {print $4}'

gcloud builds list | grep 'SOURCE' | cut -d ' ' -f2 | while read line; do gsutil rm $line; done

(4) GKE 서비스 삭제

kubectl delete service monolith
kubectl delete deployment monolith

(5) GKE 클러스터 삭제

gcloud container clusters delete fancy-cluster lab region
profile
새싹 개발자

0개의 댓글