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

Kubernetesリソースの安定稼働に向けた TerratestによるHelmチャートのテス...

Kokubo
March 20, 2023

Kubernetesリソースの安定稼働に向けた TerratestによるHelmチャートのテスト自動化/Automating Helm Chart Testing with Terratest for Stable Operation of Kubernetes Resources

Kokubo

March 20, 2023
Tweet

Other Decks in Technology

Transcript

  1. ソフトバンクで作っているサービス GIP DNS node External DNS Kubernetes Prod/Staging LB Inter

    net node node Managed Services Cert Manager RDB Secret Manager Prometheus クラウドネイティブアプリケーションプラットフォーム(CNAP) 特徴 • アプリケーション開発基盤 をローコードで作成 • GCP, AWS, Azureに対応 アプリ開発者
  2. Table of Contents Kubernetesリソースの開発課題 アプローチ 単体テスト 結合テスト ソフトバンクでの運用 Kubernetesリソースに対する 単体テストの実践方法

    テストツールとテスト対象 についての整理 Kubernetesリソースに対する 結合テストの実践方法 リソースの増大による 品質・開発効率の問題 ソフトバンクで実践している テストフローの解説 1. 2. 3. 4. 5. まとめ 本発表のまとめと 今後にむけて 6.
  3. Table of Contents Kubernetesリソースの開発課題 アプローチ 単体テスト 結合テスト ソフトバンクでの運用 Kubernetesリソースに対する 単体テストの実践方法

    テストツールとテスト対象 についての整理 Kubernetesリソースに対する 結合テストの実践方法 リソースの増大による 品質・開発効率の問題 ソフトバンクで実践している テストフローの解説 1. 2. 3. 4. 5. まとめ 本発表のまとめと 今後にむけて 6.
  4. アプリケーション E2Eテスト システム全体を対象に ユーザー視点からの動作を検証する アプリケーションにおける各種テストの役割 機能 結合テスト システムがプロセス外依存と 統合した状態で正常に動作するかを検証する メソッド

    コンポーネント 役割の異なるテストをバランスよくつくり動作を保証する 単体テスト システム内の1単位のふるまいについて 正しく動作するかを検証する
  5. アプリケーション開発においてテストを作ることのメリット Vladimir Khorikov. 単体テストの考え方・使い方. マイナビ出版(2022). 費やす時間 プロダクトの成長 テストあり テストなし 中長期的な開発効率の向上

    テストの有無によるプロダクトの成長の違い テストはプロダクトの品質や開発効率に良い影響を与える • リファクタリングによるデグレード リスクの低下 • プロダクト品質の維持 • バグ早期検出による手戻りの減少 テストによるその他のメリット
  6. Terratest Chart Tests kube-monkey Kubetest K6 Kubernetes テストツール カスタマイズ性高く単体テスト・結合テストができそうなのはTerratest ツール名

    テストの種類 できること 備考 e2eテスト 非機能テスト 非機能テスト バリデーション 結合テスト 単体テスト 結合テスト e2eテスト など 機能テスト 負荷テスト 性能テスト カオスエンジニアリング Helm動作検証 スキーマチェック Goでの記述次第 テストのカスタマイズに必 要な設定が多い テストシナリオの設計やコ ード記述の知識が必要 テスト結果の予測が困難 カスタマイズ困難 全てGoで記述する 必要がある Helm cli 標準
  7. Table of Contents Kubernetesリソースの開発課題 アプローチ 単体テスト 結合テスト ソフトバンクでの運用 Kubernetesリソースに対する 単体テストの実践方法

    テストツールとテスト対象 についての整理 Kubernetesリソースに対する 結合テストの実践方法 リソースの増大による 品質・開発効率の問題 ソフトバンクで実践している テストフローの解説 1. 2. 3. 4. 5. まとめ 本発表のまとめと 今後にむけて 6.
  8. アプローチの検討|テストの種類と役割の整理 単体テスト 結合テスト E2Eテスト システム内の1単位の ふるまいについて 正しく動作するかを検証する システムがプロセス外依存と 統合した状態で 正常に動作するかを検証する

    システム全体を対象に ユーザー視点からの動作 を検証する 複数のHelm Chartを 含めたKubernetes全体 の構築テスト 単一のHelm Chart をデプロイして 動作テスト Kubernetesマニフェスト の生成テスト YAML YAML 本発表の対象外
  9. Table of Contents Kubernetesリソースの開発課題 アプローチ 単体テスト 結合テスト ソフトバンクでの運用 Kubernetesリソースに対する 単体テストの実践方法

    テストツールとテスト対象 についての整理 Kubernetesリソースに対する 結合テストの実践方法 リソースの増大による 品質・開発効率の問題 ソフトバンクで実践している テストフローの解説 1. 2. 3. 4. 5. まとめ 本発表のまとめと 今後にむけて 6.
  10. 単体テストのテスト対象の整理 単体テスト システム内の1単位の ふるまいについて 正しく動作するかを検証する Kubernetesマニフェスト の生成テスト YAML YAML values.yaml

    Helm Template Kubernetes Manifest 様々なパターンの入力に対しマニフェストを想定通りに生成できるかを検証 条件分岐 繰り返し処理
  11. Assertionの修正 yaml同士を比較するという単純なテストに変更 YAML expect.yaml YAML actual • テストコードの保守性向上 • 再利用性向上

    • 漏れのない仕様変更検知 よかったこと 今のところ問題なし。 マニフェストは設定ファイルなので一行の変更でも 大きな設定変更になりうる。 そのため少しの変更でも検知したい場合が多い。 Q. 偽陽性のテストが増えてメンテが大変にならないか
  12. Table of Contents Kubernetesリソースの開発課題 アプローチ 単体テスト 結合テスト ソフトバンクでの運用 Kubernetesリソースに対する 単体テストの実践方法

    テストツールとテスト対象 についての整理 Kubernetesリソースに対する 結合テストの実践方法 リソースの増大による 品質・開発効率の問題 ソフトバンクで実践している テストフローの解説 1. 2. 3. 4. 5. まとめ 本発表のまとめと 今後にむけて 6.
  13. 非同期処理による問題 CustomResourceのデプロイは非同期処理になるため リソースが正しく作成されるまで待つ処理が必要 1. Helmを管理するCustom Resource 2. その他のリソース • HelmRelease

    CRの作成 • GitRepositoryからソース取得 • HelmChart CRの追加 • リソースのデプロイ HelmRelease Helm Controller k8s API HelmChart Source Controller Fluxの処理フロー概要 CustomResourceデプロイ時の処理 https://fluxcd.io/flux/components/helm/
  14. Table of Contents Kubernetesリソースの開発課題 アプローチ 単体テスト 結合テスト ソフトバンクでの運用 Kubernetesリソースに対する 単体テストの実践方法

    テストツールとテスト対象 についての整理 Kubernetesリソースに対する 結合テストの実践方法 リソースの増大による 品質・開発効率の問題 ソフトバンクで実践している テストフローの解説 1. 2. 3. 4. 5. まとめ 本発表のまとめと 今後にむけて 6.
  15. ソフトバンクで作っているサービス GIP DNS node External DNS Kubernetes Prod/Staging LB Inte

    rnet node node Cert Manager RDB Secret Manager Prometheus クラウドネイティブアプリケーションプラットフォーム(CNAP) 特徴 • アプリケーション開発基盤 をローコードで作成 • GCP, AWS, Azureに対応 アプリ開発者 3つのクラウドベンダーに対応するためのテストが必要
  16. 3ベンダーへのテスト 単体テスト values-aws.yaml values-az.yaml values-gcp.yaml YAML YAML YAML YAML YAML

    結合テスト Apply テストコードを共通化し、異なるベンダーに対しても 同様のテストパターンの一つとして管理 Kubernetes Manifest
  17. テスト戦略 リモートブランチ ローカル main stage feature 単体テスト 単体テスト 結合テスト 結合テスト

    e2eテスト 一般的なアプリケーション開発のようなテスト戦略を採用 featureブランチでの開発
  18. テスト適用による効果 結合テスト 作成 e2eテスト 作成 単体テスト 作成 バグをテスト段階で検出できるようになった →バグ対応にかかる時間が減り、システム全体が安定稼働するようになった 50%

    • 全体のバグの割合が下がったとはいえない • テスト導入後に多くのバグを検出し、その後バグ割合が下がっている 0% ある期間でのスプリント毎のバグの割合 スプリント タスクに対する バグの割合 【考察】
  19. Table of Contents Kubernetesリソースの開発課題 アプローチ 単体テスト 結合テスト ソフトバンクでの運用 Kubernetesリソースに対する 単体テストの実践方法

    テストツールとテスト対象 についての整理 Kubernetesリソースに対する 結合テストの実践方法 リソースの増大による 品質・開発効率の問題 ソフトバンクで実践している テストフローの解説 1. 2. 3. 4. 5. まとめ 本発表のまとめと 今後にむけて 6.