レビューの新しいバージョンの追加
このモジュールでは、レビューアの評価の数と星の色を返すreviews
サービスの新しいバージョン_v2_
をデプロイします。本番環境へのデプロイ前には、静的解析テスト、単体テスト、統合テスト、エンドツーエンドテスト、ステージング環境でのテストを実行します。
app=reviews
ラベルなしで、reviews
マイクロサービスの新しいバージョンをデプロイします。このラベルがないと、新しいバージョンはreviews
サービスを提供するように選択されず、本番コードから呼び出されません。app=reviews
ラベルをapp=reviews_test
に置き換えて、以下のコマンドを実行し、reviews
マイクロサービスバージョン2をデプロイします。アプリケーションにアクセスして、デプロイされたマイクロサービスがアプリケーションを中断していないことを確認します。
前にデプロイしたテストコンテナを使用して、クラスタ内からマイクロサービスの新しいバージョンをテストします。新しいバージョンはテスト中に
ratings
マイクロサービスの本番ポッドにアクセスすることに注意してください。また、reviews
サービスに選択されていないため、マイクロサービスの新しいバージョンにアクセスするには、ポッドのIPアドレスを使用する必要があることに注意してください。ポッドのIPアドレスを取得します。
ポッドにリクエストを送信し、正しい結果が返されることを確認します。
リクエストを連続して10回送信することで、プリミティブな負荷テストを実行します。
上記の手順により、
reviews
の新しいバージョンが機能することを確認し、デプロイできます。サービスの単一レプリカを本番環境にデプロイするため、実際のトラフィックが新しいサービスバージョンに到達し始めます。現在の設定では、トラフィックの75%が古いバージョン(古いバージョンの3つのポッド)に、25%が新しいバージョン(単一のポッド)に到達します。reviews v2をデプロイするには、
app=reviews
ラベルを使用して新しいバージョンを再デプロイし、reviews
サービスからアドレス指定できるようにします。これで、アプリケーションのウェブページにアクセスし、評価に黒い星が表示されることを確認できます。ページに数回アクセスすると、星が表示される場合(約25%)と、星が表示されない場合(約75%)があります。
評価に黒い星が表示されたBookinfo Webアプリケーション 本番環境で新しいバージョンに問題が発生した場合、新しいバージョンをすばやくアンデプロイして、古いバージョンのみを使用することができます。
設定の変更がシステム全体に伝播するまで時間を待ちます。その後、アプリケーションのウェブページに数回アクセスして、黒い星が表示されなくなったことを確認します。
新しいバージョンを復元するには
アプリケーションのウェブページに数回アクセスして、黒い星が約25%の確率で表示されることを確認します。
次に、新しいバージョンのレプリカ数を増やします。エラーの数が増加しないことを注意深く確認しながら、段階的に増やすことができます。
これで、アプリケーションのウェブページに数回アクセスすると、黒い星が約半分の確率で表示されます。
これで、古いバージョンを廃止できます。
アプリケーションのウェブページにアクセスすると、黒い星のみが表示されたレビューが返されます。
上記の手順では、reviews
の更新を実行しました。まず、シミュレートされた本番トラフィックを送信せずに新しいバージョンをデプロイしました。テストトラフィックを使用して本番環境でテストしました。新しいバージョンが正しい結果を提供することを確認しました。新しいバージョンをリリースし、徐々に本番トラフィックを増やしました。最後に、古いバージョンを廃止しました。
ここから、次の例題タスクを使用してデプロイメント戦略を改善できます。まず、本番環境で新しいバージョンのエンドツーエンドテストを実行します。これには、リクエストパラメータを使用して新しいバージョンにトラフィックを誘導する機能が必要です(たとえば、Cookieに保存されているユーザー名を使用します)。さらに、本番トラフィックを新しいバージョンにシャドウイングし、新しいバージョンが間違った結果を提供したり、エラーが発生したりしないかどうかを確認します。最後に、ロールアウトの制御をより詳細に取得します。例として、1%でデプロイし、サービスの劣化がない限り、1時間ごとに1%ずつ増やすことができます。Istioは、これらのタスクを簡単に実行できるようにすることで、Kubernetesの価値を高めます。デプロイメントに関する詳細情報とベストプラクティスについては、デプロイメントモデル5を参照してください。
ここから、2つの選択肢があります。
サービスメッシュを使用します。サービスメッシュでは、すべてのレポート、ルーティング、ポリシー、セキュリティロジックを、アプリケーションポッドに透過的に注入されたサイドカープロキシに配置します。ビジネスロジックはアプリケーションのコードに残っており、アプリケーションコードに変更を加える必要はありません。
アプリケーションコードに必要な機能を実装します。ほとんどの機能は、Javaプログラミング言語用のNetflixのHystrix6ライブラリなど、さまざまなライブラリで既に利用可能です。ただし、ライブラリを使用するにはコードを変更する必要があります。追加の労力を費やす必要があり、コードが膨れ上がり、ビジネスロジックとレポート、ルーティング、ポリシー、ネットワーキングロジックが混在します。マイクロサービスが異なるプログラミング言語を使用しているため、複数のライブラリを学習、使用、更新する必要があります。
Istioがここで説明されているタスクなどをどのように実行できるかについては、Istioサービスメッシュ7を参照してください。次のモジュールでは、さまざまなIstio機能について説明します。
productpage
でIstioを有効にする準備ができました。Istioを有効にする8