실습 설정 안내 및 요구사항
계정과 진행 상황을 보호하세요. 이 실습을 실행하려면 항상 시크릿 브라우저 창과 실습 사용자 인증 정보를 사용하세요.

Google Kubernetes Engine에서 웹사이트 배포, 확장, 업데이트

실습 25분 universal_currency_alt 크레딧 1개 show_chart 입문
info 이 실습에는 학습을 지원하는 AI 도구가 통합되어 있을 수 있습니다.
이 콘텐츠는 아직 휴대기기에 최적화되지 않음
최상의 경험을 위해 데스크톱 컴퓨터에서 이메일로 전송된 링크를 사용하여 방문하세요.

GSP663

Google Cloud 사용자 주도형 실습 로고

개요

웹사이트와 애플리케이션을 실행하기란 쉽지 않습니다. 예상치 못한 문제가 발생하고, 서버가 다운되며, 수요 증가로 인해 더 많은 리소스가 사용되고, 다운타임 없이 변경하는 것은 복잡하고 스트레스가 많습니다. Kubernetes를 사용하면 이 모든 작업을 수행할 수 있으며 자동화까지 가능합니다.

이 실습에서는 전자상거래 웹사이트를 운영하는 가상의 회사인 Fancy Store의 개발자 역할을 맡게 됩니다. 확장 및 중단 문제로 인해 Google Kubernetes Engine(GKE)에 애플리케이션을 배포해야 합니다.

이 실습의 연습문제는 일반적인 클라우드 개발자 경험을 반영하여 다음과 같은 순서로 진행됩니다.

  1. GKE 클러스터 만들기
  2. Docker 컨테이너 만들기
  3. GKE에 컨테이너 배포
  4. 서비스를 통해 컨테이너 노출
  5. 컨테이너를 여러 복제본으로 확장
  6. 웹사이트 수정
  7. 다운타임 없이 새 버전 출시

아키텍처 다이어그램

아키텍처 다이어그램

기본 요건

  • DockerKubernetes에 대한 기본적인 이해가 있으면 내용을 최대한 잘 이해하는 데 도움이 됩니다.

설정 및 요건

실습 시작 버튼을 클릭하기 전에

다음 안내를 확인하세요. 실습에는 시간 제한이 있으며 일시중지할 수 없습니다. 실습 시작을 클릭하면 타이머가 시작됩니다. 이 타이머는 Google Cloud 리소스를 사용할 수 있는 시간이 얼마나 남았는지를 표시합니다.

실무형 실습을 통해 시뮬레이션이나 데모 환경이 아닌 실제 클라우드 환경에서 실습 활동을 진행할 수 있습니다. 실습 시간 동안 Google Cloud에 로그인하고 액세스하는 데 사용할 수 있는 새로운 임시 사용자 인증 정보가 제공됩니다.

이 실습을 완료하려면 다음을 준비해야 합니다.

  • 표준 인터넷 브라우저 액세스 권한(Chrome 브라우저 권장)
참고: 이 실습을 실행하려면 시크릿 모드(권장) 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학습자 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.
  • 실습을 완료하기에 충분한 시간(실습을 시작하고 나면 일시중지할 수 없음)
참고: 이 실습에는 학습자 계정만 사용하세요. 다른 Google Cloud 계정을 사용하는 경우 해당 계정에 비용이 청구될 수 있습니다.

