このガイドでは、Kubernetes と Istio を使用したプログレッシブ配信のための GitOps の使用について実践的な経験を積むことができます。 導入デモ: https://github.com/stefanprodan/gitops-istio GitOps とは何ですか?GitOps は、宣言型インフラストラクチャとワークロードの信頼できるソースとして Git を使用する継続的デリバリーのアプローチです。 Kubernetes の場合、これは kubectl apply/delete または helm install/upgrade の代わりに git push を使用することを意味します。 このワークショップでは、GitHub を使用して構成リポジトリをホストし、Flux を GitOps 配信ソリューションとして使用します。 プログレッシブデリバリーとは何ですか?プログレッシブ配信は、カナリア、機能フラグ、A/B テストなどの高度なデプロイメント パターンの総称です。プログレッシブ デリバリー技術は、アプリケーション開発者と SRE チームに影響範囲を細かく制御できるようにすることで、新しいソフトウェア バージョンを本番環境に導入するリスクを軽減します。 このワークショップでは、Flagger と Prometheus を使用して、アプリケーションのカナリア リリースと A/B テストを自動化します。 準備LoadBalancer をサポートする Kubernetes クラスター v1.16 以上が必要になります。テスト目的では、2 つの CPU と 4 GB のメモリを搭載した Minikube を使用できます。 Homebrew を使用して flux CLI をインストールします。
macOS AMD64/ARM64、Linux AMD64/ARM、Windows 用のバイナリは、flux2 リリース ページからダウンロードできます。 クラスターが前提条件を満たしていることを確認します。
Homebrew を使用して jq と yq をインストールします。
このリポジトリをフォークしてクローンします:
クラスターブートストラップflux ブートストラップ コマンドを使用すると、Kubernetes クラスターに Flux をインストールし、Git リポジトリから自身を管理するように構成できます。クラスターに Flux コンポーネントが存在する場合、ブートストラップ コマンドは必要に応じてアップグレードを実行します。 GitHub リポジトリのフォーク URL を指定して Flux をブートストラップします。
上記のコマンドには ssh-agent が必要です。Windows を使用している場合は、flux bootstrap github ドキュメントを参照してください。 起動時に、Flux は SSH キーを生成し、公開キーを出力します。クラスターの状態を git と同期するには、公開キーをコピーし、write を使用して GitHub リポジトリにアクセスするためのデプロイ キーを作成する必要があります。 GitHub で、[設定] > [デプロイ キー] に移動し、[デプロイ キーの追加] をクリックして、☑️ [書き込みアクセスを許可する] をオンにし、Flux 公開キーを貼り付けて、[キーの追加] をクリックします。 Flux がリポジトリにアクセスすると、次の処理が行われます。
Istio を使用してクラスターをブートストラップする場合、適用順序を定義することが重要です。アプリケーション ポッドが Istio サイドカー インジェクションを使用するには、アプリケーションの前に Istio コントロール プレーンが起動して実行されている必要があります。 Flux v2 では、オブジェクト間の依存関係を定義することで実行順序を指定できます。たとえば、clusters/my-cluster/apps.yaml では、アプリの調整が istio システムに依存することを Flux に伝えます。
まず Flux を観察して Istio をインストールし、次にデモ アプリを観察します。
次のコマンドを使用して、Flux 調整ログを tail できます。
Istio のカスタマイズとアップグレードistio/system/profile.yaml にある IstioOperator リソースを使用して、Istio インストールをカスタマイズできます。
Istio 設定を変更した後、変更を git にプッシュすると、Flux によってクラスターに適用されます。 Istio オペレーターは、変更に応じて Istio コントロール プレーンを再構成します。 新しい Istio バージョンが利用可能になると、update-istio GitHub Action ワークフローは、Istio Operator のアップグレードに必要なマニフェスト更新を含むプル リクエストを開きます。新しい Istio バージョンは、e2e ワークフローを通じて Kubernetes Kind でテストされます。 PR がマスター ブランチにマージされると、Flux はクラスター内の Istio をアップグレードします。 アプリケーションのブートストラップFlux が Git リポジトリをクラスターと同期すると、フロントエンド/バックエンドのデプロイメント、HPA、およびカナリア オブジェクトが作成されます。 Flagger は、カナリア定義を使用して、Kubernetes デプロイメント、ClusterIP サービス、Istio 宛先ルール、仮想サービスなどの一連のオブジェクトを作成します。これらのオブジェクトはメッシュ上のアプリケーションを公開し、カナリア分析とプロモーションを容易にします。
Flagger がカナリアを正常に初期化したかどうかを確認します。
フロントエンド プライマリ デプロイメントが稼働すると、Flagger はすべてのトラフィックをプライマリ ポッドにルーティングし、フロントエンド デプロイメントをゼロにスケーリングします。 Istio Ingress ゲートウェイ アドレスを見つけるには、次のコマンドを使用します。
ブラウザを開いてエントリ アドレスに移動すると、フロントエンド UI が表示されます。 カナリアリリースFlagger は、HTTP リクエストの成功率、平均リクエスト期間、ポッドの健全性などの主要なパフォーマンス指標を測定しながら、トラフィックを徐々にカナリアに移行する制御ループを実装します。 KPI 分析に基づいて、カナリアのアップグレードまたは終了が行われ、分析結果が Slack に公開されます。 カナリア分析は、次のいずれかのオブジェクトが変更されるとトリガーされます。 PodSpec をデプロイする (コンテナ イメージ、コマンド、ポート、環境など) ConfigMaps と Secrets はボリュームとしてマウントされるか、環境変数にマップされます 一定のトラフィックを受信しないワークロードの場合、Flagger は、呼び出されるとターゲット ワークロードの負荷テストを開始する Webhook で構成できます。カナリア設定は、apps/backend/canary.yaml にあります。 GitHub から変更をプルします:
バックエンド アプリケーションのカナリア デプロイメントをトリガーするには、コンテナ イメージをアップグレードします。
変更をコミットしてプッシュします。
Flux に変更をプルするように指示するか、Flux が独自に変更を検出するまで 1 分ほど待ちます。
Flux を監視して、クラスターを最新のコミットと調整します。
数秒後、Flager はデプロイメント リビジョンが変更されたことを検出し、新しいロールアウトを開始します。
分析中、Grafana はカナリアの進行状況を監視できます。ポート転送を介してダッシュボードにアクセスできます。
IstioダッシュボードのURLはhttp://localhost:3000/d/flagger-istio/istio-canary?refresh=10s&orgId=1&var-namespace=prod&var-primary=backend-primary&var-canary=backendです。 カナリア分析中にデプロイメントに新しい変更が適用されると、Flagger は分析フェーズを再開することに注意してください。 A/Bテスト重み付けルーティングに加えて、Flagger は HTTP 一致条件に基づいてトラフィックをカナリアにルーティングするように構成することもできます。 A/B テストのシナリオでは、HTTP ヘッダーまたは Cookie を使用して、ユーザーの特定のセグメントをターゲットにします。これは、セッション アフィニティを必要とするフロントエンド アプリケーションに特に役立ちます。 HTTP 一致条件と反復回数を指定して、A/B テストを有効にすることができます。
上記の設定では、Firefox ユーザーと内部 Cookie を持つユーザーに対して 2 分間の分析が実行されます。フロントエンドの構成は、apps/frontend/canary.yaml にあります。 フロントエンド コンテナ イメージを更新してデプロイをトリガーします。
Flagger はデプロイメント リビジョンが変更されたことを検出し、A/B テストを開始します。
すべてのカナリアを次の方法で監視できます。
Istio メトリックに基づくロールバックFlagger は、Istio テレメトリによって提供されるメトリックを使用して、カナリア ワークロードを検証します。フロントエンド アプリケーション分析では、次の 2 つのインジケーター チェックが定義されます。
エラー率とレイテンシをチェックするための Prometheus クエリは flagger-metrics.yaml にあります。 カナリア分析中に、HTTP 500 エラーと高レイテンシを生成して、Flagger ロールバックをテストできます。 HTTP 500 エラーを生成します:
遅延を生成:
失敗したチェックの数がカナリア分析のしきい値に達すると、トラフィックはプライマリにルーティングされ、カナリアはゼロにスケーリングされ、ロールアウトは失敗としてマークされます。
Prometheus、Datadog、Amazon CloudWatch のカスタム メトリック チェックを使用して分析を拡張できます。 Slack、MS Teams、Discord、または Rocket のカナリア分析アラートの設定については、ドキュメントを参照してください。 |
<<: Redis に基づく分散ロックと Redlock アルゴリズム
>>: JVM パフォーマンスの最適化は難しいと聞きました。今日試してみました!
最近スポーツ界で目覚ましい活躍を見せているのは、NBAのニューヨーク・ニックスの中国系アメリカ人選手...
A5ウェブマスターネットワーク(admin5.com)は3月20日に報道しました:最近、国内の有名な...
以前、「高性能ウェブサイト構築ガイド」でETagについて学んだことがありますが、実際に適用したことは...
1. ICBCは文書86号を使用してAlipayに強く反応し、多くの銀行が支払いインターフェースのク...
Prohostingserver は、仮想ホスティング、リセラー、VPS、サーバーレンタルを統合した...
多くの企業にとって、クラウド リソースの活用は戦略の一部ではなく、個々のチームがニーズを満たすために...
疫病の影響で、交通はオンラインに移行し、プロモーションチャネルもオンラインに移行しました。この記事は...
現在、ウェブサイトを宣伝し、検索エンジンがより多く、より速く検索できるようにし、GoogleやBai...
クラウド コンピューティングのこの次の大きな側面は、企業の IT ユーザーに多くの利点をもたらします...
最近、国際的に権威のある研究機関であるOmdiaは「Omdia Universe:ハイブリッドおよび...
前回の記事では、主にユーザーのニーズの分析とその内容を紹介しました。この記事では、主にほとんどのユー...
オムニチャネル環境でユーザー操作を適切に行うことは簡単ではありません。これを実現するには、消費者向け...
本日の記事では、主にデータレイクの定義を紹介し、その後、主要なクラウドベンダーのソリューションと現在...
kuaichedao(高速トラック)は主に3種類のVPSを運営しています:(1)香港のダイナミックV...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています最近、大胆...