Верните утверждённое меню

KubernetesBeginner
Практиковаться сейчас

Введение

Juniper Café обслуживает запросы, но в последнем меню Oat Latte стоит $35.00. Даже исправный Pod может отдавать неправильные бизнес-данные. Вы восстановите утверждённое осеннее меню, сохранив само кафе, его прежние версии и отдельный сервис читального зала.

Это новое окружение с собственной подготовленной историей выпусков. Оно не использует файлы или процессы из предыдущей работы. Перед началом следует завершить работу с сезонным меню: здесь повторно используются его формат, сгенерированные ConfigMap, Deployment и проверки выгрузки, а затем вводятся выбор ревизии и восстановление. Продолжительность в 35 минут — авторская оценка, а не результат замера времени начинающих.

Восстановите утверждённую ревизию

На этом шаге вы используете настоящее меню и историю Deployment, чтобы выбрать и восстановить утверждённую осеннюю версию.

Откройте Café Menu, выберите Explore the menu и найдите Oat Latte. Текущая цена $35.00 неверна, хотя сайт и страницы отдельных напитков открываются. Переключитесь на Workspace, где начальный каталог — /home/labex/project/cafe-menu.

Прочитайте полную утверждённую таблицу сотрудников за стойкой и метку сезона. Как и в предыдущей работе, цены заданы целым числом центов; 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. Этот сохранённый шаблон может запустить новые Pod именно с той старой конфигурацией, потому что ConfigMap всё ещё существует.

Восстановите эту ревизию. 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 откройте ссылку About this drink для Oat Latte, проверьте исправленную цену $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

Восстановление завершено, когда работающее кафе, повторно используемые исходные файлы и настоящая выгрузка для сотрудников согласованы. Прежние версии исходных файлов и сгенерированные объекты конфигурации остаются нетронутыми.

Резюме

Вы научились отличать исправное приложение от правильного меню, выбрали ревизию на основе полных бизнес-данных и восстановили её ссылку на сохранённую конфигурацию. Вы также согласовали локальный выпуск, чтобы последующее применение сохраняло результат восстановления, а затем проверили настоящие страницы и реальную выгрузку меню, не меняя эталонный сервис.

В самостоятельном задании меняются кафе, связи между данными меню и утверждённая версия. В нём используются те же методы работы с конфигурацией, развёртыванием и передачей меню.