소개
Juniper Café는 요청을 처리하고 있지만 최신 메뉴의 Oat Latte 가격이 $35.00로 표시됩니다. Pod가 정상이어도 잘못된 비즈니스 데이터를 제공할 수 있습니다. 카페, 이전 버전, 별도의 독서실 서비스를 보존하면서 승인된 가을 메뉴를 복구합니다.
이 환경은 자체적으로 준비된 릴리스 이력을 갖춘 새로운 환경입니다. 이전 실습의 파일이나 프로세스를 사용하지 않습니다. 계절 메뉴 실습을 먼저 완료해야 합니다. 이 수업에서는 메뉴 형식, 생성된 ConfigMap, Deployment, 다운로드 확인 방법을 다시 활용하고, 리비전 선택과 복구를 새로 배웁니다. 35분은 저자의 예상 시간이며 실제 초보자를 대상으로 측정한 시간이 아닙니다.
승인된 리비전 복원하기
이 단계에서는 실제 메뉴와 Deployment 이력을 사용하여 승인된 가을 버전을 선택하고 복원합니다.
Café Menu를 열고 Explore the menu를 선택한 다음 Oat Latte를 찾으세요. 웹사이트와 음료 상세 페이지는 열리지만 현재 가격인 $35.00는 잘못되었습니다. /home/labex/project/cafe-menu에서 시작하는 Workspace로 전환하세요.
카운터 팀의 전체 승인 표와 시즌 레이블을 읽으세요. 이전 실습과 마찬가지로 가격은 센트 단위 정수입니다. 350은 $3.50를 뜻합니다.
cat approved/menu.csv
id,name,price_cents,available
espresso,Espresso,250,true
oat-latte,Oat Latte,350,true
cold-brew,Cold Brew,390,false
maple-latte,Maple Latte,450,true
cat approved/season.txt
Autumn at Juniper
성공적인 롤아웃은 Kubernetes가 요청된 Pod 상태에 도달했다는 뜻입니다. 메뉴의 모든 가격을 검증해 주지는 않습니다. 정상적인 Deployment를 확인한 뒤 리비전 목록을 보세요. rollout history는 보존된 ReplicaSet을 읽으며, change-cause 텍스트는 준비된 각 릴리스를 식별하는 데 도움이 됩니다.
kubectl get deployment cafe -n cafe-menu
kubectl rollout history deployment/cafe -n cafe-menu
이력에는 everyday, autumn, misprint 리비전이 이 순서로 포함되어 있습니다. 리비전 번호는 이 새로운 환경의 이 Deployment에 속합니다. 번호를 어디서나 통용되는 릴리스 이름으로 취급하지 마세요.
저장된 전체 버전도 사용할 수 있습니다. 이전 일상 메뉴와 승인된 가을 메뉴를 비교하세요.
cat versions/everyday/menu.json
cat versions/autumn/menu.json
일상 버전의 Oat Latte 가격은 올바르지만 여전히 Cold Brew를 판매하며 Maple Latte는 판매하지 않습니다. 따라서 아무 이전 릴리스나 복원하면 잘못된 결과가 됩니다. 가을 버전은 승인된 값 전체와 시즌 레이블에 일치합니다.
이 환경에서 가을 리비전으로 준비된 리비전 2를 확인하세요. --revision=2는 해당 Pod 템플릿의 세부 정보를 요청합니다.
kubectl rollout history deployment/cafe -n cafe-menu --revision=2
menu 볼륨에서 생성된 ConfigMap 참조를 찾으세요. ConfigMap이 아직 존재하므로 이 저장된 템플릿은 정확히 그 이전 구성을 사용하여 새 Pod를 시작할 수 있습니다.
해당 리비전을 복원하세요. rollout undo는 Deployment를 선택한 이전 Pod 템플릿으로 변경합니다. --to-revision=2는 승인된 리비전을 명시적으로 선택합니다.
kubectl rollout undo deployment/cafe -n cafe-menu --to-revision=2
복원된 복제본 두 개가 모두 준비될 때까지 기다리세요.
kubectl rollout status deployment/cafe -n cafe-menu --timeout=120s
deployment "cafe" successfully rolled out
Café Menu로 전환하여 Our menu를 선택하고 필요하면 새로고침하세요. Oat Latte가 $3.50이고, Maple Latte는 $4.50에 판매하며, Cold Brew는 판매하지 않는지 확인하세요. 대기 시간이 초과되면 이전 실습에서 배운 kubectl get pods와 kubectl describe deployment 문제 해결 절차를 사용하세요. 네임스페이스를 초기화하지 마세요.

