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.4k
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
490
PodのAZ分散を実現する Pod Topology Spread ConstraintsとDescheduler
ksudate
1
690
Other Decks in Programming
See All in Programming
3rd party scriptでもReactを使いたい! Preact + Reactのハイブリッド開発
righttouch
PRO
1
610
Outline View in SwiftUI
1024jp
1
340
Tauriでネイティブアプリを作りたい
tsucchinoko
0
380
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
0
130
C++でシェーダを書く
fadis
6
4.1k
Arm移行タイムアタック
qnighy
0
350
イマのCSSでできる インタラクション最前線 + CSS最新情報
clockmaker
5
2.7k
Jakarta EE meets AI
ivargrimstad
0
720
リアーキテクチャxDDD 1年間の取り組みと進化
hsawaji
1
220
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
9
3.3k
EMになってからチームの成果を最大化するために取り組んだこと/ Maximize team performance as EM
nashiusagi
0
100
Nurturing OpenJDK distribution: Eclipse Temurin Success History and plan
ivargrimstad
0
1.1k
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
31
6.3k
A Philosophy of Restraint
colly
203
16k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
BBQ
matthewcrist
85
9.3k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
YesSQL, Process and Tooling at Scale
rocio
169
14k
10 Git Anti Patterns You Should be Aware of
lemiorhan
655
59k
Fireside Chat
paigeccino
34
3k
Teambox: Starting and Learning
jrom
133
8.8k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
120
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