Kubernetes の導入戦略を 1 つの記事で理解する

Kubernetes の導入戦略を 1 つの記事で理解する

この記事では、Kubernetes のデプロイメントの概念と一般的な戦略について詳しく説明し、それぞれの長所と短所を見ていきます。適切な導入戦略により、ダウンタイムを最小限に抑え、顧客エクスペリエンスを向上させ、信頼性を高めながらアプリケーションをリリースできます。

Kubernetes のデプロイメント戦略とは何ですか?

Kubernetes デプロイメントは、通常 YAML ファイルで構成される宣言ステートメントであり、アプリケーションのライフサイクルと、そのアプリケーションの更新の管理方法を定義します。

アプリケーションを K8s クラスターにデプロイする場合、選択したデプロイメント戦略によって、アプリケーションが古いバージョンから新しいバージョンに更新される方法が決まります。一部の戦略ではダウンタイムが発生する可能性がありますが、他の戦略ではテストの概念を導入し、ユーザー分析を可能にする場合があります。この記事では、一般的に使用される 2 つの基本的な K8s デプロイメント戦略を紹介します。

  • 再現
  • ローリング

次のポリシーは、トラフィック フローの方向をさまざまな方法で制御できるため、「高度な展開ポリシー」と見なされます。

  • 青/緑
  • カナリア
  • AB型
  • シャドウデプロイメント

K8s はデフォルトの戦略としてローリング アップデート戦略を使用しますが、場合によっては適切ではないことがあります。それぞれの戦略について詳しく議論しましょう!

1. デプロイメントを再作成する

デプロイメントを再作成すると、すべてのポッドが終了し、新しいバージョンのポッドに置き換えられます。これは、アプリケーションの古いバージョンと新しいバージョンを同時に実行できない場合に役立ちます。この戦略を使用することで発生するダウンタイムは、アプリケーションのシャットダウンと起動にかかる時間によって異なります。完全な置き換えにより、アプリケーションの状態も完全に更新されます。

次の例は、type=Recreate が再作成を意味することを示しています

 spec: replicas: 10 strategy: type: Recreate

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

ローリング アップデートは、クラスターのダウンタイムを短縮することを目的とした K8s のデフォルトのデプロイメント モードです。ローリング アップデートでは、ダウンタイムなしで、アプリケーションの古いバージョンを実行している Pod を徐々に新しいバージョンに置き換えます。

これを実現するために、準備プローブが使用されます。

準備プローブは、アプリケーションがいつ利用可能になるかを監視します。プローブが失敗した場合、そのポッドにトラフィックは送信されません。これらのプローブは、データベース接続、キャッシュ データの初期化、アプリケーション リリースの登録など、準備前にいくつかの初期化手順を実行する必要があるアプリケーションに使用されます。

準備プローブがアプリケーションの新しいバージョンが利用可能であることを検出すると、アプリケーションの古いバージョンは削除されます。何か問題が発生した場合、デプロイメントを停止して以前のバージョンにロールバックすることで、クラスター全体のダウンタイムを回避できます。各ポッドは 1 つずつ置き換えられるため、大規模なクラスターではデプロイメントに時間がかかる場合があります。別のデプロイメントが完了する前に新しいデプロイメントがトリガーされた場合、バージョンは新しいデプロイメントで指定されたバージョンに更新され、まだ正常にデプロイされていない以前のデプロイメント バージョンは無視されます。

ローリング アップデート デプロイメントをトリガーする条件は、Pod のイメージ、環境変数、ラベルの更新など、Pod 仕様の何らかの変更です。 kubectl set image コマンドを使用してPod イメージを更新できます。

yaml ファイルの Spec: -> strategy: セクションでは、 maxSurgemaxUnavailableという 2 つのパラメータを使用してデプロイメントを調整できます。両方のパラメータは、パーセンテージまたは絶対値として指定できます。水平 Pod 自動スケーリングを使用する場合は、パーセンテージを使用する必要があります。

  • maxSurge は、デプロイメントが同時に作成できる Pod の最大数を指定します。
  • maxUnavailable は、デプロイメント中に使用不可にできる Pod の最大数を指定します。