실습을 시작하고 Google Cloud 콘솔에 로그인하는 방법

  1. 실습 시작 버튼을 클릭합니다. 실습 비용을 결제해야 하는 경우 결제 수단을 선택할 수 있는 대화상자가 열립니다. 왼쪽에는 다음과 같은 항목이 포함된 실습 세부정보 창이 있습니다.

    • Google Cloud 콘솔 열기 버튼
    • 남은 시간
    • 이 실습에 사용해야 하는 임시 사용자 인증 정보
    • 필요한 경우 실습 진행을 위한 기타 정보
  2. Google Cloud 콘솔 열기를 클릭합니다(Chrome 브라우저를 실행 중인 경우 마우스 오른쪽 버튼으로 클릭하고 시크릿 창에서 링크 열기를 선택합니다).

    실습에서 리소스가 가동되면 다른 탭이 열리고 로그인 페이지가 표시됩니다.

    팁: 두 개의 탭을 각각 별도의 창으로 나란히 정렬하세요.

    참고: 계정 선택 대화상자가 표시되면 다른 계정 사용을 클릭합니다.
  3. 필요한 경우 아래의 사용자 이름을 복사하여 로그인 대화상자에 붙여넣습니다.

    {{{user_0.username | "Username"}}}

    실습 세부정보 창에서도 사용자 이름을 확인할 수 있습니다.

  4. 다음을 클릭합니다.

  5. 아래의 비밀번호를 복사하여 시작하기 대화상자에 붙여넣습니다.

    {{{user_0.password | "Password"}}}

    실습 세부정보 창에서도 비밀번호를 확인할 수 있습니다.

  6. 다음을 클릭합니다.

    중요: 실습에서 제공하는 사용자 인증 정보를 사용해야 합니다. Google Cloud 계정 사용자 인증 정보를 사용하지 마세요. 참고: 이 실습에 자신의 Google Cloud 계정을 사용하면 추가 요금이 발생할 수 있습니다.
  7. 이후에 표시되는 페이지를 클릭하여 넘깁니다.

    • 이용약관에 동의합니다.
    • 임시 계정이므로 복구 옵션이나 2단계 인증을 추가하지 않습니다.
    • 무료 체험판을 신청하지 않습니다.

잠시 후 Google Cloud 콘솔이 이 탭에서 열립니다.

참고: Google Cloud 제품 및 서비스에 액세스하려면 탐색 메뉴를 클릭하거나 검색창에 제품 또는 서비스 이름을 입력합니다. 탐색 메뉴 아이콘 및 검색창

Cloud Shell 활성화

Cloud Shell은 다양한 개발 도구가 탑재된 가상 머신으로, 5GB의 영구 홈 디렉터리를 제공하며 Google Cloud에서 실행됩니다. Cloud Shell을 사용하면 명령줄을 통해 Google Cloud 리소스에 액세스할 수 있습니다.

  1. Google Cloud 콘솔 상단에서 Cloud Shell 활성화 Cloud Shell 활성화 아이콘를 클릭합니다.

  2. 다음 창을 클릭합니다.

    • Cloud Shell 정보 창을 통해 계속 진행합니다.
    • 사용자 인증 정보를 사용하여 Google Cloud API를 호출할 수 있도록 Cloud Shell을 승인합니다.

연결되면 사용자 인증이 이미 처리된 것이며 프로젝트가 학습자의 PROJECT_ID, (으)로 설정됩니다. 출력에 이 세션의 PROJECT_ID를 선언하는 줄이 포함됩니다.

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud는 Google Cloud의 명령줄 도구입니다. Cloud Shell에 사전 설치되어 있으며 명령줄 자동 완성을 지원합니다.

  1. (선택사항) 다음 명령어를 사용하여 활성 계정 이름 목록을 표시할 수 있습니다.
gcloud auth list
  1. 승인을 클릭합니다.

출력:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (선택사항) 다음 명령어를 사용하여 프로젝트 ID 목록을 표시할 수 있습니다.
gcloud config list project

출력:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 참고: gcloud 전체 문서는 Google Cloud에서 gcloud CLI 개요 가이드를 참고하세요.

영역 설정

  • 기본 영역 및 프로젝트 구성을 설정합니다.
gcloud config set compute/zone {{{project_0.default_zone|lab zone}}}

리전 및 영역 문서에서 자세히 알아보세요.

작업 1. GKE 클러스터 만들기

웹사이트를 배포할 Kubernetes 클러스터가 필요합니다. 먼저 적절한 API가 사용 설정되어 있는지 확인합니다.

  1. 다음 명령어를 실행하여 3개의 노드가 있는 fancy-cluster라는 GKE 클러스터를 만듭니다.
gcloud container clusters create fancy-cluster --num-nodes 3 참고: 리전/영역이 지정되지 않았다는 오류가 표시되면 환경 설정 섹션을 참조하여 기본 컴퓨팅 영역을 설정했는지 확인하세요.

