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

Kubernetes のソースコードとの付き合い方 #gounco / Kubernetes source code reading

Kubernetes のソースコードとの付き合い方 #gounco / Kubernetes source code reading

Go(Un)Conference(Goあんこ)LT大会 6kg で発表した資料です
https://gounconference.connpass.com/event/129090/

d-kuro

May 27, 2019
Tweet

More Decks by d-kuro

Other Decks in Programming

Transcript

  1. Kubernetes ͷ
    ιʔείʔυͱͷ
    ෇͖߹͍ํ
    19/05/27 Go(Un)ConferenceʢGo͋Μ͜ʣLTେձ 6kg

    @ponde_m

    View Slide

  2. View Slide

  3. ࠓ೔࿩͢͜ͱ
    • Kubernetes ͷΞʔΩςΫνϟʹ͍ͭͯ
    • Kubernetes ͷιʔείʔυΛಡΉࡍʹ

    ໾ʹཱͭ࿩
    Go ͷษڧձ͚ͩͲ Kubernetes ͱ͸ͳΜͧ΍

    Έ͍ͨͳ࿩͕݁ߏ͋Γ·͢ (Gopher ͘Μ͸͍ͬͺ͍ग़·͢)

    View Slide

  4. Kubernetes ͱ͸

    View Slide

  5. Kubernetes ͱ͸
    • ίϯςφΛಈ͔ͨ͢ΊͷϓϥοτϑΥʔϜ
    • ίϯςφΛ͍͍ײ͡ʹӡ༻͢ΔͨΊͷػೳΛ
    ͍ͬͺ͍͍࣋ͬͯΔ
    • σϓϩΠ, εέʔϦϯά, ࣗݾम෮ etc…
    k8s ͬͯॻ͔ΕͨΓ͢Δͷ͸

    Kubernetes ͕ (k + 8 จࣈ + s) ͔ͩΒ

    View Slide

  6. Kubernetes ͷ

    ΞʔΩςΫνϟ

    View Slide

  7. • ΞʔΩςΫνϟʹ͍ͭͯཧղ͢Δͱ,

    ࣗ෼ͷಡΈ͍ͨ෦෼ͷίʔυ͕

    Ͳͷίϯϙʔωϯτʹ͋Δͷ͔Θ͔Δ
    • ͦΕͧΕͷίϯϙʔωϯτͱ

    ͦͷ੹຿ʹ͍ͭͯཧղ͠Α͏
    Kubernetes ͷΞʔΩςΫνϟ
    ࣍ͷϖʔδ͔Βͬ͘͟Γͱ

    ਤΛ༻͍ͯઆ໌͠·͢

    View Slide

  8. Kubernetes ͷΞʔΩςΫνϟ
    Master
    Node
    Node
    API
    API

    View Slide

  9. Kubernetes ͷΞʔΩςΫνϟ
    Master
    Node
    Node
    API
    API

    View Slide

  10. Kubernetes ͷΞʔΩςΫνϟ
    API Server
    Contoroller

    Manager
    Scheduler
    etcd

    View Slide

  11. Kubernetes ͷΞʔΩςΫνϟ
    API Server
    Contoroller

    Manager
    Scheduler
    etcd
    API Server
    Kubernetes ͷ ϦιʔεΛ؅ཧ͢Δ API Server
    શͯͷϦιʔεૢ࡞͸ API Server Λܦ༝ͯ͠ߦ͏

    View Slide

  12. Kubernetes ͷΞʔΩςΫνϟ
    API Server
    Contoroller

    Manager
    Scheduler
    etcd
    Contoroller

    Manager
    API Server Ͱ͸Ϧιʔε৘ใͷ CRUD ͙Β͍͔͠ߦͳͬͯ
    ͓ΒͣɺϦιʔεʹର͢Δ࣮ࡍͷॲཧͷத਎͸ Controller
    ͱݺ͹ΕΔίϯϙʔωϯτ͕ඇಉظͰߦͳ͍ͬͯΔ
    Controller (goroutine)
    Controller (goroutine)
    Controller (goroutine)
    ىಈ

    View Slide

  13. Kubernetes ͷΞʔΩςΫνϟ
    API Server
    Contoroller

    Manager
    Scheduler
    etcd
    Scheduler
    Pod (ίϯςφ) Λϊʔυ΁ׂΓ౰ͯΔ

    View Slide

  14. Kubernetes ͷΞʔΩςΫνϟ
    API Server
    Contoroller

    Manager
    Scheduler
    etcd
    ϦιʔεͷӬଓԽʹ࢖ΘΕΔ෼ࢄ KVS
    etcd

    View Slide

  15. Kubernetes ͷΞʔΩςΫνϟ
    Master
    Node
    Node
    API
    API

    View Slide

  16. Kubernetes ͷΞʔΩςΫνϟ
    API Server
    kube-proxy
    Pod
    Pod
    Pod
    Internet
    kubelet

    View Slide

  17. Kubernetes ͷΞʔΩςΫνϟ
    API Server
    kubelet kube-proxy
    Pod
    Pod
    Pod
    Internet
    kubelet
    ֤ϊʔυͰಈ࡞͢Δ
    Pod Λىಈ, ؅ཧ͢ΔΤʔδΣϯτ
    kubelet

    View Slide

  18. Kubernetes ͷΞʔΩςΫνϟ
    API Server
    kube-proxy
    Pod
    Pod
    Pod
    Internet
    kube-proxy
    kubelet
    ֤ϊʔυͰಈ࡞͢Δ
    Service ͷఆٛΛݩʹϧʔςΟϯά
    ͯ͘͠ΕΔωοτϫʔΫϓϩΩγ
    kube-proxy

    View Slide

  19. Kubernetes ͷΞʔΩςΫνϟ
    API Server
    kube-proxy
    Pod
    Pod
    Pod
    Internet
    Pod
    Pod
    Pod
    kubelet
    Container Runtime
    Docker Ҏ֎΋ಈ͘
    Pod
    Pod
    Pod

    View Slide

  20. Kubernetes ͷ
    ιʔείʔυʹ͍ͭͯ

    View Slide

  21. Kubernetes ͷιʔείʔυʹ͍ͭͯ
    • github.com/kubernetes/kubernetes
    • Go Modules ରԠͯ͠ΔͷͰ go mod ίϚϯ
    υΛ࣮ߦ͢ΔͱϏϧυͰ͖ΔΑ͏ʹͳΔ
    • ಡΉ࣌͸ IDE ͰίʔυδϟϯϓΛ࢖͓͏
    4݄͙Β͍ʹ Go Modules ରԠͨ͠

    https://github.com/kubernetes/kubernetes/pull/74877

    View Slide

  22. Kubernetes ͷιʔείʔυʹ͍ͭͯ
    • ϒϥ΢β͔Β௥͏࣌͸ SourceGraph Λ

    ೖΕΔͱศར
    • ϒϥ΢β͔Β Code Jump Ͱ͖Δ
    • https://about.sourcegraph.com/

    View Slide

  23. Kubernetes ͷιʔείʔυʹ͍ͭͯ
    • Kubernetes ͷίϯϙʔωϯτͷ࣮૷Ͱ͸

    github.com/spf13/cobra ͕࢖ΘΕ͍ͯΔ
    • Server ͱͯ͠ৼΔ෣͏΋ͷ΋ cobra Ͱ࣮૷͞Ε͍ͯΔ
    • ࣮ߦ࣌ͷ Option ͰύϥϝʔλΛ౉ͨ͠ΓͰ͖Δ

    View Slide

  24. main package ͸
    Ͳ͜ʹ͋Δͷ͔

    View Slide

  25. main package ͸Ͳ͜ʹ͋Δͷ͔
    • cmd package ͷதΛݟΔͱ֤ίϯϙʔωϯτ͝
    ͱʹ͞Βʹ package ͕෼͔Ε͍ͯΔ

    View Slide

  26. github.com/kubernetes/
    kubernetes/cmd/
    ͖ͬ͞ݟͨΑ͏ͳ໊લ͕ͪΒ΄Β

    View Slide

  27. • main package ͸ͦͷ഑Լʹ͋Δ
    main package ͸Ͳ͜ʹ͋Δͷ͔

    View Slide

  28. View Slide

  29. Controller ʹ͍ͭͯ

    View Slide

  30. Kubernetes ͷΞʔΩςΫνϟ
    API Server
    Contoroller

    Manager
    Scheduler
    etcd
    Contoroller

    Manager
    API Server Ͱ͸Ϧιʔε৘ใͷ CRUD ͙Β͍͔͠ߦͳͬͯ
    ͓ΒͣɺϦιʔεʹର͢Δ࣮ࡍͷॲཧͷத਎͸ Controller
    ͱݺ͹ΕΔίϯϙʔωϯτ͕ඇಉظͰߦͳ͍ͬͯΔ
    Controller (goroutine)
    Controller (goroutine)
    Controller (goroutine)
    ىಈ
    ͓͞Β͍

    View Slide

  31. • Ϧιʔεʹର͢Δ࣮ࡍͷॲཧͷத਎͸ Controller ͱݺ͹ΕΔί
    ϯϙʔωϯτ͕ඇಉظͰߦͳ͍ͬͯΔ
    • ྫ͑͹ Deployment ͷಈ͖ͷ࣮૷͕ݟ͍ͨʂ

    ͬͯͳͬͨ࣌ʹ API Server ͷίʔυΛಡΈʹߦͬͯ΋

    Կ΋ॻ͍ͯͳ͍
    • Controller Λಡ΋͏
    Controller ʹ͍ͭͯ
    ͜ͷ͜ͱΛ஌Βͣʹ࠷ॳ API Server ͷίʔυಡΜͰ·ͨ͠

    View Slide

  32. Controller ʹ͍ͭͯ
    Contoroller

    Manager
    Controller (goroutine)
    Controller (goroutine)
    Controller (goroutine)
    ىಈ
    • ࣮ࡍʹͲΜͳײ͡ͳͷ͔ίʔυͰݟͯΈΔ

    View Slide

  33. ͜Μͳײ͡ͷ map Ͱఆٛ͞Ε͍ͯΔ
    https://github.com/kubernetes/kubernetes/blob/v1.14.2/
    cmd/kube-controller-manager/app/
    controllermanager.go#L341-L384

    View Slide

  34. Controller ͷ໊લͱ
    Controller Λ࣮ߦ͢ΔͨΊͷؔ਺

    View Slide

  35. func StartControllers() Ͱ Controller ΛൃՐ
    (ΊͬͪΌίʔυ࡟ͬͯΔ)
    https://github.com/kubernetes/kubernetes/blob/v1.14.2/
    cmd/kube-controller-manager/app/
    controllermanager.go#L461-L501

    View Slide

  36. ͖ͬ͞ͷ map Λ for Ͱճͯ͠
    ͜͜Ͱ Controller ͷ࣮ߦؔ਺ΛݺΜͰΔ

    View Slide

  37. ྫͱͯ͠ Deployment ͷ Controller ͷ࣮ߦؔ਺
    https://github.com/kubernetes/kubernetes/blob/v1.14.2/
    cmd/kube-controller-manager/app/apps.go#L82-L97

    View Slide

  38. ίϯετϥΫλͰ Controller Λ࡞ͬͯ
    goroutine Ͱ Controller Λ࣮ߦ

    View Slide

  39. ·ͱΊ
    • Kubernetes ͷΞʔΩςΫνϟ͸

    ͓֮͑ͯ͘ͱ໾ʹཱͭ
    • Kubernetes ͷιʔείʔυ͸ҙ֎ʹಡΊΔ
    • Go ͸ಡΈ΍͍͢
    ΈΜͳ΋ಡ΋͏

    View Slide

  40. ͓·͚

    View Slide

  41. ໾ʹཱͭϦϯΫͱ͔
    • github.com/jamiehannaford/what-happens-when-k8s
    • Kubernetes ͕ىಈ͔ͯ͠ΒͲΜͳ͜ͱΛ͍ͯ͠Δ͔

    ιʔείʔυϨϕϧͰղઆͯ͘͠ΕΔ
    • ͳΜͱ೔ຊޠ ver ΋͋Δ
    • ιʔείʔυͷϦϯΫ͕ݹ͔ͬͨΓ, ϦϯΫ੾Εͩͬͨ
    Γ͢ΔͷͰ PR Λग़ͦ͏! (ग़ͯ͠Δ)

    View Slide

  42. ໾ʹཱͭϦϯΫͱ͔
    • https://gopherize.me/
    • Զ͚ͩͷ࠷ߴʹ͔Θ͍͍ Gopher ܅Λ࡞ΕΔαΠτ

    View Slide

  43. ͓͠·͍

    View Slide