たとえば、次の構成では 10 個のレプリカが必要で、同時に最大 3 個のレプリカが作成され、デプロイメント中に 1 つのレプリカが使用不可になることが許可されます。

 spec: replicas: 10 strategy: type: RollingUpdate rollingUpdate: maxSurge: 3 maxUnavailable: 1

3. ブルー/グリーンデプロイメント

ブルー/グリーン デプロイメントでは、新しいアプリケーション バージョン (グリーン) を古いバージョン (ブルー) と並行してデプロイします。サービス セレクター オブジェクトがロード バランサーとして機能し、新しいアプリケーション (緑) がテストおよび検証されると、トラフィックは古いアプリケーションではなく新しいアプリケーションに送信されます。ブルー/グリーン デプロイメントでは、デプロイメント中に 2 倍のアプリケーション リソースを起動する必要があるため、コストが増加する可能性があります。

これを実現するには、サービスをデプロイする前に設定する必要があります。たとえば、web-app という名前のアプリケーションのバージョン v1.0.0 のブルー デプロイメントの場合、yaml ファイルのサービス セレクター セクションは次のようになります。

 kind: Service metadata: name: web-app-01 labels: app: web-app selector: app: web-app version: v1.0.0

青い Web アプリの展開は次のとおりです。

 kind: Deployment metadata: name: web-app-01 spec: template: metadata: labels: app: web-app version: "v1.0.0"

トラフィックをアプリケーションの新しい (グリーン) バージョンに誘導する場合は、マニフェスト ファイルを更新して新しいバージョン v2.0.0 を指すようにします。

 kind: Service metadata: name: web-app-02 labels: app: web-app selector: app: web-app version: v2.0.0

グリーンアプリケーションの展開は次のとおりです。

 kind: Deployment metadata: name: web-app-02 spec: template: metadata: labels: app: web-app version: "v2.0.0"

4. シャドウデプロイメント

カナリアという用語は、シャドウ デプロイメントと同じ意味で使用されます。

シャドウ デプロイメントとは、主に監視とテストの目的で、アプリケーションの新しいバージョンを既存の運用バージョンと並行してデプロイする戦略です。シャドウ デプロイメントでは、ユーザー トラフィックは新しいバージョンにアクティブにルーティングされません。これは、新機能の本番負荷をテストする場合に特に役立ちます。

このテクノロジーはより複雑であり、特にエクスポートフローには特別な要件が必要です。たとえば、製品がある場合、シャドウ テストのために支払いサービスを呼び出すと、顧客が注文に対して 2 回支払いをすることになり、複雑さが比較的高くなります。

5. カナリアデプロイメント

カナリア デプロイメントは、一部のユーザーを対象にアプリケーションの新しいバージョンをテストする場合や、新しいバージョンの機能に完全に自信がない場合に使用できます。新しいバージョンのコピーは古いバージョンと一緒にリリースされ、古いバージョンのアプリケーションは大多数のユーザーに使用され、新しいバージョンのアプリケーションは少数のテスト ユーザーに使用されます。新しい展開が成功した場合、徐々により多くのユーザーに拡大されます。

たとえば、100 個の実行中のポッドを持つ K8s クラスターでは、95 個がアプリケーションのバージョン v1.0.0 を実行しており、5 個が新しいバージョン v2.0.0 を実行しています。ユーザーの 95% は古いバージョンにルーティングされ、5% は新しいバージョンにルーティングされます。これを実現するために、個別にスケーリングできる 2 つのデプロイメントを並行して使用します。

古いアプリケーションの yaml ファイルの spec セクションは次のようになります。

 spec: replicas: 95

新しいアプリケーションの yaml ファイルの spec セクションは次のようになります。

 spec: replicas: 5

上記の例では、100 個の Pod を実行するのは現実的ではない可能性があります。より良いアプローチとしては、NGINX、HAProxy、Traefik などのロード バランサー、または Istio、Hashicorp Consul、Linkrd などのサービス メッシュを使用して、トラフィックをより細かく制御することができます。

6. A/Bデプロイメント