클러스터를 만드는 데 몇 분 정도 걸릴 수 있습니다.

  1. 이제 다음 명령어를 실행하여 클러스터의 3개 작업자 VM 인스턴스를 확인합니다.
gcloud compute instances list

출력:

NAME: gke-fancy-cluster-default-pool-fb932da6-4sk6 ZONE: us-central1-f MACHINE_TYPE: e2-medium PREEMPTIBLE: INTERNAL_IP: 10.128.0.3 EXTERNAL_IP: 34.172.106.173 STATUS: RUNNING NAME: gke-fancy-cluster-default-pool-fb932da6-d6qc ZONE: us-central1-f MACHINE_TYPE: e2-medium PREEMPTIBLE: INTERNAL_IP: 10.128.0.4 EXTERNAL_IP: 34.133.99.176 STATUS: RUNNING NAME: gke-fancy-cluster-default-pool-fb932da6-ztnh ZONE: us-central1-f MACHINE_TYPE: e2-medium PREEMPTIBLE: INTERNAL_IP: 10.128.0.5 EXTERNAL_IP: 34.136.180.45 STATUS: RUNNING
  1. 콘솔에서 Kubernetes 클러스터와 관련 정보를 찾습니다.

  2. 탐색 메뉴(탐색 메뉴 아이콘) > Kubernetes Engine > 클러스터를 클릭합니다.

fancy-cluster라는 이름의 클러스터가 표시됩니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. GKE 클러스터 만들기

작업 2. 소스 저장소 클론

기존 웹사이트이므로 소스를 클론하기만 하면 됩니다. 그러면 Docker 이미지를 만들고 GKE에 배포하는 데 집중할 수 있습니다.

  1. 다음 명령어를 실행하여 Git 저장소를 Cloud Shell 인스턴스에 클론합니다.
cd ~ git clone https://github.com/googlecodelabs/monolith-to-microservices.git
  1. 적절한 디렉터리로 변경합니다.

  2. 또한 배포하기 전에 애플리케이션을 테스트할 수 있도록 NodeJS 종속 항목을 설치합니다.

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

이 스크립트가 실행 완료되는 데 몇 분 정도 걸릴 수 있습니다.

  1. 최신 버전의 npm으로 Cloud Shell을 실행 중인지 확인합니다.
nvm install --lts
  1. 적절한 디렉터리로 변경하고 다음 명령어를 실행하여 웹 서버를 시작하여 애플리케이션을 테스트합니다.
cd ~/monolith-to-microservices/monolith npm start

출력:

Monolith listening on port 8080!
  1. 웹 미리보기 아이콘을 클릭하고 포트 8080에서 미리보기를 선택하여 애플리케이션을 미리 볼 수 있습니다.

포트 8080에서 미리보기 강조 표시

그러면 Fancy Store가 작동하는 모습을 볼 수 있는 새 창이 열립니다.

Fancy Store 시작 페이지

이 탭을 열어두세요. 실습 후반부에서 다시 사용합니다.

  1. 웹 서버 프로세스를 중지하려면 Cloud Shell에서 Ctrl+C를 누릅니다.

작업 3. Cloud Build로 Docker 컨테이너 만들기

이제 소스 파일이 준비되었으므로 애플리케이션을 도커화할 차례입니다.

일반적으로는 Docker 컨테이너를 빌드하고 레지스트리에 푸시하여 GKE가 가져올 이미지를 저장하는 2단계 접근방식을 취해야 합니다. Cloud Build를 사용하면 단일 명령어로 Docker 컨테이너를 빌드하고 이미지를 Artifact Registry에 넣을 수 있습니다.

Google Cloud Build는 디렉터리의 파일을 압축하여 Google Cloud Storage 버킷으로 이동합니다. 그러면 빌드 프로세스가 버킷의 모든 파일을 가져와 Dockerfile을 사용하여 Docker 빌드 프로세스를 실행합니다. Docker 이미지에 대해 호스트를 gcr.io로 지정하여 --tag 플래그를 지정했으므로 결과 Docker 이미지가 Artifact Registry로 푸시됩니다.

  1. 먼저 Cloud Build API가 사용 설정되어 있는지 확인하려면 다음 명령어를 실행합니다.
gcloud services enable cloudbuild.googleapis.com
  1. 빌드 프로세스를 시작하려면 다음을 실행합니다.
