Slide 1

Slide 1 text

分散負荷試験の自動化を実現する Gatling Operatorの紹介
 Kubernetes Meetup Tokyo #49 2022/03/29 株式会社ZOZO 技術本部 SRE部 ECプラットフォーム基盤SREブロック 巣立健太郎 Copyright © ZOZO, Inc.

Slide 2

Slide 2 text

© ZOZO, Inc. 株式会社ZOZO 技術本部 SRE部 ECプラットフォーム基盤SREブロック 巣立 健太郎 新卒SREとして、 ZOZOTOWNリプレイスプロジェクトに参画 Kubernetes歴はもうすぐ1年 Twitter: @tmrekk_ 
 
 2

Slide 3

Slide 3 text

© ZOZO, Inc. https://zozo.jp/ 3 ● ファッション通販サイト ● 1,500以上のショップ、8,400以上のブランドの取り扱い ● 常時83万点以上の商品アイテム数と毎日平均2,900点以上の新着 商品を掲載(2021年12月末時点) ● ブランド古着のファッションゾーン「ZOZOUSED」や コスメ専門モール「ZOZOCOSME」、靴の専門モール 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン 「ZOZOVILLA」を展開 ● 即日配送サービス ● ギフトラッピングサービス ● ツケ払い など

Slide 4

Slide 4 text

© ZOZO, Inc. https://wear.jp/ 4 ● ファッションコーディネートアプリ ● 1,500万ダウンロード突破、コーディネート投稿総数は1,200万 件以上(2021年12月末時点) ● ピックアップタグから最新のトレンドをチェック ● コーディネート着用アイテムを公式サイトで購入可能 ● WEAR公認の人気ユーザーをWEARISTAと認定。モデル・タレン ト・デザイナー・インフルエンサーといった各界著名人も参加

Slide 5

Slide 5 text

© ZOZO, Inc. はじめに 5 ZOZOTOWNでは様々な負荷試験が日々行われています。 その中で直面する課題解決の手段の1つとしてGatling Operatorは開発されました。 今回の発表では、Gatling Operatorの開発背景から仕組み、使い方について紹介します。

Slide 6

Slide 6 text

© ZOZO, Inc. 6 目次 ● 開発背景 ● Gatling Operatorについて ○ Gatlingとは ○ Gatling Operatorとは ● 使い方 ● まとめ

Slide 7

Slide 7 text

© ZOZO, Inc. 7 開発背景 ZOZOTOWN冬セール対策の負荷試験における課題 ● 冬セールは1年で最もユーザアクセスの多いイベント ● 大規模な負荷試験を本番相当の環境を使って実施 ● 大量のGatling実行用ノードの準備、実行タイミング調整、レポート生成が必要 Amazon ECSからAWS Fargateをデータプレーンとして利用する方式を採用 (2020年)

Slide 8

Slide 8 text

© ZOZO, Inc. 8 開発背景 Amazon ECSからAWS Fargateをデータプレーンとして利用する方式を採用 大量のGatling実行用ノードを並べて分散負荷試験の実行やレポート生成などを自動化した しかし、AWS Fargateの制約から発生した課題に直面 ● AWS Fargate スロットリングの制限 ○ 各AWS アカウントの Amazon ECS RunTask API リクエストをスロットリングするため、制限 緩和申請などが必要になる ● サービスあたりのタスクの最大数の制限 ○ タスク用に予約可能なvCPUとメモリの選択の幅が狭く、目標スループットを実現するには実 行可能なタスク数が多くなり、結果として最大数以上のタスクが必要になる ● 起動時間の遅さ

Slide 9

Slide 9 text

© ZOZO, Inc. 9 開発背景 これらの課題を解決するために開発されたのが、Gatling Operator ● AWS Fargate スロットリングの制限 ○ Fargateを使用しないため制限なし ● サービスあたりのタスクの最大数の制限 ○ EKSではNodegroupあたりの最大Node数などがあるが、十分に大きいため影響がない ● 起動時間の遅さ ○ 事前にNodegroupを準備できるため、AWS Fargateのインスタンスの起動に比べて高速 また、負荷試験がマニフェストで宣言的に管理できることも大きなメリット

Slide 10

Slide 10 text

© ZOZO, Inc. 10 Gatling Operatorについて Gatlingとは ● オープンソースの負荷試験ツール ● 独自のDSLを使用して、Java・Scala・Kotlinのいずれかでテストシナリオを記述する ● 試験終了後にHTMLレポートを自動生成

Slide 11

Slide 11 text

© ZOZO, Inc. 11 Gatling Operatorについて Gatlingとは ● gatling.shを使って複数のsimulation.logからHTMLレポートを生成可能

Slide 12

Slide 12 text

© ZOZO, Inc. 12 Gatling Operatorについて Gatling Operatorとは ● Kubernetesクラスタ上でGatlingを実行するKubernetes Operator ● HTMLレポートをクラウドプロバイダー(S3やGCS)にアップロード ● HTMLレポートへのリンクをWebhook URL(Slackなど)を用いて送信 https://github.com/st-tech/gatling-operator

