Create a Kubernetes cluster

내 진행 상황 확인하기

/ 20

Configure and Install Jenkins

내 진행 상황 확인하기

/ 20

Create the production and canary deployments

내 진행 상황 확인하기

/ 30

Build for the 'new-feature' branch

내 진행 상황 확인하기

/ 10

Deploying a canary release

내 진행 상황 확인하기

/ 10

Deploying to production

내 진행 상황 확인하기

/ 10

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

작업 2. Jenkins 프로비저닝

Kubernetes 클러스터를 만들고 Jenkins가 Google Cloud 서비스 및 Google Artifact Registry에 액세스할 수 있도록 설정합니다.

Kubernetes 클러스터 만들기

  1. 이제 다음 명령어를 실행하여 Kubernetes 클러스터를 프로비저닝합니다.
gcloud container clusters create jenkins-cd \ --num-nodes 2 \ --machine-type e2-standard-2 \ --scopes "https://www.googleapis.com/auth/source.read_write,cloud-platform"

이 단계를 완료하는 데 몇 분 정도 걸릴 수 있습니다. 추가 범위를 통해 Jenkins가 Google Cloud 서비스 및 Google Artifact Registry에 액세스할 수 있습니다.

Kubernetes 클러스터 만들기

  1. 이제 다음 명령어를 실행하여 Kubernetes 클러스터를 프로비저닝합니다.
gcloud container clusters create jenkins-cd \ --num-nodes 2 \ --machine-type e2-standard-2 \ --scopes "https://www.googleapis.com/auth/source.read_write,cloud-platform"

이 단계는 완료하는 데 최대 몇 분이 걸릴 수 있습니다. 추가된 scopes 파라미터는 Jenkins가 Google Cloud 서비스 및 Google Artifact Registry에 액세스할 수 있도록 합니다.

내 진행 상황 확인하기를 클릭하여 수행한 작업을 확인합니다. Kubernetes 클러스터가 생성되면 평가 점수가 표시됩니다.

Kubernetes 클러스터 만들기(영역: )
  1. 계속하기 전에 다음 명령어를 실행하여 클러스터가 실행 중인지 확인합니다.
gcloud container clusters list

클러스터 사용자 인증 정보 사용

  1. 클러스터의 사용자 인증 정보를 가져옵니다.
gcloud container clusters get-credentials jenkins-cd
  1. Kubernetes Engine은 이 사용자 인증 정보를 사용하여 새로 프로비저닝된 클러스터에 액세스합니다. 다음 명령어를 실행하여 연결할 수 있는지 확인합니다.
kubectl cluster-info

작업 3. Helm 설정

Helm은 Kubernetes 애플리케이션을 쉽게 구성하고 배포할 수 있게 해주는 패키지 관리자입니다. Jenkins를 설치하면 CI/CD 파이프라인을 설정할 수 있습니다.

이 작업에서는 Helm을 사용하여 차트 저장소에서 Jenkins를 설치합니다.

  1. Helm의 안정적인 차트 저장소 추가:
helm repo add jenkins https://charts.jenkins.io
  1. 저장소가 최신 상태인지 확인합니다.
helm repo update

작업 4. Jenkins 설치 및 구성

Jenkins 설치 시 values 파일을 템플릿으로 사용하여 설정에 필요한 값을 제공할 수 있습니다.

커스텀 values 파일을 사용하면 Kubernetes 클라우드를 자동으로 구성하고 다음 필수 플러그인을 추가할 수 있습니다.

  • Kubernetes:latest
  • Workflow-multibranch:latest
  • Git:latest
  • Configuration-as-code:latest
  • Google-oauth-plugin:latest
  • Google-source-plugin:latest
  • Google-storage-plugin:latest

그러면 Jenkins가 클러스터 및 Google Cloud 프로젝트에 연결할 수 있게 됩니다.

  1. Helm CLI를 사용하여 해당 구성 설정으로 차트를 배포합니다.
helm install cd jenkins/jenkins -f jenkins/values.yaml --wait

이 명령어를 완료하는 데 몇 분 정도 걸릴 수 있습니다.

