このガイドでは、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 パフォーマンスの最適化は難しいと聞きました。今日試してみました!
おそらく、インターネット上に何万人ものウェブマスターがいる理由は、そのほとんどが、この人やあの人がウ...
なぜこの記事を書くのですか?まず、キャッシュは、その高い同時実行性と高いパフォーマンスにより、プロジ...
cheapwindowsvps は SSDVPS.com のものです。同社は現在 Windows V...
まず、入札の原則についてお話ししましょう。訪問者は購入ニーズを生み出し、検索エンジンで関連キーワード...
テクノロジーはますます進歩し、私たちの生活はこれまで以上に便利になるでしょう。日を追うごとに、テクノ...
Operavpsは2008年に設立され、主にVPS、RDP、独立サーバー事業を展開しています。データ...
調査会社IDGの調査によると、2018年には69%の企業がクラウドコンピューティング技術を導入してい...
企業の Web サイトの場合、ホームページのタイトルは、2 つまたは 3 つのコアキーワード + 会...
reliablehostingservices.net は 2010 年に設立され、ドメイン名は 2...
OpenStack は 2010 年から 8 年間オープンソース化されてきました。主流のエンタープラ...
SEO 業界に参入してから 1 年半の間、私の哲学は常に、キーワードの最適化を二次的な優先事項として...
Nutanix は本日、企業のプライベート、ハイブリッド、パブリック クラウド導入の進捗状況を評価す...
1. 最適化ガイダンス私たちは、留学生のニーズとウェブサイトのユーザーエクスペリエンスを指針として、...
618がもうすぐやってきます。米国西海岸のRaksmartのサンノゼデータセンターもこの楽しみに参加...
<a href="http://www..com/act/cloudedm/edm9...