Kubernetes のさまざまなデプロイメント戦略を探る

Kubernetes のさまざまなデプロイメント戦略を探る

[51CTO.com クイック翻訳] ご存知のとおり、クラウドネイティブアプリケーションの開発プロセスでは、単位時間あたりのアプリケーション展開の量と品質をいかに高速化するかを競うことがよくあります。マイクロサービス アプローチを使用すると、開発者は完全にモジュール化されたアプリケーションを迅速に設計できるため、より多くのチーム メンバーが単一のアプリケーションに対して同時に変更とリリースを記述および展開できるようになります。より短期間で頻繁な展開により、企業に次のようなメリットがもたらされることがわかります。

  • 市場投入までの時間を短縮します。
  • 顧客は新機能をより早く利用できるようになります。
  • さまざまな顧客からのフィードバックがより迅速に製品チームに届くようになり、製品チームも反復を通じて既存の問題をより迅速に解決できるようになります。
  • より多くの新機能を本番環境にリリースすることで、開発者の士気を高めます。

もちろん、リリース頻度が高くなると、アプリケーションの信頼性や顧客エクスペリエンスの満足度にも悪影響が及ぶことになります。そのため、運用チームと DevOps チームが協力してプロセスを開発し、さまざまな展開戦略を管理して、製品と顧客へのリスクを最小限に抑える必要があります。 (CI/CD パイプラインの自動化の詳細については、以下を参照してください)

この記事では、ローリング デプロイメント、リビルド、ブルーグリーン、カナリア、およびそれらのバリエーションなどの高度な方法を含む、さまざまな Kubernetes デプロイメント戦略について説明します。

展開戦略

目標に応じて、Kubernetes のさまざまなデプロイメント戦略を採用できます。たとえば、より多くのテスト バージョンを起動するには、特定の環境または一部のユーザーと顧客に変更を加える必要がある場合があります。または、特定の機能を一般公開する前に、一部のユーザーに対してテストしたい場合もあります。

ローリングデプロイメント

ローリング デプロイメントは、Kubernetes の標準化されたデフォルトのデプロイメント方法です。実行速度は遅くなりますが、クラスターのダウンタイムを発生させることなく、アプリケーションのポッドの古いバージョンを新しいバージョンに 1 つずつ置き換えることができます。

古いポッドの置き換えを開始する前に、ローリング アップデートでは、準備状況プローブ (準備状況プローブを参照) を通じて新しいポッドが配置されているかどうかを確認する必要があります。問題が発生した場合、クラスター全体のダウンタイムを回避するために、ローリング アップデートまたはデプロイメントが中断されます。したがって、次の YAML 定義ファイルを参照して、ローリング デプロイメント方式で古いイメージを新しいイメージに置き換えることができます。

  1. APIバージョン: アプリ/v1beta1
  2. 種類: デプロイメント
  3. メタデータ:
  4. 名前: awesomeapp
  5. 仕様:
  6. レプリカ: 3
  7. テンプレート:
  8. メタデータ:
  9. ラベル:
  10. アプリ: 素晴らしいアプリ
  11. 仕様:
  12. コンテナ:
  13. -名前: awesomeapp
  14. イメージ: imagerepo-ユーザー/awesomeapp:new
  15. ポート:
  16. - コンテナポート: 8080

以下に示すように、マニフェスト ファイル内のパラメータを調整することで、ローリング アップデートをさらに改良できます。

  1. 仕様:
  2. レプリカ: 3
  3. 戦略:
  4. タイプ: ローリングアップデート
  5. ローリングアップデート:
  6. 最大サージ: 25%
  7. 最大利用不可: 25%
  8. テンプレート:
  9. ...

再現する

これは非常にシンプルなデプロイメント方法で、下の図に示すように、すべての古いポッドを直接「削除」し、すぐに新しいポッドに置き換えます。

対応する標準マニフェスト ファイルは次のとおりです。

  1. 仕様:
  2. レプリカ: 3
  3. 戦略:
  4. タイプ: 再作成
  5. テンプレート:
  6. ...

青/緑または赤/黒の展開

