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

CloudNative Buildpacksで創る、CloudNativeな開発体験

CloudNative Buildpacksで創る、CloudNativeな開発体験

CloudNative Buildpacks(CNB)はCNCF Sandboxとして開発が行われているプロジェクトです。 CNBを利用するとアプリケーションのコードを元に意思決定を行い、OCI Image Format specに準拠したイメージを作成することができます。

話し手の所属する企業は複数のプログラミング言語やバージョンが散在するサービスを開発、運用しており、複雑化する開発環境構築、デプロイ手順の煩雑化が課題としてありました。話し手はそういった課題をCNBとKubernetesを利用したパイプラインによって、なめらかに開発環境をコンテナ化し、Telepresenseを用いて共有、専有を組み合わせた開発環境を実現しました。

本セッションでは多くの開発環境を抱える企業においてCNBとKubernatesを組み合わせ、CloudNativeな開発環境構築、デプロイフローを構築したノウハウ、実例をご紹介します

Kazuhiko Yamashita

November 28, 2019
Tweet

More Decks by Kazuhiko Yamashita

Other Decks in Programming

Transcript

  1. CloudNative BuildpacksͰ૑Δɺ
    CloudNativeͳ։ൃମݧ
    ʙౙͷݰքṗͰͱΕͨɺ͍͖ͷ͍͍αόͷιςʔʹय़෩Λఴ͑ͯʙ

    View Slide

  2. ࢁԼ࿨඙!QZBNB
    (.0ϖύϘٕज़ج൫νʔϜ
    γχΞɾϓϦϯγύϧ
    UFOTOBQPODPN
    QZBNBGVO
    TUOTKQ

    View Slide

  3. 45/4
    -JOVY/444FSWFS
    TUOTKQ

    View Slide

  4. 45/4

    View Slide

  5. ޷͖ͳίϚϯυ
    perf record --call-graph dwarf -p

    View Slide

  6. View Slide

  7. View Slide

  8. ࠓ೔࿩͢͜ͱ
    • ϖύϘͷϗεςΟϯάࣄۀʹ͓͚Δ։ൃ؀ڥͷ՝୊

    • CloudNativeBuildPacksΛར༻ͨ͠ίϯςφΠϝʔδͷ࡞੒

    • tecktoncd/pipelineΛ༻͍ͨίϯςφϏϧυύΠϓϥΠϯ

    • TelepresenceΛར༻ͨ͠ϦϞʔτ։ൃ؀ڥ

    • όνΣϥʔ3ΛݟऴΘͬͨײ૝ɺਅ࣮ͷѪͱ͸ʁ

    View Slide

  9. ϖύϘͷ։ൃ؀ڥʹ͓͚Δ՝୊

    View Slide

  10. ։ൃ૊৫
    αʔϏε
    ΤϯδχΞ
    σβΠφʔ
    ϓϩμΫτνʔϜ ϜʔνʔϜ
    σβΠφʔνʔϜ
    σβΠφʔνʔϜ͸αʔϏεԣஅ

    View Slide

  11. ։ൃ؀ڥ
    XXX
    VTFS
    BQJ

    View Slide

  12. ྺ࢙
    • ϩϦϙοϓʂϨϯλϧαʔόαʔϏε͸ࠓ೥18೥໨

    • PHPxʙPHP7·Ͱ͕ݱଘ

    • JSͷύοέʔδ΋࣌୅ʹԠͨ͡΋ͷ͕ͦΕͳΓʹϚτϦΫεతʹଘࡏ

    View Slide

  13. Կ΋ͯ͠ͳ͍ͷʹյΕΔ࣌୅͔Β
    Կ΋ͯ͠ͳ͍͔ΒյΕΔͷ࣌୅΁

    View Slide

  14. ʮٱ͠ͿΓʹϜʔϜʔͷ

    σβΠϯ΍Δͧʙʯ

    View Slide

  15. @muu-dev ։ൃ؀ڥ͕
    ىಈ͠ͳ͘ͳΓ·ͨ͠ɻ͓࣌ؒ͋Δͱ͖ʹ
    ϔϧϓ͓ئ͍͠·͢ʙ

    View Slide

  16. ׂΓࠐΈ࣌ؒɺ

    ϔϧϓͷ଴ͪ࣌ؒΛͳΜͱ͔͍ͨ͠

    View Slide

  17. Kubernetesͬͯศརͬͯฉ͖·ͨ͠
    XXX
    VTFS
    BQJ
    ࣗݾम෮͞Εͯɺએݴత͔ͭෆมతͳ։ൃ؀ڥͬͯ
    ͜ΕɺເͰ͔͢ʁເʁເ͡Όͳ͍ʁ

    View Slide

  18. ։ൃऀ͝ͱʹɺCloudNativeͳ։ൃ؀ڥΛ࡞Δ

    View Slide

  19. –https://github.com/cncf/toc/blob/master/
    DEFINITION.md#%E6%97%A5%E6%9C%AC%E8%AA%9E%E7%89%88
    “Ϋϥ΢υωΠςΟϒٕज़͸ɺύϒϦοΫΫϥ΢υɺϓϥΠϕʔτΫϥ΢υɺϋΠϒϦουΫϥ΢υ
    ͳͲͷۙ୅తͰμΠφϛοΫͳ؀ڥʹ͓͍ͯɺεέʔϥϒϧͳΞϓϦέʔγϣϯΛߏங͓Αͼ࣮ߦ͢
    ΔͨΊͷೳྗΛ૊৫ʹ΋ͨΒ͠·͢ɻ
    ͜ͷΞϓϩʔνͷ୅දྫʹɺίϯςφɺαʔϏεϝογϡɺϚΠΫϩαʔϏεɺΠϛϡʔλϒϧΠϯ
    ϑϥετϥΫνϟɺ͓ΑͼએݴܕAPI͕͋Γ·͢ɻ
    ͜ΕΒͷख๏ʹΑΓɺճ෮ੑɺ؅ཧྗɺ͓ΑͼՄ؍ଌੑͷ͋Δૄ݁߹γεςϜ͕࣮ݱ͠·͢ɻ ͜ΕΒ
    Λݎ࿚ͳࣗಈԽͱ૊Έ߹ΘͤΔ͜ͱͰɺΤϯδχΞ͸ΠϯύΫτͷ͋ΔมߋΛ࠷খݶͷ࿑ྗͰසൟ͔
    ͭ༧ଌͲ͓Γʹߦ͏͜ͱ͕Ͱ͖·͢ɻ
    Cloud Native Computing Foundation͸ɺΦʔϓϯιʔεͰϕϯμʔதཱϓϩδΣΫτͷΤίγες
    ϜΛҭ੒ɾҡ࣋ͯ͠ɺ͜ͷύϥμΠϜͷ࠾༻Λଅਐ͍ͨ͠ͱߟ͑ͯ·͢ɻ ࢲͨͪ͸࠷ઌ୺ͷύλʔϯ
    ΛຽओԽ͠ɺ͜ΕΒͷΠϊϕʔγϣϯΛ୭΋͕ར༻Ͱ͖ΔΑ͏ʹ͠·͢ɻ”
    CloudNative != kubernetes

    View Slide

  20. ιϦϡʔγϣϯ
    • CloundNativeBuildpacksͰԣஅతͳίϯςφϏϧυΛఏڙ͢Δ

    • tecktoncd/pipelineͰৗʹmasterͳঢ়ଶͳίϯςφΠϝʔδΛ࡞੒

    • ingressɺexternal-dnsɺcert-managerΛར༻ͯ͠։ൃऀ͝ͱͷ։ൃ؀ڥΛ
    ࡞Δ

    • TelepresenceΛར༻ͯ͠ɺΫϥ΢υ্ͷϦιʔεͱڠಇͰ͖Δ։ൃ؀ڥͷ
    ࣮ݱ

    View Slide

  21. ιϦϡʔγϣϯ
    • CloundNativeBuildpacksͰԣஅతͳίϯςφϏϧυΛఏڙ͢Δ
    • tecktoncd/pipelineͰৗʹmasterͳঢ়ଶͳίϯςφΠϝʔδΛ࡞੒

    • ingressɺexternal-dnsɺcert-managerΛར༻ͯ͠։ൃऀ͝ͱͷ։ൃ؀ڥΛ
    ࡞Δ

    • TelepresenceΛར༻ͯ͠ɺΫϥ΢υ্ͷϦιʔεͱڠಇͰ͖Δ։ൃ؀ڥͷ
    ࣮ݱ

    View Slide

  22. CloudNativeBuildpacks

    View Slide

  23. Buildpack
    • heroku΍CloudFoundryͰ։ൃ͞Ε͖ͯͨίϯςφ

    Ϗϧυͷ࢓૊Έ

    • ΞϓϦέʔγϣϯίʔυΛݩʹίϯςφΠϝʔδΛੜ੒

    • ྫ:composer.json͕͋Ε͹PHPΛΠϯετʔϧ͢Δ

    View Slide

  24. Buildpack with heroku
    https://jp.heroku.com/elements/buildpacks

    View Slide

  25. #VJME1BDLͷ՝୊
    IFSPLV΍$MPVE'PVOESZͷ࣮૷Ͱ
    ૬ޓʹඍົʹಈ͔ͳ͍͜ͱ͕͋Δ

    View Slide

  26. CloudNative Buildpacks(CNB)
    • 2018೥ʹPivotalͱherokuʹΑͬͯ։࢝

    • CNCF CloudNative Sandbox΁௥Ճ

    • ݱঢ়͸Version̏ͷSpec͕ϦϦʔε͞Ε͍ͯΔ

    • ඪ४Խ͞ΕͨSpecʹج͖ͮOCIΠϝʔδΛ࡞੒Մೳ

    View Slide

  27. Ϗϧυͷ࣮ߦ֓ཁ
    CNBͷू߹ମͱ΋ݴ͑ΔɺϏϧυ༻ͷΠϝʔδΛ࡞੒͠ɺίϯςφΠϝʔ
    δΛϏϧυ͢Δ
    builder image
    PHP-CNB
    Ruby-CNB
    RubyͷϦϙδτϦ
    Ruby࣮ߦ

    Πϝʔδ͕
    ര஀

    View Slide

  28. CNBΛ༻͍ͨίϯςφϏϧυ
    PSHBQJ
    QIQ
    PSHXXX
    1)1
    PSHJOGSB
    1)1
    PSHCMPH
    1)1
    % pack build --builder xxxx/tech-php-builder:0.0.1
    ΞϓϦέʔγϣϯίʔυͷϦϙδτϦͰίϚϯυΛଧ͚ͭͩͰ

    ͦͷΞϓϦέʔγϣϯ͕ಈ͘ίϯςφΠϝʔδ͕ੜ੒͞ΕΔ

    View Slide

  29. CNBͷ࣮૷֓ཁ
    Ruby-CNB
    detect
    build
    RubyΛΠϯετʔϧ͢Δ͔ʁ
    όʔδϣϯ͸ͳʹ͔ʁ
    ґଘؔ܎͸ͳʹ͔ʁ
    detect࣌ʹऔಘͨ͠৘ใΛݩʹ
    RubyΛίϯύΠϧͨ͠ΓGemΛೖΕͨΓ

    View Slide

  30. detect
    • CNB͝ͱʹdetect͕ίʔϧ͞ΕΔ

    • ऴྃίʔυͰ͜ͷCNBΛར༻͢Δ͔Ͳ͏͔
    Λޙଓͷbuild΁఻ൖ͢Δ

    • ޙଓ΁ͷґଘؔ܎ͷఆٛ͸
    YAML
    #!/bin/sh
    if [ -f Gemfile ]; then
    echo "Ruby Buildpack"
    exit 0
    else
    exit 1
    fi

    View Slide

  31. build
    #!/bin/sh
    apt install ruby
    if [ $openssl = "1.1" ]then;
    apt install opnessl-1.1
    else
    apt install openssl
    fi
    bundle install
    • detectϑΣʔζͰར༻͢Δͱ൑ఆ͞Εͨ
    CNBͷbuild͕ݺͼग़͞ΕΔ

    • buildϑΣʔζͰ͸ίϯςφʹඞཁͳࢿ࢈ͷ
    ΠϯετʔϧͳͲΛϓϥΨϒϧʹఆٛ͢Δ
    ͜ͱ͕Ͱ͖Δ

    View Slide

  32. CNBͷ࣮ߦ֓ཁ
    ruby-cnb
    bin/detect
    bin/build
    php-cnb
    bin/detect
    bin/build
    node-cnb
    bin/detect
    bin/build
    lifecycle
    Ruby͸Πϯετʔϧ͢Δʁ
    PHPίϯύΠϧ͠·͢Ͷ
    lifecycleͱ͍͏CNBͷSpec࣮૷͕ɺͦΕͧΕͷCNBͷґଘղܾΛ

    ͠ͳ͕ΒͦΕͧΕͷϑΣʔζΛ࣮ߦ

    View Slide

  33. CNBͷ։ൃ
    • ϝΠϯͷ։ൃݴޠ͸Golang

    • ݴޠܥͷCNB͸CloudFoundry͕ଟ͘OSSԽ͓ͯ͠Γɺࣗ෼Ͱ࣮૷͢Δ͜
    ͱ͸ຆͲͳ͍

    • طଘCNBΛ૊Έ߹ΘͤΔ͚ͩͰɺ΄ͱΜͲͷΠϝʔδ͸࡞ΕΔ

    View Slide

  34. Dockerfileͱͷҧ͍

    View Slide

  35. DockerfileͱCNBͷൺֱ
    • SecurityFixͳͲͷରԠ

    • ҙࢥܾఆͷλΠϛϯάͷҧ͍ʹΑΔӡ༻ͷॊೈੑ

    View Slide

  36. SecurityFix
    Dockerfile CNB
    w#VJME*NBHFΛߋ৽͢Δ
    w%PDLFSpMF͝ͱʹؤுΔ
    w#BTF*NBHFΛఆٛ͢Δ

    View Slide

  37. ࢄࡏ͕ͪ͠ͳDockerfile
    PSHBQJ
    %PDLFSpMF
    PSHXXX
    %PDLFSpMF
    PSHJOGSB
    %PDLFSpMF
    PSHVTFS
    %PDLFSpMF
    PSHCMPH
    %PDLFSpMF
    ͢΂ͯͷ%PDLFSpMFͷߋ৽ٴͼɺ

    ࣮ଶ֬ೝ͕ඞཁ

    View Slide

  38. CNBΛ༻͍ͨίϯςφϏϧυ(࠶ܝ)
    PSHBQJ
    QIQ
    PSHXXX
    1)1
    PSHJOGSB
    1)1
    PSHCMPH
    1)1
    % pack build --builder xxxx/tech-php-builder:0.0.1
    Ϗϧυ༻ͷϓϩάϥϜ CVJMEFSJNBHF
    Λߋ৽ͯ͠΍Ε͹
    ͋ͱ͸͢΂ͯϓϥΨϒϧʹॲཧ͞ΕΔ

    View Slide

  39. ҙࢥܾఆλΠϛϯά͕ܾఆతʹҧ͏
    Dockerfile CNB
    DockerfileʹOpenSSL1.0Λ࢖͏ͱॻ͘
    docker build ※
    CNBʹɺ؀ڥʹΑͬͯOpenSSL1.1ɺ1.0Λ
    ࢖͏ίʔυΛॻ͘
    pack buid
    OpenSSL 1.0Λ࢖͏Πϝʔδര஀
    OpenSSL 1.1ɺ1.0ͷར༻͕ΞϓϦέʔγϣ
    ϯίʔυΛج४ͱͨ͠ͰҙࢥܾఆʹΑͬͯ
    બ͹Εͨϝʔδര஀
    ※ɹϏϧυ࣌ʹ؀ڥม਺ͳͲͰڍಈΛมߋ͢Δ͜ͱ͸΍Ζ͏ͱࢥ͑͹Ͱ͖Δ

    View Slide

  40. Dockerfile΋CNB΋͍ͣΕ΋
    એݴతͰ͸͋Δ͕ɺCNBͷ΄͏͕
    ΑΓॊೈʹίϯςφϏϧυΛߦ͑Δ͠
    ந৅౓ͷߴ͍࣮૷͕ϝϯςφϯε͠΍͍͢ܗͰ
    ࣮૷Ͱ͖Δ

    View Slide

  41. ΞϓϦέʔγϣϯΛݩʹΠϝʔδ࡞ΕΔ
    ͳΒ͹ɺΞϓϦέʔγϣϯ͕
    มߋ͞ΕͨΒࣗಈͰΠϝʔδ࡞Ε͍ͨ

    View Slide

  42. ιϦϡʔγϣϯ
    • CloundNativeBuildpacksͰԣஅతͳίϯςφϏϧυΛఏڙ͢Δ

    • tecktoncd/pipelineͰৗʹmasterͳঢ়ଶͳίϯςφΠϝʔδΛ࡞੒
    • ingressɺexternal-dnsɺcert-managerΛར༻ͯ͠։ൃऀ͝ͱͷ։ൃ؀ڥΛ
    ࡞Δ

    • TelepresenceΛར༻ͯ͠ɺΫϥ΢υ্ͷϦιʔεͱڠಇͰ͖Δ։ൃ؀ڥͷ
    ࣮ݱ

    View Slide

  43. tecktoncd/pipeline
    • knative/buildͷਖ਼ࣜͳޙଓϓϩδΣΫτ

    • k8s্ͰύΠϓϥΠϯΛએݴతͳύΠϓϥΠϯΛ࣮ߦ

    • ެ։͞Ε͍ͯΔϨγϐ΋๛෋

    View Slide

  44. tecktoncd/catalogʹ͍Ζ͍Ζͳαϯϓϧ͕͋Δ

    View Slide

  45. tecktoncd/pipeline֓ཁ
    Pipeline1
    Task1
    Task2
    Task3
    Pipeline2
    Task4
    Task5
    Task6
    Pipeline Run
    parameter parameter
    Task͝ͱʹΞ΢τϓοτΛ
    ޙଓʹҾ͖౉ͤΔ
    5BTLɺ1JQFMJOFͱҙຯͷ͋Δ୯ҐͰϦιʔεΛఆٛՄೳ
    ͦΕʹΑΓ࠶ར༻Ͱ͖ΔύΠϓϥΠϯ͕࣮ݱͰ͖Δ

    View Slide

  46. CNDύΠϓϥΠϯ
    Task1
    ΞϓϦέʔγϣϯΛݩʹɺ

    ࠷৽ͷΠϝʔδΛϏϧυͯ͠
    Private Repo΁push
    Task2
    ࠷৽ͷΠϝʔδΛk8sʹ

    σϓϩΠ͢Δ
    Pipeline Run
    parameter parameter
    repository: lolipop/www
    image: lolipop-www
    commit_hash: xxxxxxxx
    ϦϙδτϦ͕૿͑ͯ΋ɺ1JQFMJOF3VOΛ௥Ճ͢Δ͚ͩͰ
    ࠷৽ͷΠϝʔδ͕࡞੒͞ΕΔ

    View Slide

  47. Argo CDΛ༻͍ͨύΠϓϥΠϯ࣮ߦ
    • GitOpsͳϫʔΫϑϩʔΛ࣮ݱ͢ΔCDιϑτ΢ΣΞ

    • GitHubͳͲͷ։ൃϓϥοτϑΥʔϜΛ؂ࢹ͠ɺࠩ෼͕͋Ε͹ఆΊΒΕͨ

    ఆٛʹج͍ͮͯσϓϩΠ

    • σϓϩΠ͸helm,kustomize,ksonnetͳͲͰఆ͕ٛՄೳ

    • ϦϙδτϦͷࠩ෼͕͋Ε͹ݕ஌ͯࣗ͠ಈͰऩଋ

    • CI/CDΛ෼཭͢Δ͜ͱͰɺCI͕ංେʹͳΔͷΛආ͚Δ

    View Slide

  48. View Slide

  49. Argo CDͷpluginػߏΛར༻͢Δ
    • Argo CD͸ϚχϑΣετΛσϓϩΠ͢Δͱ͍͏ػೳΛఏڙ

    • ϓϥάΠϯΛར༻͢Δ͜ͱͰϚχϑΣετͷద༻લʹॲཧΛհࡏͤ͞Δ͜
    ͱ͕Ͱ͖Δ

    • ϓϥάΠϯΛద༻લʹGitͷCommit hashΛϚχϑΣετʹؚΉॲཧΛ

    ௥Ճ͢Δ

    View Slide

  50. ͳͥ͜ͷΑ͏ͳ͜ͱ͕

    ඞཁͳͷ͔ʁ

    View Slide

  51. k8sͰ͋Δ͕Ώ͑ඞཁ
    • k8s͸એݴతͳϦιʔεఆٛʹج͖ͮऩଋ͢Δ

    • PipelineϦιʔεͷมԽ͕ͳ͍৔߹ɺPipeline͕࣮ߦ͞Εͳ͍

    →Pipelineͷ໊લ΍Image໊ʹGitͷCommit hashΛຒΊࠐΜͰ࣮ߦͤ͞Δ

    View Slide

  52. ͜͜·Ͱͷ·ͱΊ
    NBTUFSNFSHF BQQMZNBOJGFTU
    QPMMJOH CVJMEQVTIEFQMPZ

    View Slide

  53. ιϦϡʔγϣϯ
    • CloundNativeBuildpacksͰԣஅతͳίϯςφϏϧυΛఏڙ͢Δ

    • tecktoncd/pipelineͰৗʹmasterͳঢ়ଶͳίϯςφΠϝʔδΛ࡞੒

    • ingressɺexternal-dnsɺcert-managerΛར༻ͯ͠։ൃऀ͝ͱͷ։ൃ
    ؀ڥΛ࡞Δ
    • TelepresenceΛར༻ͯ͠ɺΫϥ΢υ্ͷϦιʔεͱڠಇͰ͖Δ։ൃ؀ڥͷ
    ࣮ݱ

    View Slide

  54. inside k8s
    k8s
    pod
    service
    ingress
    The internet
    pod
    service
    pod
    service
    each user
    • Ϣʔβʔ͝ͱͷϦιʔε͸ɺKustomizeΛར
    ༻ͯ͠ஔ׵ͯ͠deploymentsΛapply

    • ໊લղܾʹ͸external dnsΛར༻

    • ূ໌ॻͷൃߦ͸cert-managerΛར༻

    • ingressʹPublicIPΛ෇༩͠ɺ֎෦͔ΒͷΞ
    ΫηεੑΛ֬อ
    ip

    View Slide

  55. external-dns
    ---
    apiVersion: v1
    kind: Service
    metadata:
    annotations:
    external-dns.alpha.kubernetes.io/hostname: lolipop-www.example.dev
    service
    Any Backend
    https://github.com/kubernetes-sigs/external-dns
    external-dns-controller

    View Slide

  56. cert-manager
    https://github.com/jetstack/cert-manager
    cert-manager-controller
    Any DNS Backend
    Certificate
    challenge
    ূ໌ॻͷߋ৽΋ࣗಈͰߦͬͯ͘ΕΔͷͰ
    %/4ͱ૊Έ߹ΘͤΔͱϚωʔδυϫΠϧυΧʔυূ໌ॻ͕ൃߦͰ͖Δ

    View Slide

  57. cert-manager
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
    name: nginx-ingress-controller
    spec:
    [snip]
    containers:
    - args:
    - /nginx-ingress-controller
    - "--default-backend-service=$(POD_NAMESPACE)/default-http-backend"
    - "--default-ssl-certificate=$(POD_NAMESPACE)/cert-wildcard"
    OHJOYJOHSFTTͷҾ਺ʹอଘͨ͠4FDSFU໊Λ
    ౉͢͜ͱͰূ໌ॻΛར༻Մೳ

    View Slide

  58. طଘ։ൃ؀ڥͱͷซଘ
    ࣗࣾαʔόϧʔϜʹ%#ͳͲͷڞ༗Ϧιʔε͕Ұ෦ଘࡏ͢ΔͨΊ
    /HJOYͷ-ϓϩΩγ71/Ͱซଘ
    pod
    pod
    Nginx
    VPN طଘ؀ڥ

    View Slide

  59. Ϣʔβʔ͝ͱͷ։ൃ؀ڥ
    • ৗʹ࠷৽ͷmaster͕σϓϩΠ͞ΕΔ

    • HTTPSͰ҉߸Խ

    • k8s্Ͱಈ͘ͷͰࣗݾम෮

    View Slide

  60. ιϦϡʔγϣϯ
    • CloundNativeBuildpacksͰԣஅతͳίϯςφϏϧυΛఏڙ͢Δ

    • tecktoncd/pipelineͰৗʹmasterͳঢ়ଶͳίϯςφΠϝʔδΛ࡞੒

    • ingressɺexternal-dnsɺcert-managerΛར༻ͯ͠։ൃऀ͝ͱͷ։ൃ؀ڥΛ
    ࡞Δ

    • TelepresenceΛར༻ͯ͠ɺΫϥ΢υ্ͷϦιʔεͱڠಇͰ͖Δ։ൃ؀
    ڥͷ࣮ݱ

    View Slide

  61. Telepresence
    XXX
    VTFS BQJ
    VTFS
    ඞཁͳαʔϏε͚ͩखݩͰىಈͯ͠ɺ
    ࢒Γ͸,VCFSOFUFTͷϦιʔεΛ࢖͏

    View Slide

  62. Telepresence
    https://www.telepresence.io/
    $ telepresence --swap-deployment hello-world --docker-run --rm -it -v $(pwd):/
    usr/src/app hello-dev
    ίϚϯυҰͭͰखݩͷϓϩηεͱLTΛ
    ૒ํ޲ʹϙʔτϑΥϫʔυ͢Δ͜ͱ͕Ͱ͖Δ

    View Slide

  63. ൃੜͨ͠ࣄ৅1
    XXX
    VTFS BQJ
    VTFS
    5FMFQSFTFODFΛڧ੍ऴྃ͢Δͱɺ
    ։ൃ؀ڥ͕ݟ͑ͳ͘ͳΔ

    View Slide

  64. ൃੜͨ͠ࣄ৅2
    XXX
    VTFS BQJ
    5FMFQSFTFODFΛར༻தʹ
    ୭͔͕NBTUFSNFSHF͢ΔͱଟॏىಈʹͳΔ
    VTFS
    NBTUFS

    View Slide

  65. ࣗݾम෮.sh
    #!/bin/bash
    set -x
    while true;
    do
    deployments=`kubectl -n example get deployment -o json | jq -r '.items[] | select(.spec.replicas == 0) | .metadata.name'`
    if [ -n "$deployments" ]; then
    echo "$deployments" | while read line
    do
    (curl -o /dev/null -s -w '%{http_code}\n' https://$line.example.dev |grep 502) && \
    (kubectl -n example delete deployments $(kubectl -n example get deployments | grep "$line-" | awk '{print $1 }') && \
    kubectl -n example scale deployment.apps/$line --replicas=1)
    done
    fi
    sleep 10
    # ಉ͡deployments͕ෳ਺͋Δ͔ͭɺૄ௨ੑ͕͋ΔͳΒ͹ɺͦΕ͸telepresence࢖༻தʹmaster͕σϓϩΠ͞ΕͨՄೳੑ͕ߴ͍
    deployments=`kubectl -n example get deployment -o json | jq -r '.items[] | select(.spec.replicas == 1) | .metadata.name' | sort`
    echo "$deployments" | while read line
    do
    ([ `echo "$deployments" | grep $line | wc -l` -ge 2 ] && !(curl -o /dev/null -s -w '%{http_code}\n' https://
    $line.example.dev |grep 502)) && \
    kubectl -n example scale deployment.apps/$line --replicas=0
    done
    done

    View Slide

  66. ։ൃ؀ڥΛࢧ͑Δཁૉ
    • HashiCorp VaultʹΑΔൿಗ৘ใ؅ཧ

    • ݖݶ؅ཧ͸GitHub EnterpriseΛόοΫΤϯυʹར༻

    View Slide

  67. ։ൃ؀ڥΛk8sʹҠߦ͢Δҙٛ
    • VM to Container͸ඞͣ͠΋༏ઌ౓ߴ͘΍Δ΂͖࡞ۀͰ͸ͳ͍έʔε΋ԟʑ
    ʹͯ͋͠Δ

    • k8s͸ΠϯϑϥʹҰͭͷந৅ϨΠϠʔͱͯ͠ࠓޙଘࡏ͠ଓ͚ΔՄೳੑ͕ߴ
    ͘ɺٕज़తͳΩϟονΞοϓ͸ඞਢ

    • ։ൃऀɺσβΠφʔ͕Ұ൪ଟ͘৮ΕΔ։ൃ؀ڥΛk8sʹ͢Δ͜ͱͰٕज़త
    ͳΩϟονΞοϓΛͭͭ͠ɺ։ൃ؀ڥ͕ރΕΕ͹ɺࣗવͱຊ൪Ҡߦ͠΍͢
    ͘ͳΔ

    View Slide

  68. ࠓ೔࿩ͨ͜͠ͱ
    • طଘͷෳ਺ͷݴޠόʔδϣϯΛ๊͑ΔϖύϘʹ͸CNBʹΑΔϓϥΨϒϧͳ
    ίϯςφϏϧυ͕దԠͨ͠

    • tecktoncd/pipelineΛར༻͢Δ͜ͱͰɺk8s nativeͳίϯςφϏϧυ͕࣮ݱ
    Ͱ͖Δ

    • telepresenceΛ༻͍ΔͱϩʔΧϧ։ൃ؀ڥͱk8sΛγʔϜϨεʹѻ͑Δ

    • όνΣϥʔ3ͷ࠷ޙల։ʹԶ͸ೲಘ͍ͯ͠ͳ͍

    View Slide

  69. ँࣙ
    • ͜ͷࢿྉͰड़΂ͨ։ൃ؀ڥΛࣄۀ෦ͷϝϯόʔʹల։͢Δʹ౰ͨΓɺಉ྅
    ͷ@takumakume͞Μ͕ڧ͘ਚྗͯ͘͠Ε·ͨ͠

    • ϖύϘͷΦϯϓϨk8sͷ։ൃΛ΄΅ҰਓͰϦʔυͯ͘͠ΕΔ@r_takaishiʹ
    ͸಄্͕͕Γ·ͤΜ

    View Slide

  70. Thanks @hiboma @zipper @kenchan

    View Slide

  71. View Slide

  72. ࠷৽ͷ࠾༻৘ใΛνΣοΫˠ !QC@SFDSVJU
    Ұॹʹ/BUJWF&OHMJTIʹͳΒͳ͍͔ʁ

    View Slide