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

Helm Chart を Unit Test する / Unit Testing Helm Chart

d-kuro
June 24, 2021

Helm Chart を Unit Test する / Unit Testing Helm Chart

Kubernetes Meetup Tokyo #42 で発表したスライドです
https://k8sjp.connpass.com/event/214286/

d-kuro

June 24, 2021
Tweet

More Decks by d-kuro

Other Decks in Programming

Transcript

  1. Chart Λ Unit Test ͢Δ
    Kubernetes Meetup Tokyo #42 LT

    View Slide

  2. I work for
    @ponde_m @d-kuro

    View Slide

  3. Summary
    • Helm Chart ͷ Test ʹ͍ͭͯ


    • Helm Chart Λ Unit Test ͢ΔͨΊͷϥΠϒϥϦΛ࣮૷ͨ͠࿩


    • ࣮૷ͷৄࡉ


    • “k8s.io” ϥΠϒϥϦΛ࢖ͬͨ Tips ͷ঺հ

    View Slide

  4. Testing Helm Charts
    --set autoscaling.enabled=false


    --set replicaCount=3

    View Slide

  5. Testing Helm Charts
    • Helm ʹ͸ςετػߏ͕ଘࡏ͢Δ


    • “helm.sh/hook: test” annotation Λ෇༩ͨ͠ Pod ఆٛΛ༻ҙ͢Δ


    • “/templates/tests/“ ʹ഑ஔ͢Δ


    • “helm install” ͨ͋͠ͱʹ “helm test” Λ࣮ߦ͢Δ


    • Pod ͕ exit 0 Ͱऴྃ͢Ε͹ςετ͕੒ޭͨ͠ͱΈͳ͞ΕΔ

    View Slide

  6. View Slide

  7. View Slide

  8. Testing Helm Charts
    • ͜ͷςετػߏ͸ͲͪΒ͔ͱ͍͑͹ Integration Test


    • values.yaml ʹఆٛͨ͠ Option ͕ҙਤͨ͠௨Γʹػೳ͢Δ͔

    Ͳ͏͔ͳͲͷ Unit Test Ϩϕϧͷ֬ೝ͕͔ͨͬͨ͠

    View Slide

  9. Unit Testing Helm Charts
    • Go Ͱ Helm Chart Λ Unit Test ͢Δ


    • “helm.sh/helm/v3” Λ import ͯ͠

    “helm template” ίϚϯυͰ࢖༻͍ͯ͠Δؔ਺Λݺͼग़͢


    • ϨϯμϦϯά͞Εͨ YAML ͕ string Ͱ໯͑ΔͷͰ

    ͍͍ײ͡ʹൺֱ͢Δ

    View Slide

  10. Unit Testing Helm Charts
    • ࡞੒ͨ͠ϥΠϒϥϦ


    • github.com/d-kuro/helmut


    • “helm template” ίϚϯυ૬౰ͷॲཧΛ࣮ߦ͢ΔϥΠϒϥϦ


    • Assert ༻ͷؔ਺Λఏڙ


    • github.com/google/go-cmp Λ࢖༻ͨ͠ diff Λදࣔ͢Δ

    View Slide

  11. View Slide

  12. View Slide

  13. View Slide

  14. Unit Testing Helm Charts
    • ྨࣅͷϥΠϒϥϦ


    • github.com/gruntwork-io/terratest/modules/helm


    • ಺෦Ͱ “helm tempalte —show-only” ίϚϯυΛ࣮ߦ͍ͯ͠Δ


    • github.com/Waterdrips/helmunit


    • Helm ͷύοέʔδΛ import ͢Δಉ༷ͷΞϓϩʔν


    • Assert ؔ਺ͳͲ͸ͳ͍

    View Slide

  15. Architecture
    map[ObjectKey]runtime.Object
    Rendered Manifests
    Exec helm template
    Render
    Convert
    Get
    User

    View Slide

  16. Exec helm template

    View Slide

  17. View Slide

  18. Split Manifests

    View Slide

  19. View Slide

  20. Convert from Raw Manifest to runtime.Object

    View Slide

  21. View Slide

  22. Assert
    • ݱࡏ͸ Contains ؔ਺͔࣮͠૷͍ͯ͠ͳ͍


    • Contains ؔ਺ʹ౉͞Εͨ Object Λ map ͔Β Get ͯ͠

    google/go-cmp Ͱൺֱͯ͠ߏ଄ମͷ diff Λදࣔ͢Δ


    • runtime.Object Λ௚઀౉͢ํ๏ͱ

    YAML or JSON ͷ Manifest Λ౉͢ํ๏ͷ 2 ͭΛఏڙ


    • ౉͢ runtime.Object ͷ TypeMeta ͸ۭͳΒಈతʹઃఆ

    View Slide

  23. TypeMeta ͷهड़͕ෆཁʹͳΔ

    View Slide

  24. Get GVK from runtime.Object

    View Slide

  25. View Slide

  26. Assert
    • Helm ʹΑ͘࢖ΘΕΔ label ΍ annotation ͳͲͷ

    ࠩ෼Λແࢹ͢ΔͨΊͷ Option Λఏڙ

    View Slide

  27. Omit Metadata

    View Slide

  28. View Slide

  29. Conclude
    • Helm Chart Λ Unit Test ͢ΔͨΊͷϥΠϒϥϦΛ࡞ͬͨ


    • github.com/d-kuro/helmut


    • ྑ͚Ε͹࢖͍ͬͯͩ͘͞

    View Slide

  30. Thank You for Listening

    View Slide