ブルー/グリーン (レッド/ブラックと呼ばれることもあります) デプロイメント戦略では、アプリケーションの古いバージョン (グリーンと呼ばれる) とそれに対応する新しいバージョン (ブルー) が同時に本番環境にデプロイされます。下の図に示すように、一般ユーザーは緑色のバージョンにのみアクセスできます。一方、QA チームは、別のサービスまたは直接ポート転送を通じて、ブルー バージョンで自動テストを実行できます。

  1. APIバージョン: アプリ/v1beta1
  2. 種類: デプロイメント
  3. メタデータ:
  4. 名前: awesomeapp-02
  5. 仕様:
  6. テンプレート:
  7. メタデータ:
  8. ラベル:
  9. アプリ: 素晴らしいアプリ
  10. バージョン: "02"  

したがって、新しいバージョンが完全にテストされ承認された後にのみ、ユーザー向けのサービスはブルー バージョンに切り替えられ、古いグリーン バージョンは最終的に「廃止」されます。

  1. APIバージョン: v1
  2. 種類: サービス
  3. メタデータ:
  4. 名前: awesomeapp
  5. 仕様:
  6. セレクタ:
  7. アプリ: 素晴らしいアプリ
  8. バージョン: "02"  
  9. ...

カナリア

カナリアデプロイメントはブルー/グリーンデプロイメントに似ていますが、より制御されているため、より広く使用されています。カナリア デプロイメント タイプの主な特徴は、段階的なプログレッシブ配信モデルの使用です (を参照)。現在、ダークローンチや A/B テストなど、多くの戦略がこのカテゴリに分類されます。

新しい機能をテストしたい場合は、通常、アプリケーションのバックエンドにカナリア デプロイメント メソッドを使用できます。ここでは、ほぼ同一のサーバーを 2 つ準備できます。1 つは元の機能を引き続き使用し、すべてのユーザーが利用できるサーバーです。もう 1 つは、新機能が導入され、少数のユーザーにのみ公開されているものです。動作結果を比較することで、報告されたエラーが発生しなくなったら、新しいバージョンを運用システムのアーキテクチャの残りの部分に徐々に「ロールアウト」することができます。

このような戦略は、Kubernetes リソースを使用して古い Pod を新しい Pod に置き換えることで実現できますが、通常は Istio などのサービス メッシュを使用して、より便利かつ簡単に実装します。

以下の例に示すように、2 つの異なるマニフェストを Git に配置することができます。1 つは 0.1.0 としてタグ付けされた GA (GitApp) で、もう 1 つは 0.2.0 としてタグ付けされたカナリア バージョンです。 Istio 仮想ゲートウェイのマニフェスト ファイルでは、異なる重みを変更することで、2 つのデプロイメントのトラフィック パーセンテージ クォータを管理します。

Istio を使用してカナリア デプロイメントを実装する方法のステップ バイ ステップ ガイドについては、「GitOps ワークフローでの Istio の使用」チュートリアルを参照してください。

Weaveworks Flagger を使用したカナリア デプロイメント

