はじめに
Juniper Café はリクエストを処理していますが、最新メニューでは Oat Latte が $35.00 になっています。正常な Pod でも、誤った業務データを配信することがあります。カフェ、以前のバージョン、別の読書室サービスを維持しながら、承認済みの秋メニューを復元します。
これは、専用のリリース履歴が準備された新しい環境です。前の実験のファイルやプロセスは使いません。季節メニューの実験を完了していることを前提とします。このレッスンでは、そこで学んだメニュー形式、生成される ConfigMap、Deployment、ダウンロードの確認を再利用し、リビジョンの選択と復旧を新たに学びます。35 分は作者の見積もりであり、初学者の実測時間ではありません。
承認済みのリビジョンを復元する
このステップでは、実際のメニューと Deployment の履歴を使い、承認済みの秋バージョンを選んで復元します。
Café Menu を開き、Explore the menu を選択して Oat Latte を探します。Web サイトと飲み物の詳細ページは読み込めますが、現在の $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 を読みます。変更理由のテキストは、準備された各リリースの識別に役立ちます。
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 は、選択した以前の Pod テンプレートに Deployment を変更します。--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 を含め、4 つすべてのカードを比較してください。
重要な制限があります。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 ファイルには、承認済みの変更理由のアノテーションも含まれています。既存の 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 で用意されたファイルの場所を確認できます。保持された履歴を編集する代わりに、上の 2 つの正確なコピーを繰り返してください。
復旧したメニューを引き渡す
このステップでは、実際のメニューをダウンロードして仕上げ、影響を受けていないカフェが引き続き動作することを確認します。
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
実行中のカフェ、再利用可能なソース、実際のスタッフ用ダウンロードが一致すると、復旧は完了です。以前のソースバージョンと生成された設定オブジェクトは、そのまま残ります。
まとめ
アプリケーションの正常性とメニューの正しさを区別し、業務上の証拠全体を使ってリビジョンを選び、保持されていた設定の参照を復元しました。また、後で適用しても復旧状態を維持できるようローカルのリリースを整合させ、参照用サービスを変えずに、実際のページとメニューのダウンロードを確認しました。
独立したチャレンジでは、カフェ、メニューの関係、承認済みバージョンが変わります。設定、ロールアウト、引き渡しには同じ方法を使います。