내 진행 상황 확인하기를 클릭하여 수행한 작업을 확인합니다. Jenkins 차트가 구성되면 평가 점수가 표시됩니다.

Jenkins 설치 및 구성
  1. 명령어가 완료되면 Jenkins 포드가 Running 상태이고 컨테이너가 READY 상태인지 확인합니다.
kubectl get pods

출력 예시:

NAME READY STATUS RESTARTS AGE cd-jenkins-7c786475dd-vbhg4 2/2 Running 0 1m
  1. 클러스터에 배포할 수 있도록 Jenkins 서비스 계정을 구성합니다.
kubectl create clusterrolebinding jenkins-deploy --clusterrole=cluster-admin --serviceaccount=default:cd-jenkins

다음과 같은 출력이 표시됩니다.

clusterrolebinding.rbac.authorization.k8s.io/jenkins-deploy created
  1. 다음 명령어를 실행하여 Cloud Shell에서 Jenkins UI로의 포트 전달을 설정합니다.
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/component=jenkins-master" -l "app.kubernetes.io/instance=cd" -o jsonpath="{.items[0].metadata.name}") kubectl port-forward $POD_NAME 8080:8080 >> /dev/null &
  1. 이제 Jenkins 서비스가 제대로 만들어졌는지 확인합니다.
kubectl get svc

출력 예시:

NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE cd-jenkins 10.35.249.67 8080/TCP 3h cd-jenkins-agent 10.35.248.1 50000/TCP 3h kubernetes 10.35.240.1 443/TCP 9h

Jenkins 마스터가 요청할 경우 필요에 따라 빌더 노드가 자동으로 시작되도록 Kubernetes 플러그인을 사용하고 있습니다. 작업이 완료되면 빌더 노드가 자동으로 중단되고 리소스가 클러스터 리소스 풀에 다시 추가됩니다.

이 서비스에서는 selector와 일치하는 모든 포드가 액세스할 수 있도록 포트 8080 및 50000을 노출합니다. 그러면 Kubernetes 클러스터 내의 Jenkins 웹 UI 및 빌더/에이전트 등록 포트가 노출됩니다. 또한 jenkins-ui 서비스는 클러스터 외부에서 액세스할 수 없도록 ClusterIP를 통해 노출됩니다.

작업 5. Jenkins에 연결

관리자 비밀번호를 가져와 Jenkins 인터페이스에 로그인합니다.

  1. Jenkins 차트에서는 관리자 비밀번호를 자동으로 만들어 줍니다. 이를 확인하려면 다음을 실행합니다.