カナリアデプロイメントを管理するもう一つのシンプルで効果的な方法は、Weaveworks Flaggerを使用することです(

Flagger は、カナリア デプロイメントの自動化を容易にします。 Istio または App Mesh を使用してトラフィックをルーティングおよびシフトし、Prometheus メトリックによるカナリア分析を使用します。さらに、Canary Analysis では、さまざまな受け入れテスト、負荷テスト、その他の種類のカスタム検証用に WebHook を拡張することもできます。

Flagger は Kubernetes デプロイメントを使用し、HPA (水平ポッドオートスケーラー) を選択して一連のオブジェクト (Kubernetes デプロイメント、ClusterIP サービス、Istio および APP Mesh 仮想サービスを含む) を作成し、カナリアスタイルの分析とプッシュを実行します。

制御ループを実装することにより、Flagger は HTTP リクエストの成功率、平均リクエスト期間、Pod の健全性などの主要なパフォーマンス指標を継続的に監視し、トラフィックを徐々にカナリア サービスに移行します。同時に、KPI を分析してカナリア サービス レベルの向上と低下を把握し、分析結果を Slack に公開することもできます。詳細と例については、「APP Mesh のプログレッシブ配信」を参照してください。

ダークデプロイメントとA/Bデプロイメント

ダークデプロイメントは、カナリアの別のバリエーションです。ダークデプロイメントとカナリアデプロイメントの違いは、ダークデプロイメントは主にフロントエンドの処理に使用されるのに対し、カナリアデプロイメントはバックエンドで使用されることが多いことです。

ダークデプロイメントの別名は A/B テストです。新しい機能をテストするには、少数のユーザーを選択し、ユーザーに知られずに展開してプッシュする必要がある場合があります。これはいわゆる「ダーク」展開です。

機能トグルやその他の種類のツールを使用することで、ユーザーが新しい機能とどのように対話するかを知ることができます。これにより、機能をユーザーに正式にプッシュするかどうか、新しい UI がわかりにくいかどうか、その他の種類の指標を判断するのに役立ちます。

フラグとA/B展開

実際、重み付けルーティングに加えて、Flagger は HTTP のさまざまな一致条件に基づいてアクセス トラフィックをカナリア サービスにルーティングすることもできます。たとえば、A/B テストのシナリオでは、さまざまな HTTP ヘッダーまたは Cookie を使用して特定のユーザーをルーティングできます。明らかに、これはセッションの関連付けを実行する必要があるフロントエンド アプリケーションに特に役立ちます。もちろん、具体的な内容については、Flagger の関連ドキュメントを参照できます。

原題: Kubernetes デプロイメント戦略、著者: Anita Buehrle

[51CTOによる翻訳。パートナーサイトに転載する場合は、元の翻訳者と出典を51CTO.comとして明記してください。

<<:  企業がクラウドコンピューティングを正しく利用してビジネスを変革する方法

>>:  Kubernetes 上で Kafka を実行するのは適切でしょうか?

推薦する

Mindray Medical は Amazon Web Services 上で Red Hat OpenShift を使用してクラウドネイティブ プラットフォームを構築しています。

2020 年 7 月 25 日、Red Hat は、医療機器およびソリューションの大手グローバルプロ...

企業のウェブサイトがオンラインとオフラインを統合したウェブサイトを構築したい場合、試してみる価値があります。

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますリソースの...

EverDB 分散実行プラン

この記事は、EverDB R&D チームが執筆した WeChat パブリック アカウント「独...

新しい消費者保護法により、オンラインショッピングの返品手続きが困難に。オンラインストアは依然として理由のない返品は受け付けないとしている。

新華網長春5月3日(記者 趙孟卓)新しい消費者保護法が施行されて1か月以上が経過した。多くのオンライ...

国内のPinterestのようなウェブサイトは電子商取引に圧迫され、最近はトラフィックが減少している

Pinterest(写真ビジュアルソーシャル共有ウェブサイト)が人気となり、中国で美麗書や莫谷街の流...

Shuren Cloud PaaSイノベーションカンファレンスで「エンタープライズコンテナクラウドプラットフォーム」アライアンス標準が発表されました

11月16日、中国オープンソースクラウドアライアンスWG6コンテナワーキンググループとShu Ren...

プリインストールされたソフトウェアをアンインストールできないとしてユーザーがAppleを訴える

新快報によると、深セン在住の姚さんは、アップルのiPhoneにはプリインストールされたソフトウェアを...

エンタープライズクラウドコンピューティングの選択: 行動する前によく考えてください

テクノロジーの世界では、クラウド コンピューティングが実際に何であるかについて議論が続いています。認...

WeChat パブリックアカウントのユーザー粘着性を高めるにはどうすればよいでしょうか?

WeChat公式アカウントのユーザー粘着度とは、ユーザーのアカウントに対する認知度と依存度を指し、P...

事例 - Joyo と Dangdang が検索エンジンを使用して製品を宣伝する方法

この記事では、主に、2 大 B2C ウェブサイトである Joyo と Dangdang が検索エンジ...

あなたのウェブサイトが魅力的でないのはなぜですか? ウェブサイトを台無しにする 12 の罪

あなたのウェブサイトが魅力的でない、またはコンバージョン率が低いのはなぜでしょうか? ウェブ開発者、...

Docker(パート3):Dockerfileコマンドの詳しい説明

前回の記事「Docker (II): Dockerfile の使い方入門」では、Dockerfile...

vpscheap: 25% 割引、年間 7 ドル、512M メモリ/2 コア/30g SSD/2T データ転送/バッファロー、米国

vpscheap は古いユーザーに対して、すべての VPS を 25% 割引するプロモーション オフ...

Vue の仮想 Dom 技術を学習しましたか?

Vue では、仮想 DOM が重要なテクノロジーであり、JavaScript オブジェクトを使用して...

Ingres を使用して Dapr アプリケーションにアクセスする

前回の記事では、分散ランタイム Dapr の使い方を紹介しました。この例では、状態ストレージ機能が ...