Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
分散負荷試験の自動化を実現するGatling Operatorの紹介
Search
ksudate
March 29, 2022
Programming
1
4.2k
分散負荷試験の自動化を実現するGatling Operatorの紹介
Kubernetes Meetup Tokyo #49 (
https://k8sjp.connpass.com/event/240993/)の登壇資料になります
。
ksudate
March 29, 2022
Tweet
Share
More Decks by ksudate
See All by ksudate
ZOZOTOWNにおけるKubernetes Cluster Upgradeの これまでとこれから
ksudate
1
1.3k
KubeCon + CNCon Europe 2023 Recap Flux Beyond Git: Harnessing the Power of OCI
ksudate
1
16k
KubeCon + CNCon Europe 2022 Recap ~ Istio Today and Tomorrow: Sidecars and Beyond
ksudate
1
480
PodのAZ分散を実現する Pod Topology Spread ConstraintsとDescheduler
ksudate
1
670
Other Decks in Programming
See All in Programming
Kotlin2でdataクラスの copyメソッドを禁止する/Data class copy function to have the same visibility as constructor
eichisanden
1
140
約9000個の自動テストの 時間を50分->10分に短縮 Flakyテストを1%以下に抑えた話
hatsu38
23
11k
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
1
290
macOS でできる リアルタイム動画像処理
biacco42
7
1.9k
[PyCon Korea 2024 Keynote] 커뮤니티와 파이썬, 그리고 우리
beomi
0
110
Sidekiqで実現する 長時間非同期処理の中断と再開 / Pausing and Resuming Long-Running Asynchronous Jobs with Sidekiq
hypermkt
6
2.7k
シールドクラスをはじめよう / Getting Started with Sealed Classes
mackey0225
3
400
『ドメイン駆動設計をはじめよう』のモデリングアプローチ
masuda220
PRO
8
440
go.mod、DockerfileやCI設定に分散しがちなGoのバージョンをまとめて管理する / Go Connect #3
arthur1
10
2.4k
cXML という電子商取引の トランザクションを支える プロトコルと向きあっている話
phigasui
3
2.3k
offers_20241022_imakiire.pdf
imakurusu
2
360
OpenTelemetryでRailsのパフォーマンス分析を始めてみよう(KoR2024)
ymtdzzz
4
1.6k
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Build your cross-platform service in a week with App Engine
jlugia
229
18k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
How STYLIGHT went responsive
nonsquared
95
5.2k
Docker and Python
trallard
40
3.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
32
1.8k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
228
52k
A Modern Web Designer's Workflow
chriscoyier
692
190k
Why Our Code Smells
bkeepers
PRO
334
57k
RailsConf 2023
tenderlove
29
880
Transcript
分散負荷試験の自動化を実現する Gatling Operatorの紹介 Kubernetes Meetup Tokyo #49 2022/03/29 株式会社ZOZO 技術本部
SRE部 ECプラットフォーム基盤SREブロック 巣立健太郎 Copyright © ZOZO, Inc.
© ZOZO, Inc. 株式会社ZOZO 技術本部 SRE部 ECプラットフォーム基盤SREブロック 巣立 健太郎 新卒SREとして、
ZOZOTOWNリプレイスプロジェクトに参画 Kubernetes歴はもうすぐ1年 Twitter: @tmrekk_ 2
© ZOZO, Inc. https://zozo.jp/ 3 • ファッション通販サイト • 1,500以上のショップ、8,400以上のブランドの取り扱い •
常時83万点以上の商品アイテム数と毎日平均2,900点以上の新着 商品を掲載(2021年12月末時点) • ブランド古着のファッションゾーン「ZOZOUSED」や コスメ専門モール「ZOZOCOSME」、靴の専門モール 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン 「ZOZOVILLA」を展開 • 即日配送サービス • ギフトラッピングサービス • ツケ払い など
© ZOZO, Inc. https://wear.jp/ 4 • ファッションコーディネートアプリ • 1,500万ダウンロード突破、コーディネート投稿総数は1,200万 件以上(2021年12月末時点)
• ピックアップタグから最新のトレンドをチェック • コーディネート着用アイテムを公式サイトで購入可能 • WEAR公認の人気ユーザーをWEARISTAと認定。モデル・タレン ト・デザイナー・インフルエンサーといった各界著名人も参加
© ZOZO, Inc. はじめに 5 ZOZOTOWNでは様々な負荷試験が日々行われています。 その中で直面する課題解決の手段の1つとしてGatling Operatorは開発されました。 今回の発表では、Gatling Operatorの開発背景から仕組み、使い方について紹介します。
© ZOZO, Inc. 6 目次 • 開発背景 • Gatling Operatorについて
◦ Gatlingとは ◦ Gatling Operatorとは • 使い方 • まとめ
© ZOZO, Inc. 7 開発背景 ZOZOTOWN冬セール対策の負荷試験における課題 • 冬セールは1年で最もユーザアクセスの多いイベント • 大規模な負荷試験を本番相当の環境を使って実施
• 大量のGatling実行用ノードの準備、実行タイミング調整、レポート生成が必要 Amazon ECSからAWS Fargateをデータプレーンとして利用する方式を採用 (2020年)
© ZOZO, Inc. 8 開発背景 Amazon ECSからAWS Fargateをデータプレーンとして利用する方式を採用 大量のGatling実行用ノードを並べて分散負荷試験の実行やレポート生成などを自動化した しかし、AWS
Fargateの制約から発生した課題に直面 • AWS Fargate スロットリングの制限 ◦ 各AWS アカウントの Amazon ECS RunTask API リクエストをスロットリングするため、制限 緩和申請などが必要になる • サービスあたりのタスクの最大数の制限 ◦ タスク用に予約可能なvCPUとメモリの選択の幅が狭く、目標スループットを実現するには実 行可能なタスク数が多くなり、結果として最大数以上のタスクが必要になる • 起動時間の遅さ
© ZOZO, Inc. 9 開発背景 これらの課題を解決するために開発されたのが、Gatling Operator • AWS Fargate
スロットリングの制限 ◦ Fargateを使用しないため制限なし • サービスあたりのタスクの最大数の制限 ◦ EKSではNodegroupあたりの最大Node数などがあるが、十分に大きいため影響がない • 起動時間の遅さ ◦ 事前にNodegroupを準備できるため、AWS Fargateのインスタンスの起動に比べて高速 また、負荷試験がマニフェストで宣言的に管理できることも大きなメリット
© ZOZO, Inc. 10 Gatling Operatorについて Gatlingとは • オープンソースの負荷試験ツール •
独自のDSLを使用して、Java・Scala・Kotlinのいずれかでテストシナリオを記述する • 試験終了後にHTMLレポートを自動生成
© ZOZO, Inc. 11 Gatling Operatorについて Gatlingとは • gatling.shを使って複数のsimulation.logからHTMLレポートを生成可能
© 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
© ZOZO, Inc. 13 Gatling Operatorとは Gatling Operatorについて • Kubebuilderを使用
• 3つのReconcileロジックを持つ • Kubernetesクラスタ上でGatlingを実行する ◦ gatlingRunnerReconcile • HTMLレポートをクラウドプロバイダー(S3やGCS)に送信 ◦ gatlingReporterReconcile • HTMLレポートへのリンクをWebhook URL(Slackなど)を用いて送信 ◦ gatlingNotificationReconcile
© ZOZO, Inc. 14 Gatling Operatorとは Kubebuilder カスタムリソース定義(CRD)を用いてKubernetesのAPIを構築するためのフレームワーク Kubebuilderを使うことで開発者はReconcileのロジックの開発に専念できる 弊社では、gatling-operatorの他にfluent-pvc-operatorと呼ばれるKubebuilderを用いて開発され
たOperatorが既に存在していたこともあり、Kubebuilderを採用
© ZOZO, Inc. 15 Gatling Operatorとは Reconcile Runner、Reporter、NotificationのReconcileロジックを管理する 下記の例では、Runner Jobが完了したかどうかを判断し、必要に応じてRequeueを実行
(Requeueすることで、再度Reconcile処理がキューに詰まれて実行される)
© ZOZO, Inc. 16 Gatling Operatorとは gatlingRunnerReconcileについて • Gatling Runner
Job ◦ gatlingRunnerReconcileが管理するJob ◦ Gatlingを実行 ◦ HTMLレポート用ログファイル(simulation.log)をS3にアップロード
© ZOZO, Inc. 17 Gatling Operatorとは Gatling Runner Jobについて 1.
Gatling Runner Jobの作成 2. JobのParallelism分のGatling Runner Podを作成 3. (オプション)HTMLレポート用ログファイルをS3やGCSなどにアップロード
© 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などに アップロード
© ZOZO, Inc. 19 Gatling Operatorとは Gatling Runner Podについて Initコンテナでは、1つ以上のコンテナを定義することが可能になっており、Kubeletはそれらの
Initコンテナを1つずつ順番に実行する gatling-waiter、gatling-runner、gatling-result-transferはそれぞれ順番に実行される必要があ るため、Initコンテナを使用した構成になっている そのためHTMLレポート用ログファイルのアップロードをしない場合は、gatling-runnerはメイン コンテナで実行される
© ZOZO, Inc. 20 Gatling Operatorとは gatlingReporterReconcileについて Gatling Reporter Job
• gatlingReporterReconcileが管理するJob • HTMLレポート用ログファイルをS3やGCSから取得 • HTMLレポート(index.html)をS3やGCSにアップロード
© 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にアップ ロード
© ZOZO, Inc. 22 Gatling Operatorとは クラウドストレージ上のファイルのアップロード・ダウンロードはRcloneを使用 クラウドストレージ上のファイルを管理するためのコマンド Amazon S3やGoogle
Cloud Storageなど40を超えるクラウドストレージサービスに対応 RcloneのインターフェイスでS3にもGCSにもファイル転送可能 Gatling Operatorでは、Rcloneを用いてクラウドストレージ上からファイルのアップロード・ ダウンロードを行っている https://rclone.org
© ZOZO, Inc. 23 Gatling Operatorとは クラウドストレージ上のファイルのアップロード・ダウンロードはRcloneを使用 以下は、rclone copyto関数を使用して、HTMLレポート用ログファイルをAmazon S3へアップ
ロードするコマンドを生成する関数 現在は、Amazon S3以外にGoogle Cloud Storageに対応
© ZOZO, Inc. 24 Gatling Operatorとは gatlingNotificationReconcileについて Gatling Reporter Jobが完了すると、HTMLレポートのURLを取得し、SlackなどへWebhook
URL を通じて送信
© ZOZO, Inc. 25 使い方 Gatling カスタムリソース(以下、CR)について Gatlingをクラスタ上で実行するにはCRのGatlingをデプロ イする必要がある 3つのフラグとGatlingを実行するRunner
PodのpodSpec や、クラウドストレージの設定情報を定義する cloudstorageSpec、通知先のwebhook urlを定義する notificationSpec、Gatlingのテストシナリオ・データや Gatlingを並列実行するための設定情報などを定義する testScenarioSpecなどの設定が可能 詳しくは、API Reference or テックブログを参照
© ZOZO, Inc. 26 使い方 - 事前準備 gatling-operatorリポジトリのClone 設定例として用意されているgatling-operatorリポジトリのconfig/samples配下のマニフェストを 使用
© ZOZO, Inc. 27 使い方 - 事前準備 gatling-notification-slack-secrets.yaml 今回は、Slackへ通知を行う そのために必要なWebhook
URLの情報などを定義
© ZOZO, Inc. 28 使い方 - 事前準備 gatling-operator-v1alpha1_gatling01.yaml Gatling CR用のマニフェスト
© ZOZO, Inc. 29 使い方 - 事前準備 gatling-worker-service-account.yaml Gatling Runner
Podで使用するサービスアカウントやRole、RoleBindingを定義
© ZOZO, Inc. 30 使い方 - 事前準備 SlackのWebhook URLをbase64 エンコードした値をSecretに保存
gatling-waiterコンテナがPodの 状態を取得するために必要なRole など
© ZOZO, Inc. 31 使い方 - 事前準備 先程のサービスアカウントを指定 generateReport: trueにより、
HTMLレポートの生成を行う notifyReport: trueにより、 S3へのリンクの通知を行う AmazonS3FullAccessを付与した IAMユーザのIDとKEYを指定 先程作成したSecretを指定 parallelismにより、Runner Pod の数を指定 ログ送信先のバケット名を指定 今回はAmazon S3のgatling-log バケットにアップロード
© ZOZO, Inc. 32 使い方 - gatling-operatorのデプロイ kindを使ってクラスタを作成 gatling-operatorをクラスタへ デプロイ
CRD、Managerの確認
© ZOZO, Inc. 33 使い方 - Gatlingの実行 Gatling CRなどのデプロイ Parallelism分のPodが起動
© ZOZO, Inc. 34 使い方 - Gatlingの実行 gatling-runnerコンテナのログを 確認
© ZOZO, Inc. 35 使い方 - Gatlingの実行 Gatling Runner Podのコンテナ
Initコンテナにgatling-waiterとgatling-runner、メインコンテナにgatling-result-transferがそ れぞれ設定されていることが確認できる
© ZOZO, Inc. 36 使い方 - Gatlingの実行 Gatling Runner Pod
gatling-result-transferコンテナ実行完了後に、HTMLレポート用ログファイルがgatling-demo バケットにアップロードされていることを確認
© ZOZO, Inc. 37 使い方 - HTMLレポートの生成・アップロード Gatling Reporter Pod
Gatling Runner Podの完了後に、Gatling Reporter Podが作成される
© ZOZO, Inc. 38 使い方 - HTMLレポートの生成・アップロード Gatling Reporter Podのコンテナ
Initコンテナにgatling-result-aggregatorとgatling-report-generator、メインコンテナに gatling-report-transfererがそれぞれ設定されていることが確認できる
© ZOZO, Inc. 39 使い方 - HTMLレポートの生成・アップロード バケットの確認 Gatling Reporter
Podの完了後にgatling-logバケットを確認し、HTMLレポートがアップロードさ れていることを確認
© ZOZO, Inc. 40 使い方 - HTMLレポートのS3 URIをSlackへ送信 Slackの確認 Webhook
URLを設定したチャンネルへ、Gatling Reporter Podが生成したHTMLレポートまでの S3 URIが送信される
© ZOZO, Inc. 41 まとめ Gatling Operatorを使った負荷試験の実施が可能になり、これまで抱えていた様々な課題を解決で きました。 また、マニフェストを宣言的に管理できるようになったことも大きなメリットとなりました。 興味を持った方は、ぜひ使ってみてください!
もちろん、Contributeも大歓迎です!Pull Request・Issueお待ちしております!
None