Slide 13

Slide 13 text

© ZOZO, Inc. 13 Gatling Operatorとは Gatling Operatorについて ● Kubebuilderを使用 ● 3つのReconcileロジックを持つ ● Kubernetesクラスタ上でGatlingを実行する ○ gatlingRunnerReconcile ● HTMLレポートをクラウドプロバイダー(S3やGCS)に送信 ○ gatlingReporterReconcile ● HTMLレポートへのリンクをWebhook URL(Slackなど)を用いて送信 ○ gatlingNotificationReconcile

Slide 14

Slide 14 text

© ZOZO, Inc. 14 Gatling Operatorとは Kubebuilder カスタムリソース定義(CRD)を用いてKubernetesのAPIを構築するためのフレームワーク Kubebuilderを使うことで開発者はReconcileのロジックの開発に専念できる 弊社では、gatling-operatorの他にfluent-pvc-operatorと呼ばれるKubebuilderを用いて開発され たOperatorが既に存在していたこともあり、Kubebuilderを採用

Slide 15

Slide 15 text

© ZOZO, Inc. 15 Gatling Operatorとは Reconcile Runner、Reporter、NotificationのReconcileロジックを管理する 下記の例では、Runner Jobが完了したかどうかを判断し、必要に応じてRequeueを実行 (Requeueすることで、再度Reconcile処理がキューに詰まれて実行される)

Slide 16

Slide 16 text

© ZOZO, Inc. 16 Gatling Operatorとは gatlingRunnerReconcileについて ● Gatling Runner Job ○ gatlingRunnerReconcileが管理するJob ○ Gatlingを実行 ○ HTMLレポート用ログファイル(simulation.log)をS3にアップロード

Slide 17

Slide 17 text

© ZOZO, Inc. 17 Gatling Operatorとは Gatling Runner Jobについて 1. Gatling Runner Jobの作成 2. JobのParallelism分のGatling Runner Podを作成 3. (オプション)HTMLレポート用ログファイルをS3やGCSなどにアップロード

Slide 18

Slide 18 text

© ZOZO, Inc. 18 Gatling Operatorとは Gatling Runner Podについて ● gatling-waiter ○ 全てのPodが開始されるまで待機し、全てのPodでGatlingが実行されるタイミングを同期 ● gatling-runner ○ Gatlingの実行とHTMLレポート用ログファイルをemptyDirボリュームへ格納 ● gatling-result-transfer ○ emptyDirボリュームに格納されたHTMLレポート用ログファイルをrcloneを用いてS3などに アップロード

Slide 19

Slide 19 text

© ZOZO, Inc. 19 Gatling Operatorとは Gatling Runner Podについて Initコンテナでは、1つ以上のコンテナを定義することが可能になっており、Kubeletはそれらの Initコンテナを1つずつ順番に実行する gatling-waiter、gatling-runner、gatling-result-transferはそれぞれ順番に実行される必要があ るため、Initコンテナを使用した構成になっている そのためHTMLレポート用ログファイルのアップロードをしない場合は、gatling-runnerはメイン コンテナで実行される

Slide 20

Slide 20 text

© ZOZO, Inc. 20 Gatling Operatorとは gatlingReporterReconcileについて Gatling Reporter Job ● gatlingReporterReconcileが管理するJob ● HTMLレポート用ログファイルをS3やGCSから取得 ● HTMLレポート(index.html)をS3やGCSにアップロード

Slide 21

Slide 21 text

© ZOZO, Inc. 21 Gatling Operatorとは Gatling Reporter Jobについて 1. Gatling Reporter Jobの作成 2. Gatling Reporter Podの作成 3. HTMLレポート生成 a. S3からHTMLレポート用ログファイルをダウンロード b. HTMLレポート用ログファイルからHTMLレポートを(gatling.shより)生成し、S3にアップ ロード

Slide 22

Slide 22 text

© ZOZO, Inc. 22 Gatling Operatorとは クラウドストレージ上のファイルのアップロード・ダウンロードはRcloneを使用 クラウドストレージ上のファイルを管理するためのコマンド Amazon S3やGoogle Cloud Storageなど40を超えるクラウドストレージサービスに対応 RcloneのインターフェイスでS3にもGCSにもファイル転送可能 Gatling Operatorでは、Rcloneを用いてクラウドストレージ上からファイルのアップロード・ ダウンロードを行っている https://rclone.org

Slide 23

Slide 23 text

© ZOZO, Inc. 23 Gatling Operatorとは クラウドストレージ上のファイルのアップロード・ダウンロードはRcloneを使用 以下は、rclone copyto関数を使用して、HTMLレポート用ログファイルをAmazon S3へアップ ロードするコマンドを生成する関数 現在は、Amazon S3以外にGoogle Cloud Storageに対応

Slide 24

Slide 24 text

