$30 off During Our Annual Pro Sale. View Details »

性能試験はCI/CDにお任せ

 性能試験はCI/CDにお任せ

Kubernetes基盤における性能試験を、CI/CD に組み込み自動化した話です。

逆井(さかさい)

March 24, 2022
Tweet

More Decks by 逆井(さかさい)

Other Decks in Technology

Transcript

  1. 2022/03/23 Kubernetes Novice Tokyo #17
    Kubernetes 基盤における非機能試験の deepdive
    〜 性能試験は CI/CD にお任せ! 〜
    氏名:逆井 啓佑(さかさい けいすけ)

    View Slide

  2. 自己紹介
    - 2022/03/23 Kubernetes Novice Tokyo #17 -
    逆井 啓佑
    さかさい
    belongs:日系 Sier
    carrier:
      一年目:”決済サービスの企画・営業 ”
      二年目:”Kubernetes 基盤の非機能試験チーム ”
    # 参画直後、k8s や IaC (terra/helm) …??
    # 試験環境に太古の tf ファイルを apply し環境破壊を経験
    kind: destroyer
    description:
        最低限の技術力を身につけなければ...ということで、
        会社の研修制度で CN・Kubernetes 塾 に参加し、半年間の研鑽
    ついこの前
    修了発表なるものが
    終わりました!

    View Slide

  3. ついこの前
    修了発表なるものが
    終わりました!
    belongs:
    carrier:
      一年目:”決済サービスの企画・営業 ”
      二年目:”Kubernetes 基盤の非機能試験チーム ”
    # 参画直後、k8s や IaC (terra/helm) …??
    # 試験環境に太古の tf ファイルを apply し環境破壊を経験
    kind: destroyer
    description:
        最低限の技術力を身につけなければ...ということで、
        会社の研修制度で CN・Kubernetes 塾 に参加し、半年間の研鑽
    自己紹介
    - 2022/03/23 Kubernetes Novice Tokyo #17 -
    逆井 啓佑
    さかさい
    本日は、研修活動での 半年間の 成果を
    短く LT させてください!
    研修のモノもあるので、少ーしだけカタイ見栄えとなるかもです...
    ・・・

    View Slide

  4. イントロダクション
    半年間の活動では、なんちゃって非機能試験担当として、
    「k8s 基盤での 非機能試験 deepdive」というテーマで活動をしておりました。
    ※ 性能 / 可用性 / セキュリティ とか
    - 2022/03/23 Kubernetes Novice Tokyo #17 -
    ❶ 性能試験自動化
    ● GKE, Gitlab CI, Argo CD を用いた、
    GitOps なインフラストラクチャの構築
    ● 性能試験を CI/CD に組み込み、デプロイ検知で自動実行
    ❷ カオスエンジニアリング
    ● 障害試験ツール「Chaos Mesh」を用いた、
    k8s 基盤における障害試験の検証
    demo付

    View Slide

  5. イントロダクション
    半年間の活動では、なんちゃって非機能試験担当として、
    「k8s 基盤での 非機能試験 deepdive」というテーマで活動をしておりました。
    ※ 性能 / 可用性 / セキュリティ とか
    - 2022/03/23 Kubernetes Novice Tokyo #17 -
    ❶ 性能試験自動化
    ● GKE, Gitlab CI, Argo CD を用いた、
    GitOps なインフラストラクチャの構築
    ● 性能試験を CI/CD に組み込み、デプロイ検知で自動実行
    ❷ カオスエンジニアリング
    ● 障害試験ツール「Chaos Mesh」を用いた、
    k8s 基盤における障害試験の検証
    demo付
    性能試験自動化のところにフォーカスを当てて
    今回はここのみ話します。
    10 min. LTなので...

    View Slide

  6. 性能試験における課題感
    とある、性能試験の一日...(実際の現場を、かなりイメージで示しています)
    開発 Tm
    Me
    (試験 Tm)
    テスト環境
    ① 新しい資材のデプロイ
    ② 「性能試験よろ」
    ③ 負荷試験ツール
    Gatling を手動で実行
    ④ 終わったら結果解析💦
    - 2022/03/23 Kubernetes Novice Tokyo #17 -

    View Slide

  7. 性能試験自動化のモチベーション
    - 2022/03/23 Kubernetes Novice Tokyo #17 -
    とある、性能試験の一日...(実際の現場を、かなりイメージで示しています)
    開発 Tm
    Me
    (試験 Tm)
    テスト環境
    Gatling コンテナの Job 実行
    ③ 負荷試験ツール
    Gatling を手動で実行
    ② 「性能試験よろ」
    ① 新しい資材のデプロイ
    Argo CD を用いたデプロイ検知
    (おまけ)
    ● Slack への解析通知
    ● GCS への Report UPL
    ④ 終わったら結果解析💦
    Argo CD
    GitOps に
    則った CD ツール。
    自動デプロイ・同期
    などの機能を持つ。
    ② 「性能試験よろ」
    ① 新しい資材のデプロイ
    ③ 負荷試験ツール
    Gatling を手動で実行

    View Slide

  8. 性能試験自動化のモチベーション
    とある、性能試験の一日...(実際の現場を、かなりイメージで示しています)
    開発 Tm
    Me
    (試験 Tm)
    テスト環境
    結果
    フィードバック
    デプロイ
    テスト
    GitOps な CI/CD にテストを組み込み、
    高品質 でアジリティーの高いリリース基盤を構築
    - 2022/03/23 Kubernetes Novice Tokyo #17 -

    View Slide

  9. 今回構築したものはこれ
    - 2022/03/23 Kubernetes Novice Tokyo #17 -
    APP の
    リソース
    (manifest)
    を管理
    Gatling
    APP(自作)
    のイメージ
    を管理
    nginx
    app

    View Slide

  10. apiVersion: batch/v1
    kind: Job
    metadata:
    name: gatling-job
    annotations:
    argocd.argoproj.io/hook: PostSync
    spec:
    template:
    spec:
    volumes:
    - name: google-cloud-key
    secret:
    secretName: cn-ksakasai-gcs-accesskey
    containers:
    - name: postsync
    image: registry.gitlab.com/keisuke.sakasai/gatling:main
    command:
    - sh
    - "-c"
    - |
    /bin/bash <<'EOF'
    ###--- Gatling の実行
    /opt/gatling/bin/gatling.sh -s computerdatabase.SampleSimulation
    ###--- GCS への Report UPL
    /root/google-cloud-sdk/bin/gcloud auth activate-service-account
    --key-file=/var/secrets/google/cn-ksakasai-gcsAccess.key
    /root/google-cloud-sdk/bin/gsutil …
    ###--- Gatling Report の解析
    timestamp=${fn:17:4}"/"${fn:21:2}"/"${fn:23:2}" "$((${fn:25:2}+9))":"${fn:27:2}":"${fn:29:2}""

    res=$(cat $fn_js | jq .stats.percentiles4.total)
    #--- Slack への通知
    cp -rf /usr/bin/curl /root/;
    /root/curl -X POST --data-urlencode "payload={…}" https://hooks.slack.com/services/xxx
    EOF
    ちょっとだけ詳細(ジョブのマニフェスト)
    Resource Hookの設定
    - Argo CD のデプロイ終了を検知して実行
    Gatling コンテナイメージの指定
    - Gitlab CI でビルドされたもの
    コンテナ内処理
    ● Gatling 実行
    ● GCS へのレポートアップロード
    ● レポート解析 / Slack 通知
    - 2022/03/23 Kubernetes Novice Tokyo #17 -

    View Slide

  11. デモンストレーション
    - 2022/03/23 Kubernetes Novice Tokyo #17 -

    View Slide

  12. まとめ
    - 2022/03/23 Kubernetes Novice Tokyo #17 -
    自分の手を動かし、構築することで、
    Kubernetes 初学者になることができました

    View Slide

  13. 最後に (恐縮ですが) 宣伝
    - 2022/03/23 Kubernetes Novice Tokyo #17 -
    カオスエンジニアリングについての講演をするかも...
    抽選中...

    View Slide

  14. 記載されている会社名、商品名、
    またはサービス名は、各社の商標登録または商標です。

    View Slide