cd ~/monolith-to-microservices/monolith gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .
  1. 이 프로세스는 몇 분 정도 걸립니다.

터미널에 다음과 비슷한 출력이 표시됩니다.

ID CREATE_TIME DURATION SOURCE IMAGES STATUS 1ae295d9-63cb-482c-959b-bc52e9644d53 2019-08-29T01:56:35+00:00 33S gs://_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz gcr.io//monolith:1.0.0 SUCCESS
  1. 빌드 기록을 보거나 프로세스를 실시간으로 확인하려면 탐색 메뉴를 클릭하고 CI/CD 섹션으로 스크롤한 다음 Cloud Build > 기록을 클릭합니다. 여기에서 이전 빌드의 전체 목록을 확인할 수 있습니다.

  2. 빌드 이름을 클릭하여 로그 출력을 포함한 해당 빌드의 모든 세부정보를 확인합니다.

선택사항: 빌드 세부정보 페이지에서 빌드 정보 섹션의 빌드 요약 > 실행 세부정보 > 이미지 이름을 클릭하여 컨테이너 이미지를 확인합니다.

이미지 이름이 강조 표시된 실행 세부정보 탭 페이지

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. Cloud Build로 Docker 컨테이너 만들기

작업 4. GKE에 컨테이너 배포

이제 웹사이트를 컨테이너화하고 컨테이너를 Artifact Registry에 푸시했으므로 Kubernetes에 배포할 차례입니다.

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

Kubernetes는 애플리케이션을 포드로 나타냅니다. 포드는 컨테이너(또는 긴밀하게 결합된 컨테이너의 그룹)를 나타내는 단위입니다. 포드는 Kubernetes에서 배포 가능한 최소 단위입니다. 이 실습에서는 각 포드에 모놀리식 컨테이너만 포함됩니다.

애플리케이션을 배포하려면 배포 리소스를 만듭니다. 배포 리소스는 복제본이라고 하는 애플리케이션의 여러 사본을 관리하고, 이러한 사본이 클러스터의 개별 노드에서 실행되도록 예약합니다. 이 실습에서는 배포가 애플리케이션의 포드 하나만 실행합니다. 배포는 이를 보장하기 위해 ReplicaSet를 생성합니다. ReplicaSet는 지정된 수의 복제본이 항상 실행되도록 하는 역할을 합니다.

다음에 사용할 kubectl create deployment 명령어는 Kubernetes가 클러스터에 1개의 복제본으로 monolith라는 배포를 만들도록 합니다.

  • 다음 명령어를 실행하여 애플리케이션을 배포합니다.
kubectl create deployment monolith --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 참고: 권장사항으로, 이러한 변경사항을 저장하려면 YAML 파일과 GitHub와 같은 소스 제어 시스템을 사용하는 것이 좋습니다. 이러한 리소스에 대한 자세한 내용은 배포 문서를 참고하세요.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. GKE에 컨테이너 배포

배포 확인

  1. 배포가 성공적으로 생성되었는지 확인합니다.
kubectl get all

포드 상태가 실행 중이 될 때까지 명령어를 다시 실행합니다.

출력:

NAME READY STATUS RESTARTS AGE pod/monolith-7d8bc7bf68-htm7z 1/1 Running 0 6m21s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.27.240.1 443/TCP 24h NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/monolith 1 1 1 1 20m NAME DESIRED CURRENT READY AGE replicaset.apps/monolith-7d8bc7bf68 1 1 1 20m

이 출력은 다음의 몇 가지를 보여줍니다.

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

모든 것이 성공적으로 생성된 것 같습니다.

참고: 탐색 메뉴 > Kubernetes Engine > 워크로드를 열어 콘솔을 통해 Kubernetes 배포를 볼 수도 있습니다. 참고: 예상치 못한 오류나 상태가 표시되는 경우 다음 명령어를 사용하여 리소스를 디버깅하고 리소스에 대한 세부정보를 확인할 수 있습니다.

kubectl describe pod monolith

kubectl describe pod/monolith-7d8bc7bf68-2bxts

kubectl describe deployment monolith

kubectl describe deployment.apps/monolith