カナリア デプロイメントと同様に、A/B デプロイメントでは、いくつかのターゲティング パラメータ (通常は HTTP ヘッダーや Cookie など) に基づいて特定のユーザーをターゲットにし、重みに基づいて異なるバージョン間でトラフィックを分散できます。この手法は、特定の機能の変換率をテストし、最終的な展開のために変換率が最も高いバージョンを選択するために広く使用されています。

このアプローチは、多くの場合、収集されたユーザー行動データに基づいており、より優れたビジネス上の意思決定を行うために使用されます。 A/B テスト中は通常、ユーザーには新しい機能は通知されないため、古いバージョンと新しいバージョンを使用するユーザー間のエクスペリエンスを現実的にテストして比較することができます。 A/B デプロイメントを使用したデプロイメントは、追加のテスト期間とユーザー エクスペリエンス分析のために遅くなる可能性があります。

A/B デプロイメントは、Istio とFlaggerを使用して自動化できます

要約する

この記事では、6 つの一般的な K8s 展開戦略について説明しました。これらの戦略をどのように使用するか、また各戦略を実装するためにどのツールを使用するかは、アプリケーションのデプロイ方法やアップグレード方法を決定する際に重要です。

<<:  2023 年のクラウド テストの 5 つのトレンド

>>:  Kubernetesのデプロイメントの送信からポッドの実行までのプロセス全体

推薦する

マルチクラウドは非常に人気がありますが、これらの課題を理解していますか?

過去 10 年間で、クラウド コンピューティングは企業のビジネス戦略と IT アーキテクチャの不可欠...

アジア太平洋地域のISVは、Red Hat OpenShiftがさまざまな垂直産業で広く使用されていることを示しています。

オープンソース ソリューションの世界的な大手プロバイダーである Red Hat, Inc. (NYS...

実践的な共有: マイクロマーケティングの最初の試みから得た洞察

今日皆さんにシェアしたいのは、私の最新の新しいプロジェクトです。フルタイムのプロジェクトではありませ...

ブランドマーケティングの露出を無料で増やす方法は?

アプリのリリース後、誰もがほとんどの時間とエネルギーをアプリのプロモーションに費やしています。実際、...

Bステーションブランドマーケティングガイド!

この記事のキーワード: Bilibili 、ブランドマーケティング、マーケティングプロモーション、ブ...

クラウドコンピューティングの大きな問題は、リズムを正しく保つことだ

機会の観点から見ると、クラウド コンピューティングは中国の産業が世界の先進国と真に同等になる唯一のチ...

怠惰な考え方は、一部のウェブマスターがSEOスキルを向上させるのを妨げます

ウェブマスターが毎日どれだけ大変な仕事をしているかは、誰もがよく知っています。ウェブサイトのコンテン...

日本のVPSおすすめ、(日本のクラウドホスト)おすすめ

日本 VPS (日本クラウドホスト): 日本は国際的な輸出帯域幅が大きく、ネットワークリソースが発達...

オフラインの花屋がオンラインの花屋を開業するためのマーケティング戦略を分析する

誰もが、お祭りのときに大切な人に花を贈る習慣があると思います。では、花屋を経営している方は、オフライ...

企業の SaaS ユーザー通信にセキュリティを組み込む方法

現代の SaaS アプリケーション プロバイダーは、顧客名や電子メール アドレスからアプリケーション...

「Made in China」から「Created in China」へ、SaaS製品もそれに応じて変化する必要がある

崔牛慧の周囲では、彼は「変わり者」だ。 Cui Niu Clubのメンバーのほとんどはソフトウェア業...

簡単な説明: Baidu ウェブマスター ツールを使用してウェブサイトのランキングを向上させる方法

SEO 実践者は幸運です! 現在、SEO を行う際には、Baidu Webmaster プラットフォ...

SaaS分野のホットな話題についてお話ししましょう

PLG は、企業の J 字型成長の原動力の 1 つであり、市場開拓戦略 (Go To Market...

クラウド コンピューティングがデジタル変革の万能薬ではない理由

今日、多くの組織は、ユーザーのデスクトップの更新や老朽化したサーバーの管理に時間を費やすのではなく、...