printf $(kubectl get secret cd-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
  1. Jenkins 사용자 인터페이스로 이동하려면 Cloud Shell 작업 모음에서 웹 미리보기(웹 미리보기 아이콘) > 포트 8080에서 미리보기를 클릭합니다.

  2. 메시지가 표시되면 사용자 이름 admin과 자동 생성된 비밀번호로 로그인합니다.

이제 Kubernetes 클러스터에 Jenkins가 설정되었습니다. 다음 섹션에서는 Jenkins를 활용하여 자동화된 CI/CD 파이프라인을 운용합니다.

작업 6. 애플리케이션 이해

이 작업에서는 지속적 배포 파이프라인에 샘플 애플리케이션인 gceme를 배포합니다. 이 애플리케이션은 Go 언어로 작성되었으며 저장소의 sample-app 디렉터리에 있습니다. Compute Engine 인스턴스에서 gceme 바이너리를 실행하면, 앱이 정보 카드에 인스턴스의 메타데이터를 표시합니다.

이 애플리케이션은 마이크로서비스를 모방하여 두 가지 작동 모드를 지원합니다.

  • 백엔드 모드에서 gceme는 포트 8080을 수신 대기하고 Compute Engine 인스턴스 메타데이터를 JSON 형식으로 반환합니다.
  • 프런트엔드 모드에서 gceme는 백엔드 gceme 서비스를 쿼리하고 결과 JSON을 사용자 인터페이스에서 렌더링합니다.

gceme 아키텍처 다이어그램

작업 7. 애플리케이션 배포

애플리케이션을 2개의 다른 환경에 배포합니다.

  • 프로덕션: 사용자가 액세스하는 라이브 사이트입니다.
  • 카나리아: 사용자 트래픽 중 일부만 수용하는 소규모 사이트입니다. 이 환경을 사용하여 실시간 트래픽으로 소프트웨어의 이상 유무를 확인한 후 모든 사용자에게 배포합니다.
  1. Google Cloud Shell에서 샘플 애플리케이션 디렉터리로 이동합니다.
cd sample-app
  1. Kubernetes 네임스페이스를 만들어 배포를 논리적으로 격리합니다.
kubectl create ns production
  1. 프로덕션 및 카나리아 배포를 생성하고 kubectl apply 명령어를 사용하여 서비스를 생성합니다.
kubectl apply -f k8s/production -n production kubectl apply -f k8s/canary -n production kubectl apply -f k8s/services -n production

내 진행 상황 확인하기를 클릭하여 수행한 작업을 확인합니다. 배포가 생성되면 평가 점수가 표시됩니다.

프로덕션 및 카나리아 배포 생성

기본적으로 하나의 프런트엔드 복제본만 배포됩니다. kubectl scale 명령어를 사용하여 최소 4개의 복제본이 항상 실행되도록 합니다.

  1. 다음 명령어를 실행하여 프로덕션 환경 프런트엔드를 확장합니다.
kubectl scale deployment gceme-frontend-production -n production --replicas 4
  1. 이제 프런트엔드에 5개의 포드, 프로덕션 트래픽에 4개의 포드, 카나리아 릴리스에 1개의 포드가 실행 중인지 확인합니다(카나리아 릴리스가 변경될 경우 사용자 5명 중 1명(20%)에만 영향을 줍니다).
kubectl get pods -n production -l app=gceme -l role=frontend
  1. 또한 백엔드에 2개의 포드, 프로덕션에 1개의 포드, 카나리아에 1개의 포드가 있는지 확인합니다.
kubectl get pods -n production -l app=gceme -l role=backend
  1. 프로덕션 서비스의 외부 IP를 검색합니다.
kubectl get service gceme-frontend -n production 참고: 부하 분산기 외부 IP 주소가 표시될 때까지 몇 분 정도 걸릴 수 있습니다.

출력 예시:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE gceme-frontend LoadBalancer 10.79.241.131 104.196.110.46 80/TCP 5h

외부 IP를 브라우저에 붙여넣어 카드에 표시된 정보 카드를 확인합니다. 다음과 유사한 페이지가 나타납니다.

이 요청을 처리한 백엔드

  1. 이제 나중에 사용할 수 있도록 프런트엔드 서비스 부하 분산기 IP를 환경 변수에 저장합니다.
export FRONTEND_SERVICE_IP=$(kubectl get -o jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=production services gceme-frontend)
  1. 브라우저에서 프런트엔드 외부 IP 주소를 열어 두 서비스가 정상 작동하는지 확인합니다.

  2. 다음 명령어를 실행하여 서비스의 버전을 확인합니다(1.0.0으로 표시되어야 함).

curl http://$FRONTEND_SERVICE_IP/version

샘플 애플리케이션을 배포했습니다. 지금부터는 변경사항을 지속적이고 안정적으로 배포할 수 있도록 파이프라인을 설정합니다.

작업 8. Jenkins 파이프라인 만들기

이 작업에서는 전용 Git 서버에 Git 저장소를 설정하고 Jenkins 파이프라인을 만듭니다.

  • 샘플 애플리케이션 소스 코드를 Git 서버에 푸시
  • Jenkins에 서비스 계정 사용자 인증 정보 추가
  • Kubernetes용 Jenkins Cloud 구성
  • Jenkins 다중 브랜치 파이프라인 작업 만들기

샘플 앱 소스 코드를 Git 서버에 푸시

  1. Cloud Shell에서 Git 서버의 외부 IP 주소를 검색합니다.
export GIT_SERVER_IP=$(gcloud compute instances describe git-server --zone={{{project_0.default_zone}}} --format='get(networkInterfaces[0].accessConfigs[0].natIP)') echo "Git Server IP: ${GIT_SERVER_IP}"
  1. sample-app 디렉터리를 Git 저장소로 초기화합니다.
cd ~/continuous-deployment-on-kubernetes/sample-app git init git config --global user.email "student@qwiklabs.net" git config --global user.name "Student" git branch -m master
  1. 자체 호스팅 Git 서버를 가리키는 원격 저장소를 추가합니다.
git remote add origin http://giteaadmin:GiteaPassword123@${GIT_SERVER_IP}:3000/giteaadmin/sample-app.git
  1. 파일을 추가, 커밋하고 master 브랜치로 푸시합니다.
git add . git commit -m "Initial commit" git push -u origin master

서비스 계정 사용자 인증 정보 추가

Jenkins가 클러스터에 액세스하고 리소스를 배포할 수 있도록 사용자 인증 정보를 구성합니다.

  1. Jenkins 사용자 인터페이스의 왼쪽 패널에서 Manage Jenkins를 클릭한 다음 Security 아래의 Credentials를 클릭합니다.

  2. Stores scoped to Jenkins 아래에서 System을 클릭합니다.

Credentials 페이지

  1. Global credentials (unrestricted)를 클릭합니다.

  2. Add Credentials를 클릭합니다.

  3. Kind에서 Google Service Account from metadata를 선택하고 Next를 클릭합니다.

  4. ID 필드에 프로젝트 ID()를 입력하고 Create를 클릭합니다.

참고: 프로젝트 ID는 실습의 연결 세부정보 패널에서 확인할 수 있습니다.

전역 사용자 인증 정보가 추가되었습니다.

Global credentials (unrestricted) 페이지

Kubernetes용 Jenkins Cloud 구성

  1. Jenkins 사용자 인터페이스에서 Manage Jenkins > Clouds(또는 System > Clouds)를 선택합니다.
  2. New cloud를 클릭합니다.
  3. Cloud name에 kubernetes를 입력하고 Type으로 Kubernetes를 선택한 후 Create를 클릭합니다.
  4. Jenkins URL 필드에 http://cd-jenkins:8080을 입력합니다.
  5. Jenkins tunnel 필드에 cd-jenkins-agent:50000을 입력합니다.
  6. Save를 클릭합니다.

Jenkins 작업 만들기

Jenkins 사용자 인터페이스로 이동하여 다음 단계에 따라 다중 브랜치 파이프라인 작업을 구성합니다.

  1. 왼쪽 패널에서 Jenkins > New Item을 클릭합니다.

  2. 항목 이름에 sample-app을 입력하고 Multibranch Pipeline 옵션을 선택한 후 OK를 클릭합니다.

  3. 다음 페이지의 Branch Sources 섹션에서 Add source 드롭다운의 Git을 선택합니다.

  4. Project Repository 필드에 저장소의 클론 URL을 입력합니다.

http://{{{project_0.startup_script.git_server_ip}}}:3000/giteaadmin/sample-app.git 참고: 변수가 채워지지 않은 경우 [GIT_SERVER_IP]를 Git 서버 IP로 대체하여 http://[GIT_SERVER_IP]:3000/giteaadmin/sample-app.git을 입력할 수 있습니다.
  1. Credentials는 - none -으로 유지합니다.

  2. Scan Multibranch Pipeline Triggers 섹션에서 Periodically if not otherwise run 확인란을 선택하고 Interval 값을 1 minute로 설정합니다.

  3. 다른 모든 옵션은 기본값으로 유지하고 Save를 클릭합니다.

이 단계를 완료하면 Branch indexing이라는 작업이 실행됩니다. 이 메타 작업은 저장소의 브랜치를 식별하고 기존 브랜치에 변경사항이 발생하지 않았는지 확인합니다. 탐색 메뉴에서 sample-app을 클릭하면 master 작업이 표시됩니다.

참고: 다음 단계에서 일부 코드를 변경할 때까지 master 작업의 첫 실행이 실패할 수 있습니다.

Jenkins 파이프라인을 만들었습니다. 다음으로 지속적 통합을 위한 개발 환경을 만듭니다.

작업 9. 개발 환경 만들기

개발 브랜치는 개발자가 코드 변경사항을 제출하여 라이브 사이트에 통합하기 전에 테스트하는 데 사용하는 일련의 환경입니다. 이러한 환경은 애플리케이션의 축소 버전이지만 실제 환경과 동일한 메커니즘으로 배포되어야 합니다.

개발 브랜치 만들기

기능 브랜치로부터 개발 환경을 만들려면 브랜치를 Git 서버에 푸시하고 Jenkins를 통해 환경을 배포합니다.

참고: Cloud Shell에 오류가 표시되면 Ctrl+C를 누른 다음 아래 명령어를 실행합니다.
  • 개발 브랜치를 만들고 Git 서버에 푸시합니다.
git checkout -b new-feature

파이프라인 정의 수정

해당 파이프라인을 정의하는 Jenkinsfile은 Jenkins 파이프라인 Groovy 문법을 사용하여 작성됩니다. Jenkinsfile을 사용하면 전체 빌드 파이프라인을 소스 코드가 포함된 단일 파일로 표현할 수 있습니다. 파이프라인에서는 동시 로드와 같은 강력한 기능을 지원하며 사용자의 수동 승인이 필요합니다.

파이프라인이 정상적으로 작동하려면 Jenkinsfile을 수정하여 프로젝트 ID를 설정해야 합니다.

  1. 터미널 편집기(예: vi)에서 Jenkinsfile을 엽니다.
vi Jenkinsfile
  1. 편집기를 시작합니다.
i
  1. REPLACE_WITH_YOUR_PROJECT_ID 값에 PROJECT_ID를 추가합니다. PROJECT_ID는 학습자의 프로젝트 ID로 실습의 CONNECTION DETAILS(연결 세부정보) 섹션에 있습니다. gcloud config get-value project를 실행해서 찾을 수도 있습니다.

  2. CLUSTER_ZONE의 값을 (으)로 변경합니다. gcloud config get compute/zone을 실행하면 이 값을 가져올 수 있습니다.

PROJECT = "REPLACE_WITH_YOUR_PROJECT_ID" APP_NAME = "gceme" FE_SVC_NAME = "${APP_NAME}-frontend" CLUSTER = "jenkins-cd" CLUSTER_ZONE = "{{{project_0.default_zone}}}" IMAGE_TAG = "gcr.io/${PROJECT}/${APP_NAME}:${env.BRANCH_NAME}.${env.BUILD_NUMBER}" JENKINS_CRED = "${PROJECT}"
  1. Jenkinsfile 파일을 저장합니다. vi 사용자의 경우 Esc 키를 누르고 다음 명령어를 입력합니다.
:wq

사이트 수정하기

애플리케이션이 변경되었음을 보여주기 위해 gceme 카드를 파란색에서 주황색으로 변경합니다.

  1. html.go를 엽니다.
vi html.go
  1. 편집기를 시작합니다.
i
  1. 다음을 사용하여 <div class="card blue">의 두 인스턴스를 변경합니다.
<div class="card orange">
  1. html.go 파일을 저장합니다. 이를 위해 Esc 키를 누르고 다음 명령어를 입력합니다.
:wq
  1. main.go를 엽니다.
vi main.go
  1. 편집기를 시작합니다.
i
  1. 버전은 이 줄에서 정의됩니다.
const version string = "1.0.0"

다음으로 업데이트합니다.

const version string = "2.0.0"
  1. main.go 파일을 한번 더 저장합니다. 이를 위해 Esc 키를 누르고 다음 명령어를 입력합니다.
:wq

작업 10. 배포 시작

이 작업에서는 개발 환경을 배포합니다.

  1. 변경사항을 커밋하고 푸시합니다.
git add Jenkinsfile html.go main.go git commit -m "Version 2.0.0" git push origin new-feature

이렇게 하면 개발 환경 빌드가 시작됩니다.

변경사항이 Git 저장소에 푸시되고 나면 Jenkins 사용자 인터페이스로 이동하여 new-feature 브랜치의 빌드가 시작되었는지 확인합니다. 변경사항이 적용되기까지는 최대 1분이 소요될 수 있습니다.

  1. 빌드가 실행되면 왼쪽 탐색창에서 build(빌드) 옆의 드롭다운 화살표를 클릭하고 Console output(콘솔 출력)을 선택합니다.

탐색창

  1. 몇 분 동안 빌드 출력을 추적하면서 kubectl --namespace=new-feature apply... 메시지가 시작되는지 확인합니다. 이제 new-feature 브랜치가 클러스터에 배포되었습니다.
참고: 개발 시나리오에서는 공개용 부하 분산기를 사용하지 않습니다. 애플리케이션의 보안을 강화하려는 경우 kubectl 프록시를 사용할 수 있습니다. 이 프록시는 Kubernetes API에 자신을 인증하며, 내 서비스를 인터넷에 노출하지 않고도 로컬 머신의 요청을 클러스터의 서비스로 프록시합니다.

Build Executor에 아무것도 보이지 않아도 걱정하지 마세요. Jenkins 홈페이지에서 샘플 앱으로 이동하여 new-feature 파이프라인이 만들어졌는지 확인하면 됩니다.

  1. 모두 처리되었다면 다음 명령어를 실행하여 백그라운드에서 프록시를 시작합니다.
kubectl proxy &
  1. 정지되는 경우 Ctrl+C를 눌러 종료합니다. localhost에 요청을 보내고 kubectl 프록시에서 이를 서비스에 전달하도록 하여 애플리케이션에 액세스할 수 있는지 확인합니다.
curl \ http://localhost:8001/api/v1/namespaces/new-feature/services/gceme-frontend:80/proxy/version

현재 실행 중인 버전인 2.0.0으로 응답해야 합니다.

다음과 비슷한 오류가 표시될 수 있습니다.

{ "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "no endpoints available for service \"gceme-frontend:80\"", "reason": "ServiceUnavailable", "code": 503
  1. 이는 프런트엔드 엔드포인트가 아직 전파되지 않았음을 의미하며, 이 경우 잠시 기다렸다 curl 명령어를 다시 시도합니다. 다음과 같은 출력이 표시되면 계속 진행합니다.
2.0.0

개발 환경을 설정했습니다. 이제 이전 모듈에서 학습한 내용을 바탕으로 카나리아 릴리스를 배포하여 새로운 기능을 테스트하겠습니다.

내 진행 상황 확인하기를 클릭하여 수행한 작업을 확인합니다. new-feature 브랜치의 빌드가 시작되면 평가 점수가 표시됩니다.

new-feature 브랜치용으로 빌드

작업 11. 카나리아 릴리스 배포

앱이 개발 환경에서 최신 코드를 실행 중임을 확인했으므로 이제 해당 코드를 카나리아 환경에 배포해 보겠습니다.

  1. 카나리아 브랜치를 만들고 Git 서버에 푸시합니다.
git checkout -b canary git push origin canary
  1. Jenkins에서 카나리아 파이프라인이 시작되었음을 알 수 있습니다. 작업이 완료되면 서비스 URL을 확인하여 새 버전이 일부 트래픽을 처리하고 있는지 파악할 수 있습니다. 5개의 요청마다 약 1개의 요청(정해진 순서 없음)이 버전 2.0.0을 반환해야 합니다.
export FRONTEND_SERVICE_IP=$(kubectl get -o \ jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=production services gceme-frontend) while true; do curl http://$FRONTEND_SERVICE_IP/version; sleep 1; done
  1. 계속 1.0.0이 표시되면 위의 명령어를 다시 실행해보세요. 위의 동작이 확인되면 Ctrl+C를 사용하여 명령어를 종료합니다.

작업이 끝났습니다. 카나리아 릴리스를 배포했습니다. 이제 새 버전을 프로덕션에 배포하겠습니다.

내 진행 상황 확인하기를 클릭하여 수행한 작업을 확인합니다. 카나리아 릴리스가 배포되면 평가 점수가 표시됩니다.

카나리아 릴리스 배포

작업 12. 프로덕션에 배포

카나리아 릴리스가 성공적이었으며 어떤 고객의 불만도 없었으므로 이를 이제 나머지 프로덕션 Fleet에 배포해 보겠습니다.

  1. 카나리아 브랜치를 만들고 Git 서버에 푸시합니다.
git checkout master git merge canary git push origin master

Jenkins에서 마스터 파이프라인이 시작되었음을 알 수 있습니다.

내 진행 상황 확인하기를 클릭하여 수행한 작업을 확인합니다. 마스터 파이프라인이 시작되면 평가 점수가 표시됩니다.

프로덕션에 배포
  1. 완료되면(몇 분 정도 소요될 수 있음) 서비스 URL을 확인하여 새 버전인 2.0.0이 모든 트래픽을 처리하고 있는지 파악할 수 있습니다.
export FRONTEND_SERVICE_IP=$(kubectl get -o \ jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=production services gceme-frontend) while true; do curl http://$FRONTEND_SERVICE_IP/version; sleep 1; done
  1. 역시 1.0.0 버전의 인스턴스가 표시되면 위의 명령어를 다시 실행해 보세요. 이 명령어를 중지하려면 Ctrl+C를 누릅니다.

출력 예시:

gcpstaging9854_student@qwiklabs-gcp-df93aba9e6ea114a:~/continuous-deployment-on-kubernetes/sample-app$ while true; do curl http://$FRONTEND_SERVICE_IP/version; sleep 1; done 2.0.0 2.0.0 2.0.0 2.0.0 2.0.0 2.0.0 ^C

gceme 애플리케이션이 정보 카드를 표시하는 사이트로 이동할 수도 있습니다. 카드 색상이 파란색에서 주황색으로 변경되었습니다.

  1. 외부 IP 주소를 가져오는 명령어는 다음과 같습니다. 외부 IP를 새 탭에 붙여넣고 표시되는 정보 카드를 확인합니다.
kubectl get service gceme-frontend -n production

출력 예시:

이 요청 페이지를 처리한 백엔드

작업 13. 배운 내용 테스트

아래는 이 실습에서 배운 내용을 복습하기 위한 객관식 테스트입니다. 최선을 다해 풀어보세요.

모두 마쳤습니다.

잘하셨습니다. 애플리케이션을 프로덕션에 배포했습니다.

수고하셨습니다

이것으로 Kubernetes Engine에서 Jenkins를 배포하고 활용하여 지속적 배포 파이프라인을 사용 설정하는 실무형 실습을 마칩니다. Kubernetes Engine에서 중요한 DevOps 도구를 배포하고 프로덕션 적용을 위해 구성해볼 수 있는 기회였습니다. kubectl 명령줄 도구와 YAML 파일 내의 배포 구성을 사용해 작업하였으며, 개발/배포 프로세스를 위한 Jenkins 파이프라인 설정에 관해서도 어느 정도 배웠습니다. 이 실습 경험을 기반으로 이제 DevOps 숍에서 이러한 도구를 편안하게 활용할 수 있을 것입니다.

다음 단계/더 학습하기

Google Cloud 교육 및 자격증

Google Cloud 기술을 최대한 활용하는 데 도움이 됩니다. Google 강의에는 빠른 습득과 지속적인 학습을 지원하는 기술적인 지식과 권장사항이 포함되어 있습니다. 기초에서 고급까지 수준별 학습을 제공하며 바쁜 일정에 알맞은 주문형, 실시간, 가상 옵션이 포함되어 있습니다. 인증은 Google Cloud 기술에 대한 역량과 전문성을 검증하고 입증하는 데 도움이 됩니다.

설명서 최종 업데이트: 2026년 5월 20일

실습 최종 테스트: 2026년 2월 26일

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

시작하기 전에

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

시크릿 브라우징 사용

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

콘솔에 로그인

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

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

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

감사합니다

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

한 번에 실습 1개만 가능

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

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

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