クラウドネイティブを創る技術

 クラウドネイティブを創る技術

話し手の所属するGMOペパボでは、First Containerアーキテクチャを用いたクラウド・ホスティングサービスであるロリポップ!マネージドクラウドを提供しています。サービスを開発するに当たり、mrubyやGolangで開発した独自のミドルウェアなど多くのコンポーネントを生み出してきました。それらとKubernetesを比較しながら、コンテナのオーケストレーションにおけるアーキテクチャについて論じ、実装の詳細に迫り、コンテナをこれまでのLinuxOSにおけるプロセスと捉えた場合に、例えばログの扱いや、モニタリングをどうしていくべきなのか、クラウドネイティブ時代におけるベストプラクティスを考える時間にしたいと考えています。

1b838da2065660793d5b26f2cdc32de7?s=128

Kazuhiko Yamashita

July 23, 2019
Tweet

Transcript

  1. 4.
  2. 7.
  3. 14.

    FastContainer Webαʔό্Ͱͷϓϩηε࣮ߦํࣜͷҰͭͰ͋ΔFastCGI͔Β @matsumotory ͕ண૝ͨ͠ΞʔΩςΫνϟ FastCGI Client Web Server CGI CGI

    ϦΫΤετ ىಈཁٻ ىಈ ܭࢉ Ϩεϙϯε FastContainer Client Web Server Container Container ϦΫΤετ ىಈཁٻ ىಈ ܭࢉ Ϩεϙϯε
  4. 16.

    ϚωʔδυΫϥ΢υ proxy ngx_mruby compute ngx_mruby haconiwa
 backend coreapi CMD B

    compute ngx_mruby haconiwa
 compute ngx_mruby haconiwa
 ngx_mruby͕σΟεύονϟͱͳΓɺτϥϑΟοΫϧʔςΟϯ ά΍ίϯςφىಈΛߦ͏ NFS Storage
  5. 17.

    ϚωʔδυΫϥ΢υ proxy ngx_mruby compute ngx_mruby haconiwa
 backend coreapi Data
 Store

    compute ngx_mruby haconiwa
 compute ngx_mruby haconiwa
 ϦΫΤετ୯ҐͷΦʔτεέʔϧ NFS Storage Ϣʔβʔσʔλ͸ ͢΂ͯετϨʔδʹ͋Δ
  6. 19.

    ϚωʔδυΫϥ΢υ - ίϯςφىಈ CMDB $PSF"1* DPOUBJOFS TUBUVTSFBEZ IPTUDPNQVUF ίϯςφͷ৘ใ SFBEZ଴ػத

    DPNQVUF $MJFOU TUPSBHF DPNQVUF OGT OGT 8FCQSPYZ http://www.kaasan.info/archives/3733
  7. 20.

    CMDB $PSF"1* DPOUBJOFS TUBUVTCPPUJOH IPTUDPNQVUF ίϯςφͷ৘ใ ίϯςφϨίʔυΛ ىಈத΁ CPPUJOHىಈத DPNQVUF

    $MJFOU TUPSBHF DPNQVUF OGT OGT http://www.kaasan.info/archives/3733 8FCQSPYZ ໨తͷίϯςφͷ*1͕ -*45&/ͯ͠ͳ͍ ϚωʔδυΫϥ΢υ - ίϯςφىಈ ϦΫΤετܖػͰ
 ৘ใऔಘ
  8. 21.

    CMDB $PSF"1* DPOUBJOFS TUBUVTFOBCMFE IPTUDPNQVUF ίϯςφͷ৘ใ ίϯςφϨίʔυΛ Քಇத΁ FOBCMFEՔಇத DPNQVUF

    $MJFOU TUPSBHF DPNQVUF OGT OGT http://www.kaasan.info/archives/3733 ίϯςφىಈ 8FCQSPYZ DPOUBJOFS ίϯςφͷ
 εςʔλεมߋ ϚωʔδυΫϥ΢υ - ίϯςφىಈ
  9. 22.

    CMDB $PSF"1* DPOUBJOFS TUBUVTFOBCMFE IPTUDPNQVUF ίϯςφͷ৘ใ DPNQVUF $MJFOU TUPSBHF DPNQVUF

    OGT OGT http://www.kaasan.info/archives/3733 8FCQSPYZ DPOUBJOFS ࣍ͷϦΫΤετ͸طʹ
 ίϯςφىಈࡁΈͳͷͰ௚઀ϓϩΩγ ϚωʔδυΫϥ΢υ - ίϯςφىಈ
  10. 23.

    CMDB $PSF"1* DPOUBJOFS TUBUVTSFBEZ IPTUDPNQVUF ίϯςφͷ৘ใ DPNQVUF $MJFOU TUPSBHF DPNQVUF

    OGT OGT http://www.kaasan.info/archives/3733 8FCQSPYZ DPOUBJOFS ίϯςφͷण໋͕དྷͨΒ ίϯςφΛఀࢭ͢Δ ϚωʔδυΫϥ΢υ - ίϯςφఀࢭ SFBEZ଴ػத΁ ͳʹ͔ॲཧதͷ৔߹͸ॲཧ͕ ऴΘΔ·Ͱ଴ͭ
  11. 25.

    CMDB $PSF"1* DPOUBJOFS TUBUVTFOBCMFE IPTUDPNQVUF ίϯςφͷ৘ใ DPNQVUF $MJFOU TUPSBHF DPNQVUF

    OGT OGT http://www.kaasan.info/archives/3733  ʘෛՙ΍͹͍ʗ 8FCQSPYZ DPOUBJOFS ίϯςφ௥Ճཁٻ ϚωʔδυΫϥ΢υ - Φʔτεέʔϧ DPOUBJOFS TUBUVTSFBEZ IPTUDPNQVUF ίϯςφ৘ใΛ ௥Ճ
  12. 26.

    CMDB $PSF"1* DPOUBJOFS TUBUVTFOBCMFE IPTUDPNQVUF ίϯςφͷ৘ใ DPNQVUF $MJFOU TUPSBHF DPNQVUF

    OGT OGT http://www.kaasan.info/archives/3733 8FCQSPYZ DPOUBJOFS ϦΫΤετܖػͰίϯςφىಈ ϚωʔδυΫϥ΢υ - Φʔτεέʔϧ ίϯςφ৘ใΛ ༗ޮԽ DPOUBJOFS DPOUBJOFS TUBUVTFOBCMFE IPTUDPNQVUF
  13. 29.

    ओཁίϯϙʔωϯτ - ngx_mruby NSVCZ@TTM@IBOETIBLF@IBOEMFS@DPEF TTMOHJOY44-OFX DFSUJpDBUF@EBUB'JMFSFBE QBUIUP\TTMTFSWFSOBNF^DSU  LFZ@EBUB'JMFSFBE QBUIUP\TTMTFSWFSOBNF^LFZ

     TTMDFSUJpDBUF@EBUBDFSUJpDBUF@EBUB TTMDFSUJpDBUF@LFZ@EBUBLFZ@EBUB  OHJOYͷ͋ΒΏΔΠϕϯτʹϑοΫͯ͠ɺNSVCZͷίʔυΛ࣮ߦ͠ɺ ϓϥΨϒϧʹτϥϑΟοΫίϯτϩʔϧग़དྷΔ
  14. 31.

    ओཁίϯϙʔωϯτ - ngx_mruby SFRVFTU SFRVFTU SFRVFTU SVODPOUBJOFS SVODPOUBJOFS SVODPOUBJOFS SFTQPOTF

    SFTQPOTF SFTQPOTF XPSLFS XPSLFS͋ͨΓͷNSVCZ࣮ߦ ίϯςφىಈ Ͱ
 ඇಉظ*0͕ϒϩοΫ͞ΕΔ ίϯςφىಈ ଴ͪ࣌ؒ
  15. 32.

    ओཁίϯϙʔωϯτ - ngx_mruby /HJOY"TZODTMFFQΛར༻͠ɺίϯςφىಈ଴ͪ࣌ؒΛ ඇಉظʹ4MFFQ͢Δ SFRVFTU SFRVFTU NSVCZ SFTQPOTF SFTQPOTF

    8PSLFS MPPQEP  CSFBLJGDPOUBJOFSCPPU   /HJOY"TZODTMFFQ FOE NSVCZ TMFFQ ίϯςφىಈޙ ඇಉظSleep
  16. 33.
  17. 38.
  18. 46.

    etcd CMDB kube-api-server Jardin kube-scheduler kube-proxy kubelet container runtime haconiwa

    ΞʔΩςΫνϟ kubernetes ϚωʔδυΫϥ΢υ ngx_mruby skmr usermetrics
  19. 47.

    etcd CMDB kube-api-server Jardin kube-scheduler kube-proxy kubelet container runtime haconiwa

    σʔλετΞ kubernetes ϚωʔδυΫϥ΢υ ngx_mruby skmr usermetrics
  20. 48.

    etcd CMDB kube-api-server Jardin kube-scheduler kube-proxy kubelet container runtime haconiwa

    API&Scheduler kubernetes ϚωʔδυΫϥ΢υ ngx_mruby skmr usermetrics
  21. 49.

    etcd CMDB kube-api-server Jardin kube-scheduler kube-proxy kubelet container runtime haconiwa

    Node compornents kubernetes ϚωʔδυΫϥ΢υ ngx_mruby skmr usermetrics
  22. 50.

    etcd CMDB kube-api-server Jardin kube-scheduler kube-proxy kubelet container runtime haconiwa

    Container Runtime kubernetes ϚωʔδυΫϥ΢υ ngx_mruby skmr usermetrics
  23. 52.

    Kubernetes - ίϯςφىಈ • YAMLΛAPIʹ౤ೖ͢Δ͜ͱͰίϯςφىಈ • ϔϧενΣοΫ͸ProbeͰ࣮ߦ(HTTP/TCP/ExecCommand) • ىಈ࣌ʹߦ͏ͷ͸readinessProbeɺىಈޙ͸livenessProbe •

    ॳظԽॲཧ͸InitContainerɺPostStartͰॳظԽॲཧΛϑοΫՄೳ • NඵִؒͰϑοΫ͢Δͱ͔ɺ༗ޮظݶ͕དྷͨΒίϯςφΛఀࢭ͢Δʹ͸ί ϯτϩʔϥʔͰಠ࣮ࣗ૷͕ඞཁ
  24. 58.
  25. 59.
  26. 62.

    ίϯςφΦʔέετϨʔγϣϯγεςϜ Scheduler compute-node Container Container Container compute-node Container Container Container

    εέδϡʔϥʔ͕ϊʔυʹϓϩηεΛׂΓ౰ͯɺ ·ͨͦΕΒͷ৘ใ͕ϦΞϧλΠϜʹऩू͞Εɺ ࣗ཯తʹಈ͘γεςϜ
  27. 64.
  28. 65.
  29. 69.

    ΦʔέετϨʔγϣϯγεςϜ Scheduler compute-node Container Container Container log collector log collector

    log collector compute-node Container Container Container log collector log collector log collector
  30. 70.

    ΦʔέετϨʔγϣϯγεςϜ Scheduler compute-node Container Container Container log collector log collector

    log collector compute-node Container Container Container log collector log collector log collector
  31. 74.

    LBGLBDMVTUFS ඵͰཧղ͢Δ,BGLB producer (ૹΓख) kafka-broker-1 topic partition-0 kafka-broker-2 topic partition-1

    DPOTVNFSHSPVQ consumer (ड͚ख) consumer (ड͚ख) consumer (ड͚ख) ૹΓखͱड͚खΛ/ͱ͢ΔόοϑΝʔ