출력의 맨 끝에는 오류가 발생한 이벤트 목록과 리소스에 대한 상세 정보가 표시됩니다.

선택사항: 배포에 대한 명령어를 별도로 실행할 수도 있습니다.

# Show pods kubectl get pods # Show deployments kubectl get deployments # Show replica sets kubectl get rs #You can also combine them kubectl get pods,deployments

Kubernetes의 이점을 최대한 활용하려면 포드를 삭제하여 서버 충돌을 시뮬레이션하고 어떤 일이 일어나는지 확인해 보세요.

  1. 이전 명령어에서 포드 이름을 복사한 후 다음 명령어를 실행하여 삭제할 때 사용합니다.
kubectl delete pod/<POD_NAME>

워크로드 페이지에서 삭제 과정을 확인할 수 있습니다.

  1. 워크로드 이름을 클릭합니다(빠르게 진행됨).

  2. 충분히 빠르다면 get all을 다시 실행하여 두 개의 포드를 확인할 수 있습니다. 하나는 종료 중이고 다른 하나는 생성 중이거나 실행 중입니다.

kubectl get all

출력:

NAME READY STATUS RESTARTS AGE pod/monolith-7d8bc7bf68-2bxts 1/1 Running 0 4s pod/monolith-7d8bc7bf68-htm7z 1/1 Terminating 0 9m35s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.27.240.1 443/TCP 24h NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/monolith 1 1 1 1 24m NAME DESIRED CURRENT READY AGE replicaset.apps/monolith-7d8bc7bf68 1 1 1 24m

왜 그렇게 됐을까요? ReplicaSet은 포드가 종료되고 있음을 확인하고 원하는 복제본 수를 유지하기 위해 새 포드를 트리거했습니다. 나중에 여러 인스턴스가 실행되도록 확장하는 방법을 알아볼 텐데요. 이렇게 하면 인스턴스 하나가 다운되더라도 사용자에게는 다운타임이 표시되지 않습니다.

작업 5. GKE 배포 노출

GKE에 애플리케이션을 배포했지만 클러스터 외부에서 액세스할 방법이 없습니다. 기본적으로 GKE에서 실행하는 컨테이너에는 외부 IP 주소가 없으므로 인터넷에서 이 컨테이너에 액세스할 수 없습니다. 서비스 리소스를 통해 애플리케이션을 인터넷 트래픽에 명시적으로 노출해야 합니다. 서비스는 애플리케이션의 포드에 네트워킹 및 IP 지원을 제공합니다. GKE는 애플리케이션의 외부 IP와 부하 분산기를 만듭니다.

  • 다음 명령어를 실행하여 웹사이트를 인터넷에 노출합니다.
kubectl expose deployment monolith --type=LoadBalancer --port 80 --target-port 8080

서비스 액세스

GKE는 외부 IP 주소를 배포가 아닌 서비스 리소스에 할당합니다.

  1. GKE가 애플리케이션에 프로비저닝한 외부 IP를 찾으려면 kubectl get service 명령어로 서비스를 검사하면 됩니다.
kubectl get service

출력:

NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE monolith 10.3.251.122 203.0.113.0 80:30877/TCP 3d

서비스에 외부 IP 주소가 생길 때까지 명령어를 다시 실행합니다.

  1. 애플리케이션의 외부 IP 주소를 확인한 후 IP 주소를 복사한 다음 브라우저에서 URL(예: 'http://203.0.113.0')을 가리켜 애플리케이션에 액세스할 수 있는지 확인합니다.

이전에 테스트한 것과 동일한 웹사이트가 표시됩니다. 이제 웹사이트가 Kubernetes에서 완전히 실행됩니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. GKE 배포 노출

작업 6. GKE 배포 확장

이제 애플리케이션이 GKE에서 실행되고 인터넷에 노출되므로 웹사이트가 매우 인기가 많아졌다고 가정해 보겠습니다. 이 모든 트래픽을 처리할 수 있도록 애플리케이션을 여러 인스턴스로 확장할 수 있는 방법이 필요합니다. 다음으로 애플리케이션을 최대 3개의 복제본으로 확장하는 방법을 알아봅니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 배포를 최대 3개의 복제본으로 확장합니다.
kubectl scale deployment monolith --replicas=3
  1. 배포가 성공적으로 확장되었는지 확인합니다.
