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

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

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

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

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

1b838da2065660793d5b26f2cdc32de7?s=128

Kazuhiko Yamashita

November 28, 2019
Tweet

Transcript

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

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

  3. 45/4 -JOVY/444FSWFS TUOTKQ

  4. 45/4

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

  6. None
  7. None
  8. ࠓ೔࿩͢͜ͱ • ϖύϘͷϗεςΟϯάࣄۀʹ͓͚Δ։ൃ؀ڥͷ՝୊ • CloudNativeBuildPacksΛར༻ͨ͠ίϯςφΠϝʔδͷ࡞੒ • tecktoncd/pipelineΛ༻͍ͨίϯςφϏϧυύΠϓϥΠϯ • TelepresenceΛར༻ͨ͠ϦϞʔτ։ൃ؀ڥ •

    όνΣϥʔ3ΛݟऴΘͬͨײ૝ɺਅ࣮ͷѪͱ͸ʁ
  9. ϖύϘͷ։ൃ؀ڥʹ͓͚Δ՝୊

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

  11. ։ൃ؀ڥ XXX VTFS BQJ

  12. ྺ࢙ • ϩϦϙοϓʂϨϯλϧαʔόαʔϏε͸ࠓ೥18೥໨ • PHPxʙPHP7·Ͱ͕ݱଘ • JSͷύοέʔδ΋࣌୅ʹԠͨ͡΋ͷ͕ͦΕͳΓʹϚτϦΫεతʹଘࡏ

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

  14. ʮٱ͠ͿΓʹϜʔϜʔͷ
 σβΠϯ΍Δͧʙʯ

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

  16. ׂΓࠐΈ࣌ؒɺ
 ϔϧϓͷ଴ͪ࣌ؒΛͳΜͱ͔͍ͨ͠

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

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

  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
  20. ιϦϡʔγϣϯ • CloundNativeBuildpacksͰԣஅతͳίϯςφϏϧυΛఏڙ͢Δ • tecktoncd/pipelineͰৗʹmasterͳঢ়ଶͳίϯςφΠϝʔδΛ࡞੒ • ingressɺexternal-dnsɺcert-managerΛར༻ͯ͠։ൃऀ͝ͱͷ։ൃ؀ڥΛ ࡞Δ • TelepresenceΛར༻ͯ͠ɺΫϥ΢υ্ͷϦιʔεͱڠಇͰ͖Δ։ൃ؀ڥͷ

    ࣮ݱ
  21. ιϦϡʔγϣϯ • CloundNativeBuildpacksͰԣஅతͳίϯςφϏϧυΛఏڙ͢Δ • tecktoncd/pipelineͰৗʹmasterͳঢ়ଶͳίϯςφΠϝʔδΛ࡞੒ • ingressɺexternal-dnsɺcert-managerΛར༻ͯ͠։ൃऀ͝ͱͷ։ൃ؀ڥΛ ࡞Δ • TelepresenceΛར༻ͯ͠ɺΫϥ΢υ্ͷϦιʔεͱڠಇͰ͖Δ։ൃ؀ڥͷ

    ࣮ݱ
  22. CloudNativeBuildpacks

  23. Buildpack • heroku΍CloudFoundryͰ։ൃ͞Ε͖ͯͨίϯςφ
 Ϗϧυͷ࢓૊Έ • ΞϓϦέʔγϣϯίʔυΛݩʹίϯςφΠϝʔδΛੜ੒ • ྫ:composer.json͕͋Ε͹PHPΛΠϯετʔϧ͢Δ

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

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

  26. CloudNative Buildpacks(CNB) • 2018೥ʹPivotalͱherokuʹΑͬͯ։࢝ • CNCF CloudNative Sandbox΁௥Ճ • ݱঢ়͸Version̏ͷSpec͕ϦϦʔε͞Ε͍ͯΔ

    • ඪ४Խ͞ΕͨSpecʹج͖ͮOCIΠϝʔδΛ࡞੒Մೳ
  27. Ϗϧυͷ࣮ߦ֓ཁ CNBͷू߹ମͱ΋ݴ͑ΔɺϏϧυ༻ͷΠϝʔδΛ࡞੒͠ɺίϯςφΠϝʔ δΛϏϧυ͢Δ builder image PHP-CNB Ruby-CNB RubyͷϦϙδτϦ Ruby࣮ߦ
 Πϝʔδ͕

    ര஀
  28. CNBΛ༻͍ͨίϯςφϏϧυ PSHBQJ QIQ PSHXXX 1)1 PSHJOGSB 1)1 PSHCMPH 1)1 %

    pack build <image name> --builder xxxx/tech-php-builder:0.0.1 ΞϓϦέʔγϣϯίʔυͷϦϙδτϦͰίϚϯυΛଧ͚ͭͩͰ ͦͷΞϓϦέʔγϣϯ͕ಈ͘ίϯςφΠϝʔδ͕ੜ੒͞ΕΔ
  29. CNBͷ࣮૷֓ཁ Ruby-CNB detect build RubyΛΠϯετʔϧ͢Δ͔ʁ όʔδϣϯ͸ͳʹ͔ʁ ґଘؔ܎͸ͳʹ͔ʁ detect࣌ʹऔಘͨ͠৘ใΛݩʹ RubyΛίϯύΠϧͨ͠ΓGemΛೖΕͨΓ

  30. detect • CNB͝ͱʹdetect͕ίʔϧ͞ΕΔ • ऴྃίʔυͰ͜ͷCNBΛར༻͢Δ͔Ͳ͏͔ Λޙଓͷbuild΁఻ൖ͢Δ • ޙଓ΁ͷґଘؔ܎ͷఆٛ͸ YAML #!/bin/sh

    if [ -f Gemfile ]; then echo "Ruby Buildpack" exit 0 else exit 1 fi
  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ϑΣʔζͰ͸ίϯςφʹඞཁͳࢿ࢈ͷ ΠϯετʔϧͳͲΛϓϥΨϒϧʹఆٛ͢Δ ͜ͱ͕Ͱ͖Δ
  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ͷґଘղܾΛ ͠ͳ͕ΒͦΕͧΕͷϑΣʔζΛ࣮ߦ
  33. CNBͷ։ൃ • ϝΠϯͷ։ൃݴޠ͸Golang • ݴޠܥͷCNB͸CloudFoundry͕ଟ͘OSSԽ͓ͯ͠Γɺࣗ෼Ͱ࣮૷͢Δ͜ ͱ͸ຆͲͳ͍ • طଘCNBΛ૊Έ߹ΘͤΔ͚ͩͰɺ΄ͱΜͲͷΠϝʔδ͸࡞ΕΔ

  34. Dockerfileͱͷҧ͍

  35. DockerfileͱCNBͷൺֱ • SecurityFixͳͲͷରԠ • ҙࢥܾఆͷλΠϛϯάͷҧ͍ʹΑΔӡ༻ͷॊೈੑ

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

  37. ࢄࡏ͕ͪ͠ͳDockerfile PSHBQJ %PDLFSpMF PSHXXX %PDLFSpMF PSHJOGSB %PDLFSpMF PSHVTFS %PDLFSpMF PSHCMPH

    %PDLFSpMF ͢΂ͯͷ%PDLFSpMFͷߋ৽ٴͼɺ
 ࣮ଶ֬ೝ͕ඞཁ
  38. CNBΛ༻͍ͨίϯςφϏϧυ(࠶ܝ) PSHBQJ QIQ PSHXXX 1)1 PSHJOGSB 1)1 PSHCMPH 1)1 %

    pack build <image name> --builder xxxx/tech-php-builder:0.0.1 Ϗϧυ༻ͷϓϩάϥϜ CVJMEFSJNBHF Λߋ৽ͯ͠΍Ε͹ ͋ͱ͸͢΂ͯϓϥΨϒϧʹॲཧ͞ΕΔ
  39. ҙࢥܾఆλΠϛϯά͕ܾఆతʹҧ͏ Dockerfile CNB DockerfileʹOpenSSL1.0Λ࢖͏ͱॻ͘ docker build ※ CNBʹɺ؀ڥʹΑͬͯOpenSSL1.1ɺ1.0Λ ࢖͏ίʔυΛॻ͘ pack

    buid OpenSSL 1.0Λ࢖͏Πϝʔδര஀ OpenSSL 1.1ɺ1.0ͷར༻͕ΞϓϦέʔγϣ ϯίʔυΛج४ͱͨ͠ͰҙࢥܾఆʹΑͬͯ બ͹Εͨϝʔδര஀ ※ɹϏϧυ࣌ʹ؀ڥม਺ͳͲͰڍಈΛมߋ͢Δ͜ͱ͸΍Ζ͏ͱࢥ͑͹Ͱ͖Δ
  40. Dockerfile΋CNB΋͍ͣΕ΋ એݴతͰ͸͋Δ͕ɺCNBͷ΄͏͕ ΑΓॊೈʹίϯςφϏϧυΛߦ͑Δ͠ ந৅౓ͷߴ͍࣮૷͕ϝϯςφϯε͠΍͍͢ܗͰ ࣮૷Ͱ͖Δ

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

  42. ιϦϡʔγϣϯ • CloundNativeBuildpacksͰԣஅతͳίϯςφϏϧυΛఏڙ͢Δ • tecktoncd/pipelineͰৗʹmasterͳঢ়ଶͳίϯςφΠϝʔδΛ࡞੒ • ingressɺexternal-dnsɺcert-managerΛར༻ͯ͠։ൃऀ͝ͱͷ։ൃ؀ڥΛ ࡞Δ • TelepresenceΛར༻ͯ͠ɺΫϥ΢υ্ͷϦιʔεͱڠಇͰ͖Δ։ൃ؀ڥͷ

    ࣮ݱ
  43. tecktoncd/pipeline • knative/buildͷਖ਼ࣜͳޙଓϓϩδΣΫτ • k8s্ͰύΠϓϥΠϯΛએݴతͳύΠϓϥΠϯΛ࣮ߦ • ެ։͞Ε͍ͯΔϨγϐ΋๛෋

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

  45. tecktoncd/pipeline֓ཁ Pipeline1 Task1 Task2 Task3 Pipeline2 Task4 Task5 Task6 Pipeline

    Run parameter parameter Task͝ͱʹΞ΢τϓοτΛ ޙଓʹҾ͖౉ͤΔ 5BTLɺ1JQFMJOFͱҙຯͷ͋Δ୯ҐͰϦιʔεΛఆٛՄೳ ͦΕʹΑΓ࠶ར༻Ͱ͖ΔύΠϓϥΠϯ͕࣮ݱͰ͖Δ
  46. CNDύΠϓϥΠϯ Task1 ΞϓϦέʔγϣϯΛݩʹɺ
 ࠷৽ͷΠϝʔδΛϏϧυͯ͠ Private Repo΁push Task2 ࠷৽ͷΠϝʔδΛk8sʹ
 σϓϩΠ͢Δ Pipeline

    Run parameter parameter repository: lolipop/www image: lolipop-www commit_hash: xxxxxxxx ϦϙδτϦ͕૿͑ͯ΋ɺ1JQFMJOF3VOΛ௥Ճ͢Δ͚ͩͰ ࠷৽ͷΠϝʔδ͕࡞੒͞ΕΔ
  47. Argo CDΛ༻͍ͨύΠϓϥΠϯ࣮ߦ • GitOpsͳϫʔΫϑϩʔΛ࣮ݱ͢ΔCDιϑτ΢ΣΞ • GitHubͳͲͷ։ൃϓϥοτϑΥʔϜΛ؂ࢹ͠ɺࠩ෼͕͋Ε͹ఆΊΒΕͨ
 ఆٛʹج͍ͮͯσϓϩΠ • σϓϩΠ͸helm,kustomize,ksonnetͳͲͰఆ͕ٛՄೳ •

    ϦϙδτϦͷࠩ෼͕͋Ε͹ݕ஌ͯࣗ͠ಈͰऩଋ • CI/CDΛ෼཭͢Δ͜ͱͰɺCI͕ංେʹͳΔͷΛආ͚Δ
  48. None
  49. Argo CDͷpluginػߏΛར༻͢Δ • Argo CD͸ϚχϑΣετΛσϓϩΠ͢Δͱ͍͏ػೳΛఏڙ • ϓϥάΠϯΛར༻͢Δ͜ͱͰϚχϑΣετͷద༻લʹॲཧΛհࡏͤ͞Δ͜ ͱ͕Ͱ͖Δ • ϓϥάΠϯΛద༻લʹGitͷCommit

    hashΛϚχϑΣετʹؚΉॲཧΛ
 ௥Ճ͢Δ
  50. ͳͥ͜ͷΑ͏ͳ͜ͱ͕
 ඞཁͳͷ͔ʁ

  51. k8sͰ͋Δ͕Ώ͑ඞཁ • k8s͸એݴతͳϦιʔεఆٛʹج͖ͮऩଋ͢Δ • PipelineϦιʔεͷมԽ͕ͳ͍৔߹ɺPipeline͕࣮ߦ͞Εͳ͍
 →Pipelineͷ໊લ΍Image໊ʹGitͷCommit hashΛຒΊࠐΜͰ࣮ߦͤ͞Δ

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

  53. ιϦϡʔγϣϯ • CloundNativeBuildpacksͰԣஅతͳίϯςφϏϧυΛఏڙ͢Δ • tecktoncd/pipelineͰৗʹmasterͳঢ়ଶͳίϯςφΠϝʔδΛ࡞੒ • ingressɺexternal-dnsɺcert-managerΛར༻ͯ͠։ൃऀ͝ͱͷ։ൃ ؀ڥΛ࡞Δ • TelepresenceΛར༻ͯ͠ɺΫϥ΢υ্ͷϦιʔεͱڠಇͰ͖Δ։ൃ؀ڥͷ

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

  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໊Λ ౉͢͜ͱͰূ໌ॻΛར༻Մೳ
  58. طଘ։ൃ؀ڥͱͷซଘ ࣗࣾαʔόϧʔϜʹ%#ͳͲͷڞ༗Ϧιʔε͕Ұ෦ଘࡏ͢ΔͨΊ /HJOYͷ-ϓϩΩγ 71/Ͱซଘ pod pod Nginx VPN طଘ؀ڥ

  59. Ϣʔβʔ͝ͱͷ։ൃ؀ڥ • ৗʹ࠷৽ͷmaster͕σϓϩΠ͞ΕΔ • HTTPSͰ҉߸Խ • k8s্Ͱಈ͘ͷͰࣗݾम෮

  60. ιϦϡʔγϣϯ • CloundNativeBuildpacksͰԣஅతͳίϯςφϏϧυΛఏڙ͢Δ • tecktoncd/pipelineͰৗʹmasterͳঢ়ଶͳίϯςφΠϝʔδΛ࡞੒ • ingressɺexternal-dnsɺcert-managerΛར༻ͯ͠։ൃऀ͝ͱͷ։ൃ؀ڥΛ ࡞Δ • TelepresenceΛར༻ͯ͠ɺΫϥ΢υ্ͷϦιʔεͱڠಇͰ͖Δ։ൃ؀

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

  62. Telepresence https://www.telepresence.io/ $ telepresence --swap-deployment hello-world --docker-run --rm -it -v

    $(pwd):/ usr/src/app hello-dev ίϚϯυҰͭͰखݩͷϓϩηεͱLTΛ ૒ํ޲ʹϙʔτϑΥϫʔυ͢Δ͜ͱ͕Ͱ͖Δ
  63. ൃੜͨ͠ࣄ৅1 XXX VTFS BQJ VTFS 5FMFQSFTFODFΛڧ੍ऴྃ͢Δͱɺ ։ൃ؀ڥ͕ݟ͑ͳ͘ͳΔ

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

  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
  66. ։ൃ؀ڥΛࢧ͑Δཁૉ • HashiCorp VaultʹΑΔൿಗ৘ใ؅ཧ • ݖݶ؅ཧ͸GitHub EnterpriseΛόοΫΤϯυʹར༻

  67. ։ൃ؀ڥΛk8sʹҠߦ͢Δҙٛ • VM to Container͸ඞͣ͠΋༏ઌ౓ߴ͘΍Δ΂͖࡞ۀͰ͸ͳ͍έʔε΋ԟʑ ʹͯ͋͠Δ • k8s͸ΠϯϑϥʹҰͭͷந৅ϨΠϠʔͱͯ͠ࠓޙଘࡏ͠ଓ͚ΔՄೳੑ͕ߴ ͘ɺٕज़తͳΩϟονΞοϓ͸ඞਢ •

    ։ൃऀɺσβΠφʔ͕Ұ൪ଟ͘৮ΕΔ։ൃ؀ڥΛk8sʹ͢Δ͜ͱͰٕज़త ͳΩϟονΞοϓΛͭͭ͠ɺ։ൃ؀ڥ͕ރΕΕ͹ɺࣗવͱຊ൪Ҡߦ͠΍͢ ͘ͳΔ
  68. ࠓ೔࿩ͨ͜͠ͱ • طଘͷෳ਺ͷݴޠόʔδϣϯΛ๊͑ΔϖύϘʹ͸CNBʹΑΔϓϥΨϒϧͳ ίϯςφϏϧυ͕దԠͨ͠ • tecktoncd/pipelineΛར༻͢Δ͜ͱͰɺk8s nativeͳίϯςφϏϧυ͕࣮ݱ Ͱ͖Δ • telepresenceΛ༻͍ΔͱϩʔΧϧ։ൃ؀ڥͱk8sΛγʔϜϨεʹѻ͑Δ

    • όνΣϥʔ3ͷ࠷ޙల։ʹԶ͸ೲಘ͍ͯ͠ͳ͍
  69. ँࣙ • ͜ͷࢿྉͰड़΂ͨ։ൃ؀ڥΛࣄۀ෦ͷϝϯόʔʹల։͢Δʹ౰ͨΓɺಉ྅ ͷ@takumakume͞Μ͕ڧ͘ਚྗͯ͘͠Ε·ͨ͠ • ϖύϘͷΦϯϓϨk8sͷ։ൃΛ΄΅ҰਓͰϦʔυͯ͘͠ΕΔ@r_takaishiʹ ͸಄্͕͕Γ·ͤΜ

  70. Thanks @hiboma @zipper @kenchan

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