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

Kubernetes の API Client における
キャッシュ設計 / Cache Design in Kubernetes API Client

Kubernetes の API Client における
キャッシュ設計 / Cache Design in Kubernetes API Client

Go Conference 2019 Spring

Takayuki Kasai

May 18, 2019
Tweet

More Decks by Takayuki Kasai

Other Decks in Technology

Transcript

  1. ©2019 Wantedly, Inc.
    Kubernetes ͷ API Client ʹ͓͚Δ

    Ωϟογϡઃܭ
    Go Conference 2019 Spring
    Takayuki Kasai (@unblee) Wantedly, Inc.
    2019.5.18 -

    View Slide

  2. ©2019 Wantedly, Inc.
    !VOCMFF5BLBZVLJ,BTBJ
    *OGSBTUSVDUVSF&OHJOFFS 8BOUFEMZ *OD
    ৽ଔ೥໨

    View Slide

  3. ©2019 Wantedly, Inc.
    w (PQIFST$PEF3FBEJOH1BSUZʢࣾ಺ษڧձʣͰͷίʔυϦʔσΟϯά
    w αʔϏεج൫ͱͯ͠,VCFSOFUFTΛ࢖༻͍ͯ͠Δ
    ςʔϚઃఆͷಈػ

    View Slide

  4. ©2019 Wantedly, Inc.
    w ,VCFSOFUFTͷΞʔΩςΫνϟͷಛ௃
    w ΞʔΩςΫνϟʹଇͬͨ"1*ϦΫΤετΛ࡟ݮ͢ΔͨΊͷΩϟογϡઃܭ
    ࠓ೔࿩͢͜ͱ

    View Slide

  5. ©2019 Wantedly, Inc.
    w ίϯςφӡ༻ΛࣗಈԽ͢ΔͨΊͷϓϥοτϑΥʔϜ
    w σϓϩΠɺΦʔτεέʔϧɺࣗݾճ෮ɺϦιʔε࠷దԽɺFUD
    w ෳ਺ͷখ͍͞αʔϏε͕ڠௐಈ࡞ͯ͠ػೳΛ࣮ݱ͍ͯ͠Δ෼ࢄγεςϜ
    ,VCFSOFUFTͱ͸
    IUUQTLVCFSOFUFTJP

    View Slide

  6. ©2019 Wantedly, Inc.
    /PEF
    /PEF
    ,VCFSOFUFTͷΞʔΩςΫνϟ
    .BTUFS

    View Slide

  7. ©2019 Wantedly, Inc.
    /PEF
    $POUBJOFS
    $POUSPMMFS
    $POUBJOFS
    $POUBJOFS
    $POUBJOFS
    /PEF
    $POUBJOFS
    $POUSPMMFS
    $POUBJOFS
    $POUBJOFS
    $POUBJOFS
    ,VCFSOFUFTͷΞʔΩςΫνϟ
    .BTUFS
    "1*4FSWFS
    4UBUF4UPSF

    View Slide

  8. ©2019 Wantedly, Inc.
    /PEF
    $POUBJOFS
    $POUSPMMFS
    $POUBJOFS
    $POUBJOFS
    $POUBJOFS
    /PEF
    $POUBJOFS
    $POUSPMMFS
    $POUBJOFS
    $POUBJOFS
    $POUBJOFS
    ,VCFSOFUFTͷΞʔΩςΫνϟ
    .BTUFS
    "1*4FSWFS
    4UBUF4UPSF
    $POUSPMMFS
    $POUSPMMFS
    3FTPVSDFͷঢ়ଶΛ࣮؀ڥ্ʹ൓өͤ͞Δ
    3FTPVSDFૢ࡞ର৅Λந৅Խͨ֓͠೦
    ίϯςφɺϩʔυόϥϯαɺFUD

    View Slide

  9. ©2019 Wantedly, Inc.
    /PEF
    $POUBJOFS
    $POUSPMMFS
    $POUBJOFS
    $POUBJOFS
    $POUBJOFS
    /PEF
    $POUBJOFS
    $POUSPMMFS
    $POUBJOFS
    $POUBJOFS
    $POUBJOFS
    ,VCFSOFUFTͷΞʔΩςΫνϟ
    .BTUFS
    "1*4FSWFS
    4UBUF4UPSF
    "1*4FSWFS
    3FTPVSDFΛૢ࡞͢ΔͨΊͷ"1*&OEQPJOUΛఏڙ͢Δ
    3FTPVSDFͷมߋΠϕϯτΛ௨஌͢ΔͨΊͷ8BUDI"1*΋ఏڙ͍ͯ͠Δ

    View Slide

  10. ©2019 Wantedly, Inc.
    /PEF
    $POUBJOFS
    $POUSPMMFS
    $POUBJOFS
    $POUBJOFS
    $POUBJOFS
    /PEF
    $POUBJOFS
    $POUSPMMFS
    $POUBJOFS
    $POUBJOFS
    $POUBJOFS
    ,VCFSOFUFTͷΞʔΩςΫνϟ
    .BTUFS
    "1*4FSWFS
    4UBUF4UPSF
    4UBUF4UPSF
    3FTPVSDFͷঢ়ଶ΍ઃఆɺൿಗ৘ใͱ͍ͬͨ
    ,VCFSOFUFTΛߏ੒͢ΔͨΊͷσʔλ͕อଘ͞Ε͍ͯΔ

    View Slide

  11. ©2019 Wantedly, Inc.
    /PEF
    $POUBJOFS
    $POUSPMMFS
    $POUBJOFS
    $POUBJOFS
    $POUBJOFS
    /PEF
    $POUBJOFS
    $POUSPMMFS
    $POUBJOFS
    $POUBJOFS
    $POUBJOFS
    ,VCFSOFUFTͷΞʔΩςΫνϟ
    .BTUFS
    "1*4FSWFS
    4UBUF4UPSF
    4UBUF4UPSF
    ίϯςφΛૢ࡞͢Δྫ
    "1*4FSWFS
    $POUSPMMFS
    $POUBJOFS
    3FTPVSDF
    $POUBJOFS
    0CKFDU
    ,VCFSOFUFTʹ͓͚Δঢ়ଶ͸

    $POUBJOFS3FTPVSDFͷ0CKFDUͱͯ͠อଘ͞Ε͍ͯΔ
    $POUSPMMFS
    ˞$POUBJOFS3FTPVSDF͸આ໌Λ؆୯ʹ͢ΔͨΊʹઃఆͨ͠Ծͷ3FTPVSDF
    ɹ࣮ࡍʹ͸1PE3FTPVSDF

    View Slide

  12. ©2019 Wantedly, Inc.
    /PEF
    $POUBJOFS
    $POUSPMMFS
    $POUBJOFS
    $POUBJOFS
    $POUBJOFS
    /PEF
    $POUBJOFS
    $POUSPMMFS
    $POUBJOFS
    $POUBJOFS
    $POUBJOFS
    ,VCFSOFUFTͷΞʔΩςΫνϟ
    .BTUFS
    "1*4FSWFS
    4UBUF4UPSF
    4UBUF4UPSF
    ίϯςφΛૢ࡞͢Δྫ
    "1*4FSWFS
    $POUSPMMFS
    $POUBJOFS
    3FTPVSDF
    $POUBJOFS
    0CKFDU
    8BUDI"1*Λར༻ͯ͠

    $POUBJOFS3FTPVSDFΛ؂ࢹ͍ͯ͠Δ
    Πϕϯτʢ࡞੒ɾߋ৽ɾ࡟আʣΛݕ஌ͨ͠Β

    ର৅ͷ$POUBJOFS0CKFDUͷঢ়ଶ·Ͱ

    ࣮ࡍͷίϯςφΛૢ࡞͢Δ
    $POUSPMMFS
    $POUBJOFS

    View Slide

  13. ©2019 Wantedly, Inc.
    /PEF
    $POUBJOFS
    $POUSPMMFS
    $POUBJOFS
    $POUBJOFS
    $POUBJOFS
    /PEF
    $POUBJOFS
    $POUSPMMFS
    $POUBJOFS
    $POUBJOFS
    $POUBJOFS
    ,VCFSOFUFTͷΞʔΩςΫνϟ
    .BTUFS
    "1*4FSWFS
    4UBUF4UPSF
    w ͢΂ͯͷૢ࡞͸"1*ϦΫΤετͰߦ͏
    w ֤$POUSPMMFS͸ಛఆͷ3FTPVSDFΛ؂ࢹ͍ͯ͠Δ
    w 3FTPVSDFͱ$POUSPMMFS͸/ͷؔ܎
    w ͭͷ3FTPVSDF0CKFDUΛૢ࡞͢Δ͚ͩͰෳ਺ͷ$POUSPMMFS͕ಈ࡞͢Δ
    w "1*ϦΫΤετ͕େྔʹൃߦ͞ΕΔ

    View Slide

  14. ©2019 Wantedly, Inc.
    େྔͷ"1*ϦΫΤετʹΑΔ໰୊
    ύϑΥʔϚϯεվળͷͨΊʹ࣮૷͞Εͨ΋ͷ
    w 3FGIUUQTLVCFSOFUFTJPCMPHLVCFSOFUFTQFSGPSNBODF
    NFBTVSFNFOUTBOE
    w "1*4FSWFSʹ8BUDI"1*ͱΩϟογϡػೳΛ࣮૷ͨ͠
    w 8BUDI"1*ϕʔεͰಈ࡞͢ΔΑ͏ʹ$POUSPMMFSΛॻ͖׵͑ͨ
    w ෛՙʹΑͬͯ"1*&OEQPJOUͷϨεϙϯελΠϜ͕௕͘ͳΔ
    w ͢΂͕ͯ"1*ʹΑ੍ͬͯޚ͞Ε͍ͯΔͷͰɺશମతͳಈ࡞͕ॏ͘ͳΔ

    View Slide

  15. ©2019 Wantedly, Inc.
    $POUSPMMFSʹ͓͚ΔΩϟογϡઃܭͷ֓ཁ
    "1*4FSWFS
    *OGPSNFS
    -JTU
    8BUDI
    FWFOUT
    1PQBPCKFDUGSPNRVFVF
    "EEUIFPCKFDU
    /PUJGZFWFOU
    $IBOHFUIFTUBUFPGUIFPCKFDU
    (FUUIFPCKFDUGSPNDBDIFTUPSF
    DMJFOUHP
    6TFS
    )BOEMFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF






    ,VCFSOFUFT"1*$MJFOU1BDLBHFҎԼʹΩϟογϡػߏ͕ఏڙ͞Ε͍ͯΔ
    IUUQTHPEPDPSHLTJPDMJFOUHPUPPMTDBDIF
    w $POUSPMMFSͰར༻͞Ε͍ͯΔ
    w 8BUDI"1*ΛલఏʹΩϟογϡػߏΛߏங͍ͯ͠Δ
    w ىಈ࣌ʹ͢΂ͯͷΦϒδΣΫτΛΩϟογϡͯ͠

    $POUSPMMFS͸Ωϟογϡ͔ΒΦϒδΣΫτΛऔಘͰ͖Δ

    View Slide

  16. ©2019 Wantedly, Inc.
    $POUSPMMFSʹ͓͚ΔΩϟογϡઃܭͷ֓ཁ
    "1*4FSWFS
    *OGPSNFS
    -JTU
    8BUDI
    FWFOUT
    1PQBPCKFDUGSPNRVFVF
    "EEUIFPCKFDU
    /PUJGZFWFOU
    $IBOHFUIFTUBUFPGUIFPCKFDU
    (FUUIFPCKFDUGSPNDBDIFTUPSF
    DMJFOUHP
    6TFS
    )BOEMFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF






    View Slide

  17. ©2019 Wantedly, Inc.
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    "1*4FSWFS
    *OGPSNFS
    -JTU
    8BUDI
    FWFOUT
    1PQBPCKFDUGSPNRVFVF
    "EEUIFPCKFDU
    /PUJGZFWFOU
    $IBOHFUIFTUBUFPGUIFPCKFDU
    (FUUIFPCKFDUGSPNDBDIFTUPSF
    DMJFOUHP
    6TFS
    )BOEMFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF






    w 8BUDIର৅3FTPVSDF͸ͭ
    w %FQMPZNFOU
    w 3FQMJDB4FU
    w 1PE
    ϩʔϦϯάΞοϓσʔτɺϩʔϧόοΫ౳σϓϩΠ؅ཧ
    1PE͕ৗʹࢦఆͨ͠਺ಈ͘Α͏ʹϨϓϦέʔγϣϯΛ؅ཧ͢Δ
    ෳ਺ͷίϯςφΛ·ͱΊͨσϓϩΠͷ࠷খ୯Ґ
    EFQMPZNFOUDPOUSPMMFSΛྫͱͯ͠ΩϟογϡػߏͷڍಈΛ೺Ѳ͢Δ
    %FQMPZNFOU
    3FQMJDB4FU
    1PE 1PE
    %FQMPZNFOU3FQMJDB4FU1PE
    ͱ͍͏ॱ൪ͰԼҐ3FTPVSDFΛ؅ཧ͍ͯ͠Δ

    View Slide

  18. ©2019 Wantedly, Inc.
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    "1*4FSWFS
    *OGPSNFS
    1PQBPCKFDUGSPNRVFVF
    "EEUIFPCKFDU
    /PUJGZFWFOU
    $IBOHFUIFTUBUFPGUIFPCKFDU
    (FUUIFPCKFDUGSPNDBDIFTUPSF
    DMJFOUHP
    6TFS
    )BOEMFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF






    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    (FUBMMUBSHFUSFTPVSDFPCKFDUT
    $POUSPMMFSͷىಈ࣌

    View Slide

  19. ©2019 Wantedly, Inc.
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    "1*4FSWFS
    *OGPSNFS
    -JTU
    8BUDI
    FWFOUT
    1PQBPCKFDUGSPNRVFVF
    "EEUIFPCKFDU
    /PUJGZFWFOU
    $IBOHFUIFTUBUFPGUIFPCKFDU
    (FUUIFPCKFDUGSPNDBDIFTUPSF
    DMJFOUHP
    6TFS
    )BOEMFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF






    "1*4FSWFS
    (FUBMMUBSHFUSFTPVSDFPCKFDUT
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF ᶃ
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻

    $BDIFBMMPCKFDUT
    ىಈ௚ޙɺ3FTPVSDFͷ؂ࢹΛ࣮ߦ͢Δલʹ
    ͢΂ͯͷ؂ࢹର৅3FTPVSDFͷΦϒδΣΫτΛΩϟογϡ͢Δ
    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    %FQMPZNFOU
    3FQMJDB4FU
    1PE

    View Slide

  20. ©2019 Wantedly, Inc.
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    "1*4FSWFS
    *OGPSNFS
    -JTU
    8BUDI
    FWFOUT
    1PQBPCKFDUGSPNRVFVF
    "EEUIFPCKFDU
    /PUJGZFWFOU
    $IBOHFUIFTUBUFPGUIFPCKFDU
    (FUUIFPCKFDUGSPNDBDIFTUPSF
    DMJFOUHP
    6TFS
    )BOEMFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF






    "1*4FSWFS
    (FUBMMUBSHFUSFTPVSDFPCKFDUT
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF ᶃ
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻

    $BDIFBMMPCKFDUT
    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    type Deployment struct {
    metav1.TypeMeta
    metav1.ObjectMeta
    Spec DeploymentSpec
    Status DeploymentStatus
    }
    IUUQTHPEPDPSHLTJPBQJBQQTW%FQMPZNFOU

    View Slide

  21. ©2019 Wantedly, Inc.
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    "1*4FSWFS
    *OGPSNFS
    -JTU
    8BUDI
    FWFOUT
    1PQBPCKFDUGSPNRVFVF
    "EEUIFPCKFDU
    /PUJGZFWFOU
    $IBOHFUIFTUBUFPGUIFPCKFDU
    (FUUIFPCKFDUGSPNDBDIFTUPSF
    DMJFOUHP
    6TFS
    )BOEMFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF






    "1*4FSWFS
    (FUBMMUBSHFUSFTPVSDFPCKFDUT
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF ᶃ
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻

    $BDIFBMMPCKFDUT
    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    type Lister interface {
    List(options metav1.ListOptions) (runtime.Object, error)
    }
    type Watcher interface {
    Watch(options metav1.ListOptions) (watch.Interface, error)
    }
    type ListerWatcher interface {
    Lister
    Watcher
    }
    IUUQTHPEPDPSHLTJPDMJFOUHPUPPMTDBDIF-JTUFS8BUDIFS
    IUUQTHPEPDPSHLTJPDMJFOUHPUPPMTDBDIF-JTUFS
    IUUQTHPEPDPSHLTJPDMJFOUHPUPPMTDBDIF8BUDIFS

    View Slide

  22. ©2019 Wantedly, Inc.
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    "1*4FSWFS
    *OGPSNFS
    -JTU
    8BUDI
    FWFOUT
    1PQBPCKFDUGSPNRVFVF
    "EEUIFPCKFDU
    /PUJGZFWFOU
    $IBOHFUIFTUBUFPGUIFPCKFDU
    (FUUIFPCKFDUGSPNDBDIFTUPSF
    DMJFOUHP
    6TFS
    )BOEMFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF






    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    return cache.NewSharedIndexInformer(
    &cache.ListWatch{
    ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
    if tweakListOptions != nil {
    tweakListOptions(&options)
    }
    return client.AppsV1().Deployments(namespace).List(options)
    },
    WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
    if tweakListOptions != nil {
    tweakListOptions(&options)
    }
    return client.AppsV1().Deployments(namespace).Watch(options)
    },
    },
    &appsv1.Deployment{},
    resyncPeriod,
    indexers,
    )
    IUUQTHJUIVCDPNLVCFSOFUFTDMJFOUHPCMPCCEGCFDCCF⒎EDDBJOGPSNFSTBQQTWEFQMPZNFOUHP--

    View Slide

  23. ©2019 Wantedly, Inc.
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    "1*4FSWFS
    *OGPSNFS
    8BUDIUBSHFUSFTPVSDFFWFOUT
    1PQBPCKFDUGSPNRVFVF
    "EEUIFPCKFDU
    /PUJGZFWFOU
    $IBOHFUIFTUBUFPGUIFPCKFDU
    (FUUIFPCKFDUGSPNDBDIFTUPSF
    DMJFOUHP
    6TFS
    )BOEMFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF






    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    શମͷΩϟογϡ׬ྃޙ

    View Slide

  24. ©2019 Wantedly, Inc.
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    "1*4FSWFS
    *OGPSNFS
    8BUDIUBSHFUSFTPVSDFFWFOUT
    1PQBPCKFDUGSPNRVFVF
    "EEUIFPCKFDU
    /PUJGZFWFOU
    $IBOHFUIFTUBUFPGUIFPCKFDU
    (FUUIFPCKFDUGSPNDBDIFTUPSF
    DMJFOUHP
    6TFS
    )BOEMFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF






    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    "1*4FSWFS
    8BUDIUBSHFUSFTPVSDFFWFOUT
    3FqFDUPS
    2VFVF ᶃ
    3FTPVSDFͷ؂ࢹΛ։࢝͢Δ
    3FTPVSDFʹର͢ΔΠϕϯτʢ"EE 6QEBUF %FMFUFʣ͕ൃੜ͢Δͱ

    ΠϕϯτͱΦϒδΣΫτΛऔಘͯ͠2VFVFʹ٧ΊࠐΉ
    %FQMPZNFOU
    %FQMPZNFOU
    3FQMJDB4FU
    1PE

    View Slide

  25. ©2019 Wantedly, Inc.
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    "1*4FSWFS
    *OGPSNFS
    8BUDIUBSHFUSFTPVSDFFWFOUT
    1PQBPCKFDUGSPNRVFVF
    "EEUIFPCKFDU
    /PUJGZFWFOU
    $IBOHFUIFTUBUFPGUIFPCKFDU
    (FUUIFPCKFDUGSPNDBDIFTUPSF
    DMJFOUHP
    6TFS
    )BOEMFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF






    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    3FqFDUPS
    2VFVF
    *OGPSNFS͕3FqFDUPS͕ड͚औͬͨΦϒδΣΫτΛΩϟογϡʹ௥Ճ͢Δ
    *OGPSNFS
    1PQBPCKFDUGSPNRVFVF
    "EEUIFPCKFDU
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/


    %FQMPZNFOU
    3FQMJDB4FU
    1PE

    View Slide

  26. ©2019 Wantedly, Inc.
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    "1*4FSWFS
    *OGPSNFS
    8BUDIUBSHFUSFTPVSDFFWFOUT
    1PQBPCKFDUGSPNRVFVF
    "EEUIFPCKFDU
    /PUJGZFWFOU
    $IBOHFUIFTUBUFPGUIFPCKFDU
    (FUUIFPCKFDUGSPNDBDIFTUPSF
    DMJFOUHP
    6TFS
    )BOEMFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF






    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    type ThreadSafeStore interface
    type threadSafeMap struct {
    items map[string]interface{}
    }
    IUUQTHPEPDPSHLTJPDMJFOUHPUPPMTDBDIF5ISFBE4BGF4UPSF

    View Slide

  27. ©2019 Wantedly, Inc.
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    "1*4FSWFS
    *OGPSNFS
    8BUDIUBSHFUSFTPVSDFFWFOUT
    1PQBPCKFDUGSPNRVFVF
    "EEUIFPCKFDU
    /PUJGZFWFOU
    $IBOHFUIFTUBUFPGUIFPCKFDU
    (FUUIFPCKFDUGSPNDBDIFTUPSF
    DMJFOUHP
    6TFS
    )BOEMFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF






    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    )BOEMFS͕ΠϕϯτͱΦϒδΣΫτͷঢ়ଶʹԠͯ͡ૢ࡞Λߦ͏
    *OGPSNFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    /PUJGZFWFOU
    (FUUIFPCKFDUGSPNDBDIFTUPSF
    )BOEMFS

    ᶇ %FQMPZNFOU
    3FQMJDB4FU
    1PE

    View Slide

  28. ©2019 Wantedly, Inc.
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    "1*4FSWFS
    *OGPSNFS
    8BUDIUBSHFUSFTPVSDFFWFOUT
    1PQBPCKFDUGSPNRVFVF
    "EEUIFPCKFDU
    /PUJGZFWFOU
    $IBOHFUIFTUBUFPGUIFPCKFDU
    (FUUIFPCKFDUGSPNDBDIFTUPSF
    DMJFOUHP
    6TFS
    )BOEMFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF






    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    )BOEMFS
    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    type ResourceEventHandler interface {
    OnAdd(obj interface{})
    OnUpdate(oldObj, newObj interface{})
    OnDelete(obj interface{})
    }
    IUUQTHPEPDPSHLTJPDMJFOUHPUPPMTDBDIF3FTPVSDF&WFOU)BOEMFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    (FUUIFPCKFDUGSPNDBDIFTUPSF

    View Slide

  29. ©2019 Wantedly, Inc.
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    "1*4FSWFS
    *OGPSNFS
    8BUDIUBSHFUSFTPVSDFFWFOUT
    1PQBPCKFDUGSPNRVFVF
    "EEUIFPCKFDU
    /PUJGZFWFOU
    $IBOHFUIFTUBUFPGUIFPCKFDU
    (FUUIFPCKFDUGSPNDBDIFTUPSF
    DMJFOUHP
    6TFS
    )BOEMFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF






    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    func (dc *DeploymentController) syncDeployment(key string) error {
    namespace, name, err := cache.SplitMetaNamespaceKey(key)
    deployment, err := dc.dLister.Deployments(namespace).Get(name)
    d := deployment.DeepCopy()
    if reflect.DeepEqual(d.Spec.Selector, &everything) {
    dc.eventRecorder.Eventf(d, v1.EventTypeWarning, "SelectingAll", "This deployment is selecting all pods. A non-
    empty selector is required.")
    if d.Status.ObservedGeneration < d.Generation {
    d.Status.ObservedGeneration = d.Generation
    dc.client.AppsV1().Deployments(d.Namespace).UpdateStatus(d)
    }
    return nil
    }
    rsList, err := dc.getReplicaSetsForDeployment(d)
    podMap, err := dc.getPodMapForDeployment(d, rsList)
    if getRollbackTo(d) != nil {
    return dc.rollback(d, rsList)
    }
    scalingEvent, err := dc.isScalingEvent(d, rsList)
    switch d.Spec.Strategy.Type {
    case apps.RecreateDeploymentStrategyType:
    return dc.rolloutRecreate(d, rsList, podMap)
    case apps.RollingUpdateDeploymentStrategyType:
    return dc.rolloutRolling(d, rsList)
    }
    }
    IUUQTHJUIVCDPNLVCFSOFUFTLVCFSOFUFTCMPCBGGFFCFFCGBFFGFDQLHDPOUSPMMFSEFQMPZNFOUEFQMPZNFOU@DPOUSPMMFSHP--

    View Slide

  30. ©2019 Wantedly, Inc.
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    "1*4FSWFS
    *OGPSNFS
    8BUDIUBSHFUSFTPVSDFFWFOUT
    1PQBPCKFDUGSPNRVFVF
    "EEUIFPCKFDU
    /PUJGZFWFOU
    $IBOHFUIFTUBUFPGUIFPCKFDU
    (FUUIFPCKFDUGSPNDBDIFTUPSF
    DMJFOUHP
    6TFS
    )BOEMFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF






    3FQMJDB4FU
    1PE
    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    %FQMPZNFOU
    EFQMPZNFOUDPOUSPMMFSʹ͓͚ΔΩϟογϡར༻
    "1*4FSWFSʹૢ࡞ޙͷΦϒδΣΫτΛ1045͢Δ
    )BOEMFS
    "1*4FSWFS
    %FQMPZNFOU
    3FQMJDB4FU
    1PE
    3FQMJDB4FU
    1PE
    $IBOHFUIFTUBUFPGUIFPCKFDU

    View Slide

  31. ©2019 Wantedly, Inc.
    $POUSPMMFSʹ͓͚ΔΩϟογϡઃܭͷ֓ཁ
    "1*4FSWFS
    *OGPSNFS
    -JTU
    8BUDI
    FWFOUT
    1PQBPCKFDUGSPNRVFVF
    "EEUIFPCKFDU
    /PUJGZFWFOU
    $IBOHFUIFTUBUFPGUIFPCKFDU
    (FUUIFPCKFDUGSPNDBDIFTUPSF
    DMJFOUHP
    6TFS
    )BOEMFS
    $BDIF4UPSF
    0CKFDU
    0CKFDU
    0CKFDU/
    3FqFDUPS
    2VFVF






    View Slide

  32. ©2019 Wantedly, Inc.
    w ,VCFSOFUFTͰ͸"1*DMJFOUQBDLBHFʹΩϟογϡػߏ͕࣮૷͞Ε͍ͯΔ
    w ͭͷσʔλมߋ͕ಉ࣌ʹෳ਺ՕॴʹӨڹΛ༩͑ΔΞʔΩςΫνϟʹ͓͍ͯ

    ΦϒδΣΫτͷঢ়ଶΛΩϟογϡ͢Δઃܭ͕"1*ϦΫΤετͷ࡟ݮʹ༗ޮ
    w ,VCFSOFUFTͷΑ͏ͳେن໛044Ͱ΋ݸʑͷύοέʔδΛಡΜͰΈΔͱ໘ന͍
    ·ͱΊ

    View Slide

  33. ©2019 Wantedly, Inc.
    એ఻
    ຖि݄༵೔.JDSPTFSWJDFT.POEBZ
    IUUQTXXXXBOUFEMZDPNQSPKFDUT
    IUUQTHJUIVCDPNXBOUFEMZNJDSPTFSWJDFT@NPOEBZ
    ຖिਫ༵೔(PQIFST$PEF3FBEJOH1BSUZ
    IUUQTHJUIVCDPNXBOUFEMZHPQIFSTDPEFSFBEJOHQBSUZJTTVFT
    ؾʹͳΔਓ͸੠Λ͔͚͍ͯͩ͘͞

    View Slide