kubectl get all

출력:

NAME READY STATUS RESTARTS AGE pod/monolith-7d8bc7bf68-2bxts 1/1 Running 0 36m pod/monolith-7d8bc7bf68-7ds7q 1/1 Running 0 45s pod/monolith-7d8bc7bf68-c5kxk 1/1 Running 0 45s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.27.240.1 443/TCP 25h service/monolith LoadBalancer 10.27.253.64 XX.XX.XX.XX 80:32050/TCP 6m7s NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/monolith 3 3 3 3 61m NAME DESIRED CURRENT READY AGE replicaset.apps/monolith-7d8bc7bf68 3 3 3 61m

이제 포드의 인스턴스 3개가 실행 중인 것을 확인할 수 있습니다. 배포와 복제본 세트의 원하는 개수가 이제 3개입니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. GKE 배포 확장

작업 7. 웹사이트에 변경사항 적용

시나리오: 마케팅팀에서 사이트의 홈페이지를 변경해 달라고 요청했습니다. 마케팅팀은 홈페이지에서 어떤 회사이며 무엇을 판매하는지에 대해 더 많은 정보를 제공해야 한다고 생각합니다.

작업: 마케팅팀이 만족할 수 있도록 홈페이지에 텍스트를 추가합니다. 개발자 한 명이 이미 index.js.new라는 파일 이름에 변경사항을 작성했습니다. 이 파일을 index.js에 복사하기만 하면 변경사항이 적용됩니다. 아래 안내를 따라 적절하게 변경하세요.

  1. 다음 명령어를 실행하여 업데이트된 파일을 올바른 파일 이름에 복사합니다.
cd ~/monolith-to-microservices/react-app/src/pages/Home mv index.js.new index.js
  1. 콘텐츠를 출력하여 변경사항을 확인합니다.
cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js

결과 코드는 다음과 같습니다.

/* Copyright 2019 Google LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. \*/ import React from "react"; import { makeStyles } from "@material-ui/core/styles"; import Paper from "@material-ui/core/Paper"; import Typography from "@material-ui/core/Typography"; const useStyles = makeStyles(theme => ({ root: { flexGrow: 1 }, paper: { width: "800px", margin: "0 auto", padding: theme.spacing(3, 2) } })); export default function Home() { const classes = useStyles(); return (
Fancy Fashion & Style Online
Tired of mainstream fashion ideas, popular trends and societal norms? This line of lifestyle products will help you catch up with the Fancy trend and express your personal style. Start shopping Fancy items now!
); }

React 구성요소가 업데이트되었지만 정적 파일을 생성하려면 React 앱을 빌드해야 합니다.

  1. 다음 명령어를 실행하여 React 앱을 빌드한 다음 모놀리식 공개 디렉터리에 복사합니다.
cd ~/monolith-to-microservices/react-app npm run build:monolith

코드가 업데이트되었으므로 Docker 컨테이너를 다시 빌드하고 Artifact Registry에 게시해야 합니다. 이전과 동일한 명령어를 사용하되 이번에는 버전 라벨을 업데이트합니다.

  1. 다음 명령어를 실행하여 업데이트된 이미지 버전 2.0.0으로 새 클라우드 빌드를 트리거합니다.
cd ~/monolith-to-microservices/monolith gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .

다음 섹션에서는 이 이미지를 사용하여 다운타임 없이 애플리케이션을 업데이트합니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 웹사이트에 변경사항 적용

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

변경사항이 완료되었고 마케팅팀은 업데이트에 만족합니다. 이제 사용자에게 방해를 주지 않고 웹사이트를 업데이트할 수 있습니다.

GKE의 순차적 업데이트 메커니즘으로 인해 실행 중인 모든 복제본에서 시스템이 이전 컨테이너 이미지의 인스턴스를 새것으로 교체할 때도 애플리케이션은 계속 실행되며 사용 가능합니다.

  • 다음 명령어를 사용하여 배포의 이미지를 새 버전으로 업데이트하겠다고 Kubernetes에 알립니다.
kubectl set image deployment/monolith monolith=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0

