Upgrade to Pro — share decks privately, control downloads, hide ads and more …

結合さん作ってみた (Vegeta × Kubernetes Event Exporter)

結合さん作ってみた (Vegeta × Kubernetes Event Exporter)

RyoTozawa

April 28, 2021
Tweet

More Decks by RyoTozawa

Other Decks in Programming

Transcript

  1. 負荷試験ツール Vegeta をラップして
    結合試験ツール 「結合さん」を作ってみた

    View full-size slide

  2. Copyrights©3-shake Inc. All Rights Reserved. 2
    自己紹介
    - 所属
    - Sreake 事業部 チームリーダー (雑用) に就任しました
    - Terraform 書いたり
    - GCP / AWS
    - Yaml 書いたり
    - Kubernetes / CI・CD
    - アプリやツール 書いたり
    - Go / Python / JavaScript
    - あだ名
    - 社内ではたらこちゃんと呼ばれています
    Tozawa Ryo (@tozastation)

    View full-size slide

  3. Copyrights©3-shake Inc. All Rights Reserved. 3
    目次
    結合さんが生まれた日
    1
    結合さんについて
    2
    システムの活躍具合はいかほど
    3

    View full-size slide

  4. Copyrights©3-shake Inc. All Rights Reserved. 4
    背景 ~ 結合さんが生まれた日 ~
    ● 目的: ビジネスのスケールに耐えられるようシステム構成を一新
    ○ パブリッククラウド移行(AWS)
    ○ Kubernetes 導入 (Elastic Kubernetes Service)
    ○ モノリス から マイクロサービスへの移行
    ○ 監視基盤導入 (kube-prometheus-stack × PagerDuty)
    あるお客様とのプロジェクト

    View full-size slide

  5. Copyrights©3-shake Inc. All Rights Reserved. 5
    背景 ~ 結合さんが生まれた日 ~
    プロジェクトで チーム組成したばかりのある日・・・
    ▎ 頻繁なアプリの仕様変更
    ▎ 対応していないバージョンが DEV環境に!
    ▎ 手作業でのプロダクトレビュー
    API が動作しなくなった!
    (デグレーションが目立ち始めた)
    確認項目が多く
    工数がかかる

    View full-size slide

  6. Copyrights©3-shake Inc. All Rights Reserved. 6
    背景 ~ 結合さんが生まれた日 ~
    チームの振り返りのタイミングで Try が幾つかあがった
    課題: APIが動作しなくなった
    ▎ ① API のバージョン更新ルール整備
    ▎ ② チーム間の仕様の共有を積極化
    ▎ ③ デグレーションが起きたらすぐ検知したい
    API が動作しなくなった!
    (デグレーションが目立ち始めた)
    補足: バージョニング規約 / Protocol Buffer (API) 更新規約 / etc ...

    View full-size slide

  7. Copyrights©3-shake Inc. All Rights Reserved. 7
    背景
    チームの振り返りのタイミングで Try が幾つかあがった
    課題: 確認項目が多く工数がかかる
    ▎ 自動化できるものはツール化していこう
    確認項目が多く
    工数がかかる

    View full-size slide

  8. Copyrights©3-shake Inc. All Rights Reserved. 8
    背景
    結合さんを作ろう
    refer: Rashni Parichha

    View full-size slide

  9. Copyrights©3-shake Inc. All Rights Reserved. 9
    結合さんとは
    API の 正常系・異常系を試験するアプリケーション
    ● 3段階に分けて開発
    a. OSS 負荷試験ツール Vegeta を使って,正常系試験 CLI 実装
    ■ なぜ Vegeta ?
    ● Vegeta (Go製) -> チームで Go の開発者が多い
    ● SRE チームで,負荷試験に流用したい
    b. kubernetes-event-exporter を使って試験自動化
    ■ Vegeta 改造 CLI を Pod (Pod: Kubernetes) 化
    ■ Webhook 連携の実装
    c. DEV チームにデモ
    ■ チーム全員で使いたくなるものを作っていきたい
    ■ 機能改善や新機能など以降の開発は,DEVチームと共に

    View full-size slide

  10. Copyrights©3-shake Inc. All Rights Reserved. 10
    負荷試験ツール Vegeta とは
    Go言語製のHTTP負荷試験ツール
    ● Vegeta は まさに破壊王子
    ○ 軽量な平行処理を生かした(Groutine)パワフルさ
    ○ 対象のサービス(Webサイト)を破壊
    ● ここが嬉しい 
    ○ インストールが簡単 -> すぐ利用できる
    ■ Go製なのでツールがシングルバイナリ
    ○ Package Import でカスタムできる
    ■ go get -u github.com/tsenart/vegeta
    refer: フリー素材

    View full-size slide

  11. Copyrights©3-shake Inc. All Rights Reserved. 11
    Vegeta をカスタムしたツールの名前は...
    ファイナルフラッシュ(final-flash)
    アニメの名シーンを
    貼る予定でしたが
    社内の圧力により公開を断念..
    「くそったれええええ」
    refer: フリー素材

    View full-size slide

  12. Copyrights©3-shake Inc. All Rights Reserved. 12
    ファイナルフラッシュ(final-flash)
    Vegeta ライブラリをインポート しカスタム
    -> CLI で指定するフラッグ・コマンドは,コードでは構造体・関数で扱う
    vegeta.Rate{} と duration
    -> HTTP リクエストを送信する 割合と期間の設定
    Freq: 頻度
    Per : 単位時間あたり (秒・分・時)

    View full-size slide

  13. Copyrights©3-shake Inc. All Rights Reserved. 13
    ファイナルフラッシュ(final-flash)
    vegeta.Targeter (func)
    -> Request の定義 (HTTP Method / URL / Body)
    -> Request Body を可変にしたい等の複雑なリクエストは,クロージャーを作成

    View full-size slide

  14. Copyrights©3-shake Inc. All Rights Reserved. 14
    ファイナルフラッシュ(final-flash)
    vegeta.Metrics
    -> 実行結果 (res) を貯めレポートを作成する
    attacker.Attack(targetter , rate, duration)
    -> 負荷試験の実行
    attacker.Attack() で負荷開始

    metrics に結果が溜まっていく

    レポート作成 (説明は割愛󰢛)

    View full-size slide

  15. Copyrights©3-shake Inc. All Rights Reserved. 15
    試験自動化を支える kubernetes-event-exporter
    Kubernetes の Event を検知 (watch kubectl get event --all-namespaces)
    独自のフィルタを通し,マッチしたイベントを外部に連携してくれるツール
    ↓ コンフィグはこんな感じ ↓
    route:
    - どのイベントを除外するか
    - どのイベントを受け付けるか
    receivers:
    - 外部連携先の指定
    - Layout に ペイロード指定
    - 今回は
    - チャットアプリ
    - final-flash

    View full-size slide

  16. Copyrights©3-shake Inc. All Rights Reserved. 16
    そんなこんなで結合さんができました
    結合さん
    =
    ファイナルフラッシュ
    ×
    kubernetes-event-exporter
    refer: Rashni Parichha

    View full-size slide

  17. Copyrights©3-shake Inc. All Rights Reserved. 17
    システムの活躍具合はいかほど ~実際の動作~
    各エンドポイントの正常系の試験結果をチャットアプリに通知
    -> 正常系の時は,OK アイコンで教えてくれる
    -> おっ!とそれっぽく見せるため Summary も用意
    deep stream

    View full-size slide

  18. Copyrights©3-shake Inc. All Rights Reserved. 18
    deep stream
    システムの活躍具合はいかほど ~実際の動作~
    各エンドポイントの正常系の試験結果をチャットアプリに通知
    -> 異常系の時は,エラーを添えて炎上アイコンで通知
    -> エラーを見る限り,自分が犯人な気もしなくも...

    View full-size slide

  19. Copyrights©3-shake Inc. All Rights Reserved. 19
    システムの活躍具合はいかほど
    結合さんを導入してみて良かった点
    早期発見して,原因究明 + 対応する文化が出来上がってきた 👍
    deep stream

    View full-size slide

  20. Copyrights©3-shake Inc. All Rights Reserved. 20
    チームのみんなからのフィードバック
    導入から4ヶ月ほど経ち DEVチームに聞いてみた
    重傷なデグレに
    気付けるように!
    by 開発T
    リリース判断がしやすくなった
    安心して機能改修やリファクタに望
    める
    by PO
    毎回パターンを確認しなくて
    済むように!
    by 開発T
    deep stream deep stream (父)

    View full-size slide

  21. Copyrights©3-shake Inc. All Rights Reserved. 21
    まとめ
    ● チーム内で課題が...!
    ○ 方針が定まっていない API バージョン更新
    ○ 開発環境での API における デグレーション
    ● 取り組んだこと
    ○ バージョン更新ルール整備
    ○ 定期的な正常系試験自動化
    ● フィードバック
    ○ 神
    ● 今後の課題
    ○ Pod が起動してから試験開始まで待機時間を固定
    している
    ■ Probe 等のチェックを導入し効率化していきたい
    ○ 他のチームにも積極的に使ってもらいたいので推していく
    本を読む鯨

    View full-size slide

  22. Copyrights©3-shake Inc. All Rights Reserved. 22
    チーム全員が動きやすい環境を提供し
    喜んでもらえるタイミングが一番やりがいある!!

    View full-size slide