판매하지 않는 Cold Brew를 포함하여 카드 네 개를 모두 비교하세요.
중요한 한계가 있습니다. undo는 구성 이름을 포함한 Pod 템플릿을 복원합니다. 같은 ConfigMap을 직접 편집했을 때의 임의의 이전 내용까지 복원하지는 않습니다. 보존된 각 생성 구성을 변경하지 마세요.
저장된 릴리스를 복구 상태에 맞추기
이 단계에서는 저장된 릴리스가 복구된 실제 애플리케이션을 재현하도록 만듭니다.
Workspace로 돌아오세요. 실행 중인 환경의 롤백은 로컬 파일을 편집하지 않습니다. release 디렉터리에는 아직 잘못된 후보가 들어 있으므로, 지금 적용하면 잘못된 가격이 다시 나타납니다. 교체하기 전에 파일을 읽으세요.
cat release/menu.json
Oat Latte 가격이 여전히 3500센트입니다. 승인된 가을 메뉴와 Deployment 정의를 작업용 릴리스에 복사하세요. 각 cp는 이름으로 지정한 대상 파일만 덮어씁니다. 원본 버전 디렉터리는 변경하지 마세요.
cp versions/autumn/menu.json release/menu.json
cp versions/autumn/deployment.json release/deployment.json
Deployment 파일에는 승인된 change-cause 어노테이션도 들어 있습니다. 기존 kustomization.yaml은 동일한 생성기와 네임스페이스를 유지합니다. 릴리스를 다시 렌더링하세요.
kubectl kustomize release
생성된 구성 이름은 복원한 가을 템플릿의 참조와 일치해야 합니다. 메뉴 바이트가 같으므로 새 데이터 버전은 필요하지 않습니다. 복구 상태에 맞춘 소스를 적용하세요.
kubectl apply -k release
kubectl rollout status deployment/cafe -n cafe-menu --timeout=120s
승인된 메뉴를 계속 사용하는 상태로 롤아웃이 완료됩니다. 이제 다시 적용해도 복구를 되돌리지 않고 유지합니다. release 디렉터리 전체를 보존하세요. Deployment, 메뉴 파일, 생성기 구성이 함께 작동합니다. 잘못된 경로를 복사했다면 pwd와 ls versions/autumn으로 제공된 파일을 찾으세요. 보존된 이력을 편집하는 대신 두 개의 정확한 복사 명령을 다시 실행하세요.
복구된 메뉴 전달하기
이 단계에서는 실제 메뉴 다운로드로 작업을 마무리하고 영향을 받지 않아야 하는 카페가 계속 작동하는지 확인합니다.
Café Menu로 전환하세요. Our menu에서 Oat Latte의 About this drink 링크를 열고 수정된 $3.50 가격을 확인한 다음 Back to the menu로 돌아오세요. Visit us를 열고 위치와 영업시간을 확인하세요. Download menu를 사용하여 실제 전체 메뉴를 다운로드하세요.
Reference Menu로 전환하여 Our menu를 선택하세요. Willow Reading Room은 여전히 일상 메뉴를 보여 주어야 합니다. Juniper를 수정하면서 이 별도 서비스를 변경해서는 안 됩니다.
Workspace로 돌아오세요. 첫 실습에서 배운 것과 같은 curl 옵션으로 실제 다운로드를 저장하세요.
curl --fail --silent --show-error http://127.0.0.1:8081/menu.csv -o menu-handover.csv
승인된 표와 비교하세요.
diff -u approved/menu.csv menu-handover.csv
출력이 없으면 전체 다운로드가 일치한다는 뜻입니다. 차이가 나타나면 실제 행을 살펴보고 잘못된 버전을 복원한 것인지, 저장된 소스가 오래된 것인지 구분하세요. 릴리스를 수정하고 롤아웃이 완료될 때까지 기다린 다음 다시 다운로드하세요. 수신한 CSV를 직접 편집하지 마세요.
구성 목록을 확인하여 이전 버전을 계속 사용할 수 있는지 점검하세요.
kubectl get configmaps -n cafe-menu
실행 중인 카페, 재사용 가능한 소스, 실제 직원용 다운로드가 일치하면 복구가 완료됩니다. 이전 소스 버전과 생성된 구성 객체는 온전히 남아 있습니다.
요약
정상적인 애플리케이션과 올바른 메뉴를 구분하고, 완전한 비즈니스 증거를 바탕으로 리비전을 선택한 뒤, 보존된 구성 참조를 복원했습니다. 이후 적용에서도 복구 상태가 유지되도록 로컬 릴리스를 맞추었으며, 참조 서비스를 변경하지 않고 실제 페이지와 메뉴 다운로드를 확인했습니다.
독립 도전 과제에서는 카페, 메뉴 항목 간 관계, 승인된 버전이 달라집니다. 구성, 롤아웃, 전달 방법은 동일하게 사용합니다.