배포 확인

  1. 다음 명령어를 실행하여 배포 업데이트를 검증할 수 있습니다.
kubectl get pods

출력:

NAME READY STATUS RESTARTS AGE monolith-584fbc994b-4hj68 1/1 Terminating 0 60m monolith-584fbc994b-fpwdw 1/1 Running 0 60m monolith-584fbc994b-xsk8s 1/1 Terminating 0 60m monolith-75f4cf58d5-24cq8 1/1 Running 0 3s monolith-75f4cf58d5-rfj8r 1/1 Running 0 5s monolith-75f4cf58d5-xm44v 0/1 ContainerCreating 0 1s

여기에서 3개의 새 포드가 생성되고 이전 포드가 종료되는 것을 확인할 수 있습니다. 연령을 보면 어떤 것이 새롭고 어떤 것이 오래되었는지 알 수 있습니다. 결국 3개의 포드만 다시 표시되며, 이 포드는 업데이트된 3개의 포드입니다.

  1. 다음 명령어를 실행하여 웹 서버를 시작하고 애플리케이션을 테스트합니다.
npm start
  1. 변경사항을 확인하려면 앱 웹페이지 탭으로 돌아가서 페이지를 새로고침합니다. 애플리케이션이 업데이트된 것을 확인합니다.

이제 웹사이트에 홈페이지 구성요소에 추가한 텍스트가 표시됩니다.

Fancy Store 홈페이지

  1. 웹 서버 프로세스를 중지하려면 Cloud Shell에서 Ctrl+C를 누릅니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. 다운타임 없이 웹사이트 업데이트

작업 9. 삭제

이 실습을 완료하면 모든 리소스가 삭제되지만, 실제 환경에서는 더 이상 필요하지 않은 리소스를 삭제하는 것이 좋습니다.

  1. Git 저장소를 삭제합니다.
cd ~ rm -rf monolith-to-microservices
  1. 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
  1. 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
  1. GKE 서비스를 삭제합니다.
kubectl delete service monolith kubectl delete deployment monolith
  1. GKE 클러스터를 삭제합니다.
gcloud container clusters delete fancy-cluster {{{project_0.default_region | lab region}}}
  1. Y를 입력하여 이 작업을 확인합니다. 이 작업은 다소 시간이 걸릴 수 있습니다.

수고하셨습니다

GKE에서 웹사이트를 배포, 확장, 업데이트했습니다. 이제 Docker와 Kubernetes를 사용해 보았습니다.

다음 단계/더 학습하기

설명서 최종 업데이트: 2024년 4월 26일

실습 최종 테스트: 2024년 2월 21일

Copyright 2026 Google LLC. All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.

시작하기 전에

  1. 실습에서는 정해진 기간 동안 Google Cloud 프로젝트와 리소스를 만듭니다.
  2. 실습에는 시간 제한이 있으며 일시중지 기능이 없습니다. 실습을 종료하면 처음부터 다시 시작해야 합니다.
  3. 화면 왼쪽 상단에서 실습 시작을 클릭하여 시작합니다.

시크릿 브라우징 사용

  1. 실습에 입력한 사용자 이름비밀번호를 복사합니다.
  2. 비공개 모드에서 콘솔 열기를 클릭합니다.

콘솔에 로그인

    실습 사용자 인증 정보를 사용하여
  1. 로그인합니다. 다른 사용자 인증 정보를 사용하면 오류가 발생하거나 요금이 부과될 수 있습니다.
  2. 약관에 동의하고 리소스 복구 페이지를 건너뜁니다.
  3. 실습을 완료했거나 다시 시작하려고 하는 경우가 아니면 실습 종료를 클릭하지 마세요. 이 버튼을 클릭하면 작업 내용이 지워지고 프로젝트가 삭제됩니다.

현재 이 콘텐츠를 이용할 수 없습니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

감사합니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

한 번에 실습 1개만 가능

모든 기존 실습을 종료하고 이 실습을 시작할지 확인하세요.

시크릿 브라우징을 사용하여 실습 실행하기

이 실습을 실행하는 가장 좋은 방법은 시크릿 모드 또는 시크릿 브라우저 창을 사용하는 것입니다. 개인 계정과 학생 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.