© ZOZO, Inc. 24 Gatling Operatorとは gatlingNotificationReconcileについて Gatling Reporter Jobが完了すると、HTMLレポートのURLを取得し、SlackなどへWebhook URL を通じて送信

Slide 25

Slide 25 text

© ZOZO, Inc. 25 使い方 Gatling カスタムリソース(以下、CR)について Gatlingをクラスタ上で実行するにはCRのGatlingをデプロ イする必要がある 3つのフラグとGatlingを実行するRunner PodのpodSpec や、クラウドストレージの設定情報を定義する cloudstorageSpec、通知先のwebhook urlを定義する notificationSpec、Gatlingのテストシナリオ・データや Gatlingを並列実行するための設定情報などを定義する testScenarioSpecなどの設定が可能 詳しくは、API Reference or テックブログを参照

Slide 26

Slide 26 text

© ZOZO, Inc. 26 使い方 - 事前準備 gatling-operatorリポジトリのClone 設定例として用意されているgatling-operatorリポジトリのconfig/samples配下のマニフェストを 使用

Slide 27

Slide 27 text

© ZOZO, Inc. 27 使い方 - 事前準備 gatling-notification-slack-secrets.yaml 今回は、Slackへ通知を行う そのために必要なWebhook URLの情報などを定義

Slide 28

Slide 28 text

© ZOZO, Inc. 28 使い方 - 事前準備 gatling-operator-v1alpha1_gatling01.yaml Gatling CR用のマニフェスト

Slide 29

Slide 29 text

© ZOZO, Inc. 29 使い方 - 事前準備 gatling-worker-service-account.yaml Gatling Runner Podで使用するサービスアカウントやRole、RoleBindingを定義

Slide 30

Slide 30 text

© ZOZO, Inc. 30 使い方 - 事前準備 SlackのWebhook URLをbase64 エンコードした値をSecretに保存 gatling-waiterコンテナがPodの 状態を取得するために必要なRole など

Slide 31

Slide 31 text

© ZOZO, Inc. 31 使い方 - 事前準備 先程のサービスアカウントを指定 generateReport: trueにより、 HTMLレポートの生成を行う notifyReport: trueにより、 S3へのリンクの通知を行う AmazonS3FullAccessを付与した IAMユーザのIDとKEYを指定 先程作成したSecretを指定 parallelismにより、Runner Pod の数を指定 ログ送信先のバケット名を指定 今回はAmazon S3のgatling-log バケットにアップロード

Slide 32

Slide 32 text

© ZOZO, Inc. 32 使い方 - gatling-operatorのデプロイ kindを使ってクラスタを作成 gatling-operatorをクラスタへ デプロイ CRD、Managerの確認

Slide 33

Slide 33 text

© ZOZO, Inc. 33 使い方 - Gatlingの実行 Gatling CRなどのデプロイ Parallelism分のPodが起動

Slide 34

Slide 34 text

© ZOZO, Inc. 34 使い方 - Gatlingの実行 gatling-runnerコンテナのログを 確認

Slide 35

Slide 35 text

© ZOZO, Inc. 35 使い方 - Gatlingの実行 Gatling Runner Podのコンテナ Initコンテナにgatling-waiterとgatling-runner、メインコンテナにgatling-result-transferがそ れぞれ設定されていることが確認できる

Slide 36

Slide 36 text

© ZOZO, Inc. 36 使い方 - Gatlingの実行 Gatling Runner Pod gatling-result-transferコンテナ実行完了後に、HTMLレポート用ログファイルがgatling-demo バケットにアップロードされていることを確認

Slide 37

Slide 37 text

© ZOZO, Inc. 37 使い方 - HTMLレポートの生成・アップロード Gatling Reporter Pod Gatling Runner Podの完了後に、Gatling Reporter Podが作成される

Slide 38

Slide 38 text

© ZOZO, Inc. 38 使い方 - HTMLレポートの生成・アップロード Gatling Reporter Podのコンテナ Initコンテナにgatling-result-aggregatorとgatling-report-generator、メインコンテナに gatling-report-transfererがそれぞれ設定されていることが確認できる

Slide 39

Slide 39 text

© ZOZO, Inc. 39 使い方 - HTMLレポートの生成・アップロード バケットの確認 Gatling Reporter Podの完了後にgatling-logバケットを確認し、HTMLレポートがアップロードさ れていることを確認

Slide 40

Slide 40 text

© ZOZO, Inc. 40 使い方 - HTMLレポートのS3 URIをSlackへ送信 Slackの確認 Webhook URLを設定したチャンネルへ、Gatling Reporter Podが生成したHTMLレポートまでの S3 URIが送信される

Slide 41

Slide 41 text

© ZOZO, Inc. 41 まとめ Gatling Operatorを使った負荷試験の実施が可能になり、これまで抱えていた様々な課題を解決で きました。 また、マニフェストを宣言的に管理できるようになったことも大きなメリットとなりました。 興味を持った方は、ぜひ使ってみてください! もちろん、Contributeも大歓迎です!Pull Request・Issueお待ちしております!

Slide 42

Slide 42 text

No content