貧者のためのCoreOS(Jenkinsを例に)

 貧者のためのCoreOS(Jenkinsを例に)

社内勉強会で、懲りずにCoreOSの話をしました。

http://tech.feedforce.jp/coreos_jenkins_cloud-config.html

今回は

「こんなに簡単にJenkinsとか立てられるんですよ!」
「しかもCoreOSならこんなにポータビリティが高い!」
「そしてVPSはなんか安い!」
みたいな徒然を話しました。

以下、だらだらと話してしまったので、4点ポイントをまとめたいと思います

cloud-configの高いポータビリティ
お安いVPSプラン
docker hub で docker imageを自動ビルドできる
個別の設定をdocker imageに注入する

B122e77de860c4307034f0a041dabc8e?s=128

hoshino tsuyoshi

November 12, 2014
Tweet

Transcript

  1. ශऀͷͨΊͷCoreOSɹɹɹɹ (JenkinsΛྫʹ) ٕज़νʔϜษڧձ #205 2014/10/31

  2. ͱ͜ΖͰ —͓͏ͪͰCIͰ͖·͔͢ʁ

  3. ͓͏ͪʹ͸ΞϨ͕ͳ͍ —αʔόʔ —্هΛஔ͘εϖʔε —্هʹର͢ΔՈ଒ͷཧղ

  4. ͓͏ͪʹ͸ΞϨ͕ͳ͍ —ϝϞϦ —VirtualBoxͱ͔ݏͳΜ΍

  5. ͓͏ͪʹ͸ΞϨ͕ͳ͍ —͓ۚ

  6. CI Platforms(private plan) —circleci.com —͏ͬ(༗ྉ) —travis.com —͏ͬ(༗ྉ) —wercker.com(beta, $0) —๊͍ͯ

    //// —͚Ͳbeta(͍͔ͭ༗ྉ?)
  7. CI Platforms(ߟ࡯) —werckerྑͦ͞͏Ͱ͢Ͷ —͚ͲͦΕ͡Ό໘ന͘ͳ͍͠ษڧձʹͳΒͳ͍ —΍ͬͺVPSʹJenkinsΛཱͯΑ͏ —मཏͷಓ΁

  8. मཏͷಓ͕ͩɺ1ͭͷ੾ͳΔئ͍ —Jenkinsͨͯͨcode͸࢒͍ͨ͠Μ΍ —ͦ͜ͰCoreOS ͷ cloud-config!! —αʔόʔͷॳظઃఆΛyamlͰॻ͚Δ

  9. CoreOSͷcloud-configͱ͸

  10. CoreOSͷcloud-configͱ͸ #cloud-config users: - name: hoshinotsuyoshi groups: - sudo -

    docker ssh-authorized-keys: - ssh-rsa AAAAB.... —࠷খͰ͸͜Μͳײ͡! —͜ΕͰsshͰ͖ΔdockerΠϯελϯε͕खʹೖΔ!
  11. CoreOSʹ͍ͭͯ

  12. CoreOSʹ͍ͭͯ —fleet(Cluster Manamgement) —etcd(Service Discovery) —systemd(init.d୅ସ, RHEL7͔ΒࡌΔ) —docker(ίϯςφԾ૝ԽͷΞϨ) ↑ී௨͸fleet/etcd͕ॏཁͰ͕͢ɺɺ ࠓ೔͸systemd/dockerʹ͍ͭͯͷΈ

  13. systemd/dockerͰͲ͏ಈ͔͢ͷ? —CoreOSͷαΠτͷྫͰઆ໌ —https://coreos.com/docs/launching-containers/ launching/getting-started-with-systemd/

  14. None
  15. cloud-config: Apache httpd serviceྫ ؆ศͷͨΊetcdؔ࿈͸࡟আ͍ͯ͠·͢

  16. cloud-config: Apache httpd serviceྫ [unit] Description=My Advanced Service After=docker.service Description

    : systemctlίϚϯυΛଧͬͨ࣌ʹग़ͯ͘ΔαʔϏεͷઆ໌ After: ͲͷαʔϏε͕ىಈͨ͠ޙʹ͜ͷαʔϏε͕ىಈ͢Δ͔
  17. cloud-config: Apache httpd serviceྫ ExecStartPre=-/usr/bin/docker kill apache1 ExecStartPre=-/usr/bin/docker rm apache1

    ExecStartPre=/usr/bin/docker pull coreos/apache ExecStartPre : ExecStartͷલʹ࣮ߦ͞ΕΔɻ ͜͜Ͱ͸ίϯςφ໊ʮapache1ʯΛkill͠ɺ࡟আ(rm)ɺ docker public repo͔ΒΠϝʔδ"coreos/apache"Λpull ʮ=-ʯ͢Δͱऴྃίʔυ͕0Ҏ֎Ͱ΋ࣦഊͱΈͳ͞ͳ͍
  18. cloud-config: Apache httpd serviceྫ ExecStart=/usr/bin/docker run --name apache1 \ -p

    80:80 coreos/apache /usr/sbin/apache2ctl -D FOREGROUND ExecStart : ϝΠϯͷίϚϯυɻ "systemctl start αʔϏε໊" Ͱ࣮ߦ͞ΕΔɻ ্هྫͰ͸Πϝʔδʮcoreos/apacheʯΛίϯςφ໊ʮapache1ʯͰrun ͠ɺ ίϯςφͷதͷ࿩ͳͷͰFOREGROUNDΛࢦఆ͍ͯ͠Δ
  19. cloud-config: Apache httpd serviceྫ ExecStop=/usr/bin/docker stop apache1 ExecStop : ετοϓ͢Δͱ͖ͷίϚϯυɻ

    "systemctl stop αʔϏε໊" Ͱ࣮ߦ͞Ε Δ
  20. ͜ΕΛcloud-configʹష͚ͬͭΕ͹͑͑! units: - name: httpd.service # ద౰ʹ໊෇͚Δ command: start runtime:

    no content: | [Unit] (...લͷϖʔδͷ಺༰Λϖʔετ)
  21. CoreOSྑ͍ —aptͱ͔yumͱ͔ͳͯ͘΋αʔϏεಈ͘ —ίϯςφ಺ͰશͯΛಈ͔͢ —ͭ·Γ

  22. None
  23. CoreOSྑ͍ —͢΂ͯͷͿ͖ʗ΅͏͙͕ͦ͏ͼͰ͖Δʯ —Ϙεઓ޲͚(ຊؾ)ͬΆ͍ —ͬ͢ͽΜײ͋Δ͚ͩʹফඅϝϞϦ΋গͳ͍ $ free -h total used free

    shared buffers cached Mem: 746M 144M 601M 248K 4.3M 92M -/+ buffers/cache: 47M 698M Swap: 0B 0B 0B (Vultr/768M ͷ৔߹)
  24. CoreOSΛಈ͔ͤΔVPSͷ͝঺հ —DigitalOcean —Vultr

  25. DigitalOcean —min: $5/mon, $0.007/1h —͍ۙϦʔδϣϯ͋Δ(Singapore) —సૹྔ՝ۚ —paypalબ΂Δ —API —CoreOSͷνϡʔτϦΞϧ͕blogʹࡌͬͯͯɺྑ͍

  26. Vultr —min: $5/mon, $0.007/1h —͍ۙϦʔδϣϯ͋Δ(Tokyo) —సૹྔ՝ۚ —ϓϦϖΠυ —API —CoreOSͷެࣜαΠτʹνϡʔτϦΞϧࡌͬͯΔ

  27. (ͦͷଞͷVPS΍Ϋϥ΢υܥ͸...) —ͪΌΜͱௐ΂ͯͳ͍Ͱ͢͢Έ·ͤΜ —ߴ͍Πϝʔδ͋Δ

  28. demo1 : DigitalOceanͰcoreosཱͯΔ ʲྲྀΕʳ * ϓϥϯબ୒(ϝϞϦ/సૹྔ/HDD) * Ϧʔδϣϯબ୒ * userdata

    - cloud-config ΛషΔ! * CoreOSͷόʔδϣϯΛࢦఆ - alpha/beta/stable
  29. demo1 : DigitalOceanͰCoreOSཱͯΔ ϓϥϯબ୒

  30. demo1 : DigitalOceanͰCoreOSཱͯΔ Ϧʔδϣϯબ୒ / cloud-configϖλϦ memo: https://gist.github.com/hoshinotsuyoshi/8d3dc38d50c61c1b6cd3

  31. demo1 : DigitalOceanͰCoreOSཱͯΔ CoreOSͷόʔδϣϯΛࢦఆ / 伴Λࢦఆ DigitalOceanฤ͸Ҏ্ɻ

  32. demo2 : VultrͰCoreOSཱͯΔ ʲྲྀΕʳ * ipxe༻ҙ͠ͱ͘ * ϓϥϯબ୒ ɾ Ϧʔδϣϯબ୒

    * coreos-installίϚϯυ + reboot
  33. demo2 : VultrͰCoreOSཱͯΔ ࣄલ४උ:ipxe༻ҙ͠ͱ͘ εΫϦϓτ͸CoreOSͷαΠτ͔Βίϐʔͯ͘͠Δ https://coreos.com/docs/running-coreos/cloud-providers/vultr/

  34. demo2 : VultrͰCoreOSཱͯΔ ϓϥϯબ୒Ϧʔδϣϯબ୒

  35. demo2 : VultrͰCoreOSཱͯΔ ͖ͬ͞ͷipxeબͼ, deployϘλϯΛԡ͢

  36. demo2 : VultrͰCoreOSཱͯΔ ipΞυϨε͕ܾ·Δ·Ͱ਺ेඵ଴ͭ

  37. demo2 : VultrͰCoreOSཱͯΔ sshͯ͠ coreos-installίϚϯυ $ ssh core@IPΞυϨε cd ~

    && \ curl -L https://gist͔ͳΜ͔ʹషͬͱ͘/cloud-config.yaml > ~/config && \ sudo coreos-install -d /dev/vda -C alpha -c ~/config -o '' && \ sudo mount -o subvol=root /dev/vda9 /mnt/ && \ sudo reboot ʮ-o '' ʯ͢Δඞཁ͋Γʢ͸·ͬͨʣ Vultrฤ͸Ҏ্
  38. hello my Jenkins! DigitalOceanͰ΋VultrͰ΋ಉ͡cloud-configͰಉ͡Α͏ʹJenkins͕ಈ͍ͨʂ (↑ΧελϜδϣϒ(job1)͕͢Ͱʹηοτ͞Ε͍ͯΔঢ়ଶͰىಈͰ͖ͨ!)

  39. ΋͔ͯ͠͠ɿjenkins͡Όͳͯ͘΋೚ ҙͷαʔϏε͕ىಈͰ͖Δ! (ͦ͏Ͱ͢ʂ)

  40. ࠓճjenkinsཱͯΔͷʹඞཁͩͬͨ΋ͷ —docker image https://github.com/hoshinotsuyoshi/dind-jenkins https://github.com/hoshinotsuyoshi/dind-jenkins-auto-build-ruby —cloud-config https://gist.github.com/hoshinotsuyoshi/8d3dc38d50c61c1b6cd3

  41. docker ͱ github —githubͱdocker hub࿈ܞͤͨ͞ʮAUTOMATED BUILD REPOSITORYʯͱ͍͏ͷ͕ศར —ࢦఆͷϒϥϯνʹϓογϡ͢ΔͱࣗಈతʹϏϧυͯ͠ ͘ΕΔ —͓͏ͪͷύιίϯͰϏϧυ͠ͳ͍͍ͯ͘

  42. ࠓճ࡞ͬͨdocker image(1) —jenkinsͱdocker͕ಈ͘ΠϝʔδΛ࡞੒ —(dockerͷதͰdocker͕ಈ͘ʯ͸ݸਓతझຯ) —jenkinsͰdocker buildͷςετΛ͍͔ͨ͠Β —FROM jpetazzo/dind https://github.com/hoshinotsuyoshi/dind-jenkins

  43. ࠓճ࡞ͬͨdocker image(2) —(1)ͷΠϝʔδΛFROM͠rubyΛೖΕͨΠϝʔδΛ࡞ ੒ —ʮONBUILDʯ ࢖ͬͯΈͨ —ࢠϏϧυͷϏϧυ࣌ͷίϚϯυΛࢦఆͰ͖Δ —ONBUILD ADD config.xml

    —template methodͬΆ͍ https://github.com/hoshinotsuyoshi/dind-jenkins-auto-build-ruby
  44. ࠓճ࡞ͬͨdocker image(3) —(2)ͷΠϝʔδΛFROM —CoreOSىಈ࣌ʹjenkinsͷઃఆϑΝΠϧΛ࡞੒

  45. ॴײ/·ͱΊ —cloud-configͰϥΫνϯςετ؀ڥߏஙʂ —CoreOSΛαϙʔτ͢ΔVPS͸͍҆ϓϥϯ͕͋Δ —͜·Ίʹdestroy͢Ε͹͞Βʹઅ໿Ͱ͖ͦ͏

  46. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝· ͨ͠