Slide 1

Slide 1 text

(JU)VC"DUJPOTSVOOFSج൫ʹ͓͚Δ 
 ΦϯϓϨϛε 
 ϚϧνςφϯτΞϓϦέʔγϣϯͷӡ༻ ݱঢ়ࡱӨޙͷεϥΠυࠩ͠ସ͑ ˞Ծஔ͖

Slide 2

Slide 2 text

த੢ݐొXIZXBJUB גࣜձࣾαΠόʔΤʔδΣϯτ೥৽ଔೖࣾ $ZCFS"HFOUHSPVQ*OGSBTUSVDUVSF6OJU $*6 
 ɹ1MBUGPSNEJW։ൃνʔϜ w ۀ຿$"શࣾʹ޲͚ͨϓϥΠϕʔτΫϥ΢υ։ൃӡ༻ w *BB4 4BB4CZ0QFO4UBDL ,VCFSOFUFT FUD w झຯࣗ୐αʔόɺຑ੃ ࢝Ίͨ ɺඒຯ͍͠LDVQ͕͞͠

Slide 3

Slide 3 text

$POUFOUT ͸͡Ίʹ w $ZDMPVE w NZTIPFT $ZDMPVEIPTUFESVOOFS $ZDMPVEIPTUFESVOOFSʹ͓͚Δ 
 Ϛϧνςφϯγʔ #VJME6Q ܧଓతͳ#VJME6Q

Slide 4

Slide 4 text

͸͡Ίʹ

Slide 5

Slide 5 text

$ZDMPVE w$Z CFS"HFOU DMPVE wϓϥΠϕʔτΫϥ΢υ w *BB4,BB41BB44BB4 w $"޲͚ΧελϚΠζࡁΈ w $16 .FNPSZ %JTL w҆ՁʹܭࢉػࢿݯΛར༻Մೳ

Slide 6

Slide 6 text

XIZXBJUBNZTIPFT w"VUPTDBMJOH7JSUVBM.BDIJOFɹɹɹ SVOOFS🏃GPS(JU)VC"DUJPOT w(JU)VC"DUJPOTʹ͓͚ΔSVOOFSͷ 
 ɹಈత࡞੒࡟আ wQSPWJEFSํࣜͰෳ਺ͷΫϥ΢υ্ʹ 
 ɹSVOOFSΛσϓϩΠՄೳ

Slide 7

Slide 7 text

Virtual Machine with actions/runner Cloud Provider • AWS / GCP / Azure • LXD / OpenStack • etc etc... ① Start job ② webhook ③ CreateInstance ④ Create ⑤ Register

Slide 8

Slide 8 text

ৄࡉ͸ԼهൃදΛ֬͝ೝ͍ͩ͘͞ IUUQTXXXTMJEFTIBSFOFUXIZXBJUBEFWFMPQNFOUNZTIPFTBOEQSPWJEF DZDMPVEIPTUFESVOOFSHJUIVCBDUJPOTXJUIZPVSTIPFT

Slide 9

Slide 9 text

͜ΕΛ࢖ͬͨαʔϏε͕

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

$ZDMPVEIPTUFESVOOFS w$ZDMPVEͷϚωʔδυαʔϏε 4BB4 w໊শ͸(JU)VCIPTUFEΑΓ w(JU)VCIPTUFEΑΓ҆Ձʹఏڙ wϚϧνςφϯτߏ੒Ͱఏڙ wςφϯτͷৄࡉ͸ޙड़ wෳ਺εϖοΫఏڙ wݱࡏ͸-JOVY 6CVOUVGPDBM ͷΈ w$PSF(#ʙ$PSF(#

Slide 12

Slide 12 text

$ZDMPVEIPTUFESVOOFS

Slide 13

Slide 13 text

$ZDMPVEIPTUFESVOOFS $ curl -XGET ${your_shoes_host}/target | jq . [ { "id": "477f6073-90d1-47d8-958f-4707cea61e8d" , "scope": "octocat" , "token_expired_at": "2006-01-02T15:04:05Z" , "ghe_domain": "https://github.example.com" , "resource_type": "micro" , "runner_user": "ubuntu" , "runner_version": "" , "provider_url": "" , "status": "active" , "status_description": "" , "created_at": "2006-01-02T15:04:05Z" , "updated_at": "2006-01-02T15:04:05Z " }

Slide 14

Slide 14 text

$ZDMPVEIPTUFESVOOFS $ curl -XGET ${your_shoes_host}/target | jq . [ { "id": "477f6073-90d1-47d8-958f-4707cea61e8d" , "scope": "octocat", "token_expired_at": "2006-01-02T15:04:05Z" , "ghe_domain": "https://github.example.com" , "resource_type": "micro" , "runner_user": "ubuntu" , "runner_version": "" , "provider_url": "" , "status": "active" , "status_description": "" , "created_at": "2006-01-02T15:04:05Z" , "updated_at": "2006-01-02T15:04:05Z " } ಈ࡞͢Δ0SHPS3FQPࢦఆ

Slide 15

Slide 15 text

$ZDMPVEIPTUFESVOOFS $ curl -XGET ${your_shoes_host}/target | jq . [ { "id": "477f6073-90d1-47d8-958f-4707cea61e8d" , "scope": "octocat" , "token_expired_at": "2006-01-02T15:04:05Z" , "ghe_domain": "https://github.example.com", "resource_type": "micro" , "runner_user": "ubuntu" , "runner_version": "" , "provider_url": "" , "status": "active" , "status_description": "" , "created_at": "2006-01-02T15:04:05Z" , "updated_at": "2006-01-02T15:04:05Z " } (JU)VC&OUFSQSJTF4FSWFSରԠ

Slide 16

Slide 16 text

$ZDMPVEIPTUFESVOOFS $ curl -XGET ${your_shoes_host}/target | jq . [ { "id": "477f6073-90d1-47d8-958f-4707cea61e8d" , "scope": "octocat" , "token_expired_at": "2006-01-02T15:04:05Z" , "ghe_domain": "https://github.example.com" , "resource_type": "micro", "runner_user": "ubuntu" , "runner_version": "" , "provider_url": "" , "status": "active" , "status_description": "" , "created_at": "2006-01-02T15:04:05Z" , "updated_at": "2006-01-02T15:04:05Z " } ར༻͢ΔSVOOFSͷεϖοΫ 
 ˞0SHSFQP͝ͱʹมߋՄೳ

Slide 17

Slide 17 text

$ZDMPVEIPTUFESVOOFS $ cat test.yaml
 jobs : test : runs-on: ubuntu-lates t steps : - name: Checkout

Slide 18

Slide 18 text

$ZDMPVEIPTUFESVOOFS $ cat test.yaml
 jobs : test : - runs-on: ubuntu-lates t + runs-on: self-hoste d steps : - name: Checkout

Slide 19

Slide 19 text

$ZDMPVEIPTUFESVOOFS ؆୯ʂ🤩

Slide 20

Slide 20 text

$ZDMPVEIPTUFESVOOFS ʹ͓͚Δ Ϛϧνςφϯτ

Slide 21

Slide 21 text

ʮϚϧνςφϯτʯ w$ZDMPVEʹ͓͚Δςφϯτ wࢠձࣾ wҟࣄۀ෦ w$ZDMPVEIPTUFESVOOFSʹ͓͚Δ 
 ςφϯτ wϓϩδΣΫτ w੥ٻ۠෼ w(JU)VCυϝΠϯ ()&4

Slide 22

Slide 22 text

ʮϚϧνςφϯτʯ $ZDMPVE5FOBOU" $ZDMPVE5FOBOU# $ZDMPVEIPTUFESVOOFS5FOBOU" $ZDMPVEIPTUFESVOOFS5FOBOU" $ZDMPVEIPTUFESVOOFS5FOBOU" $ZDMPVEIPTUFESVOOFS5FOBOU# $ZDMPVEIPTUFESVOOFS5FOBOU# $ZDMPVEIPTUFESVOOFS5FOBOU#

Slide 23

Slide 23 text

$ZDMPVEIPTUFESVOOFSߏ੒ Kubernetes Cluster myshoes-proxy (Global IP) github.com GHES User Tenant A Tenant B webhook myshoes REST API Stadium VM Stadium VM Stadium VMs LXD (listen 8 44 3 ) Stadium VM Stadium VM Stadium VMs LXD (listen 8 44 3 ) Stadium VM Stadium VM Stadium VMs LXD (listen 8 44 3 ) k 8 s Service k 8 s Service for Service X for Service Y k 8 s Service Tenant C k 8 s Service

Slide 24

Slide 24 text

$ZDMPVEIPTUFESVOOFSߏ੒ 既存 Cycloud VM Tenant A Tenant B Stadium VM Stadium VM Stadium VMs LXD (listen 8 44 3 ) Stadium VM Stadium VM Stadium VMs LXD (listen 8 44 3 ) Stadium VM Stadium VM Stadium VMs LXD (listen 8 44 3 ) k 8 s Service k 8 s Service for Service X for Service Y k 8 s Service Tenant C k 8 s Service Service VM Service VM Service VM 既存 Cycloud ユーザは 
 ⾃テナントのVMとの接続が可能 
 他テナントのVMとの接続は不可

Slide 25

Slide 25 text

Ϛϧνςφϯτڞ༗Ϩϕϧ wશମڞ༗ w,VCFSOFUFT wNZTIPFT͸͡Ίଟϓϩηε wNZTIPFTDPOUSPMMFS w,VCFSOFUFTDPOUSPMMFS w.Z42- wXJUIPQFOBSLPSDIFTUSBUPS w(JU)VC"QQT

Slide 26

Slide 26 text

Ϛϧνςφϯτڞ༗Ϩϕϧ w$ZDMPVEʹ͓͚Δςφϯτڞ༗ w4UBEJVNΫϥελ w࣮ࡍʹSVOOFS🏃͕࣮ߦ͞ΕΔ7. w%PDLFSSFHJTUSZ w%PDLFS)VC3BUF-JNJUରࡦ w-9%EOTNBTRͰ 
 ໊લղܾ݁ՌΛͶ͡ۂ͛ͯӡ༻

Slide 27

Slide 27 text

Ϛϧνςφϯτڞ༗Ϩϕϧ w$ZDMPVEIPTUFESVOOFSʹ͓͚Δ 
 ςφϯτڞ༗ wNZTIPFTίϯςφͷΈ

Slide 28

Slide 28 text

$ZDMPVEIPTUFESVOOFSߏ੒ Kubernetes Cluster myshoes-proxy (Global IP) github.com GHES User Tenant A Tenant B webhook myshoes REST API Stadium VM Stadium VM Stadium VMs LXD (listen 8 44 3 ) Stadium VM Stadium VM Stadium VMs LXD (listen 8 44 3 ) Stadium VM Stadium VM Stadium VMs LXD (listen 8 44 3 ) k 8 s Service k 8 s Service for Service X for Service Y k 8 s Service Tenant C k 8 s Service

Slide 29

Slide 29 text

$ZDMPVEIPTUFESVOOFSߏ੒ Kubernetes Cluster myshoes-proxy (Global IP) github.com GHES User Tenant A Tenant B webhook myshoes REST API Stadium VM Stadium VM Stadium VMs LXD (listen 8 44 3 ) Stadium VM Stadium VM Stadium VMs LXD (listen 8 44 3 ) Stadium VM Stadium VM Stadium VMs LXD (listen 8 44 3 ) k 8 s Service k 8 s Service for Service X for Service Y k 8 s Service Tenant C k 8 s Service <શମڞ༗>NZTIPFTQSPYZ *OUFSOFUˠ1SJWBUF$MPVE ֤ςφϯτ΁ৼΓ෼͚ ೝূೝՄ

Slide 30

Slide 30 text

$ZDMPVEIPTUFESVOOFSߏ੒ Kubernetes Cluster myshoes-proxy (Global IP) github.com GHES User Tenant A Tenant B webhook myshoes REST API Stadium VM Stadium VM Stadium VMs LXD (listen 8 44 3 ) Stadium VM Stadium VM Stadium VMs LXD (listen 8 44 3 ) Stadium VM Stadium VM Stadium VMs LXD (listen 8 44 3 ) k 8 s Service k 8 s Service for Service X for Service Y k 8 s Service Tenant C k 8 s Service <શମڞ༗> 
 NZTIPFTDPOUSPMMFS 5FOBOU $3% ͔Βੜ੒ LT4FSWJDF NZTIPFT1PE OPEF@TFMFDUPSͰ 
 ىಈςφϯτΛ੾ସ

Slide 31

Slide 31 text

ϚΠΫϩαʔϏεͱͯ͠ӡ༻ wNZTIPFTDPOUSPMMFS wCJMMJOHDPMMFDUPS wTIPFTTFSWFS ޙड़ w.Z42-0QFSBUJPO1PE wDFSUNBOBHFS wPQFOTUBDLDJOEFSDTJ wFUDFUD

Slide 32

Slide 32 text

Ҿ༻8FCΞϓϦέʔγϣϯΛϚϧνςφϯτܕ4BB4ιϦϡʔγϣϯʹม׵͢Δ IUUQTXXXJCNDPNEFWFMPQFSXPSLTKQDMPVEMJCSBSZDMNVMUJUFOBOUTBBT Ϛϧνςφϯτͷछྨ

Slide 33

Slide 33 text

ͳͥ͋͑ͯγϯάϧYςφϯτʁ

Slide 34

Slide 34 text

ͳͥ͋͑ͯγϯάϧYςφϯτʁ NZTIPFTͷ࣮૷ࢦ਑

Slide 35

Slide 35 text

NZTIPFT 044 ͷ࣮૷ํ਑ w؆୯ʹσϓϩΠ w/PUOFFE0SDIFTUSBUPS w714ࣗ୐αʔό UNVYͰ΋ஔ͚Δಈ͘ 
 w(PBM/PO(PBMΛখ͘͞໌֬ʹ w/PO(PBMͷҰྫ w/PNVMUJUFOBODZ w/P"VUI

Slide 36

Slide 36 text

NZTIPFT 044 ͷ࣮૷ํ਑ w/PO(PBMͷ໌֬ԽϝϦοτ wʮͲ͜Ͱ࣮૷͢΂͖͔ʯ͕໌֬Խ wࣾ಺ཁ݅͸ଞ ϓϩΩγ ʹ೚ͤΔ wϚϧνςφϯτ wೝূೝՄ wޙ͔Βඞͣ௥Ճཁ݅͸΍ͬͯ͘Δ wlͲͷϚΠΫϩαʔϏεʹ௥Ճ͢Δ͔z 
 Λߟྀ͢Δඞཁͷͳ͍ઃܭ͕ॏཁ

Slide 37

Slide 37 text

Ͳ͜ʹԿΛ࣮૷͢΂͖͔ ڥք͕ϋοΩϦ͢Δ 
 ΞϓϦέʔγϣϯ͝ͱͷ 
 ੹೚ൣғ͕໌֬Խ💯

Slide 38

Slide 38 text

0WFSWJFX͸͜͜·Ͱ

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

#VJME6Qͷ༷ࢠΛ͝঺հ

Slide 41

Slide 41 text

$ZDMPVEIPTUFESVOOFS w೥࢝ຊ֨తʹ։ൃ։࢝ wύϒϦοΫϕʔλ w(FOFSBMMZ"WBJMBCMF wςφϯτ਺໿ w4UBEJVN਺໿7. wಉ࣌SVOOFS਺໿ʙ୆

Slide 42

Slide 42 text

࠷ॳظ

Slide 43

Slide 43 text

$ZDMPVEIPTUFESVOOFSߏ੒ Kubernetes Cluster myshoes-proxy (Global IP) github.com GHES User Tenant A Tenant B webhook myshoes REST API Stadium VM Stadium VM Stadium VMs LXD (listen 8 44 3 ) Stadium VM Stadium VM Stadium VMs LXD (listen 8 44 3 ) Stadium VM Stadium VM Stadium VMs LXD (listen 8 44 3 ) k 8 s Service k 8 s Service for Service X for Service Y k 8 s Service Tenant C k 8 s Service

Slide 44

Slide 44 text

$ZDMPVEIPTUFESVOOFSߏ੒ Kubernetes Cluster myshoes-proxy LXD (listen 8 44 3 ) Stadium VM Stadium VM Stadium VMs 8 s Service k 8 s Service for Service X for Service Y k 8

Slide 45

Slide 45 text

-9% w-9$ -JOV9$POUBJOFS %BFNPO w$BOPOJDBMओಋ w(JU)VCIPTUFE 7. ʹدͤΔͨΊ࠾༻ w4FSWJDFDPOUBJOFSར༻Մ wLTϕʔεͩͱ%JO%ʹͳͬͯ͠·͏ w׆ൃʹ։ൃத wίϯτϦϏϡʔτ͠·ͨ͠💪 w৽ػೳ։ൃͳͲ΋׆ൃ

Slide 46

Slide 46 text

-9%JO1SPEVDUJPO w8JLJʹৄࡉͳهࣄ͋Γ w1SPEVDUJPO4FUVQ w IUUQTMJOVYDPOUBJOFSTPSHMYEEPDTNBTUFSQSPEVDUJPO TFUVQ w`limits.conf` `sysctl.conf ` w`txqueuelen`ͳͲ wݱ࣌఺Ͱ͸ 
 ͜ͷهࣄͷ௨ΓͰେ͖͘໰୊ແ͠

Slide 47

Slide 47 text

-9%JO1SPEVDUJPO wετϨʔδCUSGT w[GT SFDPNNFOE %PDLFSಈ͔ͣ wEJS$PQZPO8SJUFಈ͔ͣ wCUSGTEJTL༻ʹߴ଎/7.F44%ར༻ w0QFO4UBDLJ4$4*Ͱ7.ʹ઀ଓ wੑ্࣭*0͕όʔετʹͳΓ͕ͪ wϓϥΠϕʔτΫϥ΢υ͔ͩΒͦ͜

Slide 48

Slide 48 text

Virtual Machine with actions/runner Cloud Provider • AWS / GCP / Azure • LXD / OpenStack • etc etc... ① Start job ② webhook ③ CreateInstance ④ Create ⑤ Register

Slide 49

Slide 49 text

Virtual Machine with actions/runner Cloud Provider • AWS / GCP / Azure • LXD / OpenStack • etc etc... ① Start job ② webhook ③ CreateInstance ④ Create ⑤ Register

Slide 50

Slide 50 text

NZTIPFTQSPWJEFS wΠϯελϯεͷ࡞੒࡟আͷ࣮ߦ૚ wΫϥ΢υ͝ͱʹॲཧ͕ҟͳΔ wಠࣗͷόΠφϦͰந৅Խ 
 wIBTIJDPSQHPQMVHJOར༻ wPT&YFDͰϓϥάΠϯΛىಈ wH31$ϕʔεʹωΰγΤʔγϣϯ

Slide 51

Slide 51 text

಺෦ಈ࡞NZTIPFTQSPWJEFS Cloud Provider Execute provider (hashicorp/go-plugin) Virtual Machine with actions/runner shoes-xxx Virtual Machine with actions/runner Virtual Machine with actions/runner Call API 1 .Runner Name : runnerに付けるべき名前 2 .Setup Script : actions/runner展開スクリプト 3 .Resource Type : runnerのスペック

Slide 52

Slide 52 text

಺෦ಈ࡞TIPFTMYE Execute provider (hashicorp/go-plugin) shoes-lxd Call API Stadium lxd Virtual Machine with actions/runner Stadium lxd Virtual Machine with actions/runner ɾ 
 ɾ ɾ

Slide 53

Slide 53 text

TIPFTMYE w-9%޲͚NZTIPFTQSPWJEFS wૉ๿ʹ-9%"1*Λར༻ w౰ॳ͸NPDL༻ʹ࣮૷ wγϯϓϧނʹ͔ͳΓ҆ఆ͍ͯͨ͠ wlֵ৽తzεέδϡʔϦϯάΞϧΰϦζϜ

Slide 54

Slide 54 text

TIPFTMYE IUUQTHJUIVCDPNXIZXBJUBTIPFTMYECMPCCBFFDDGBCDDBCGDGNBJOHP--

Slide 55

Slide 55 text

TIPFTMYE IUUQTHJUIVCDPNXIZXBJUBTIPFTMYECMPCCBFFDDGBCDDBCGDGNBJOHP--

Slide 56

Slide 56 text

TIPFTMYE ʊਓਓਓਓਓਓʊ ʼɹrand.Intnɹʻ ʉY^Y^Y^Y^Y^Y^ʉ

Slide 57

Slide 57 text

TIPFTMYE w-9%޲͚NZTIPFTQSPWJEFS wૉ๿ʹ-9%"1*Λར༻ w౰ॳ͸NPDL༻ʹ࣮૷ wγϯϓϧނʹ͔ͳΓ҆ఆ͍ͯͨ͠ wlֵ৽తzεέδϡʔϦϯάΞϧΰϦζϜ wNBUISBOEͰىಈઌΛܾఆ w୹໋ͳόΠφϦͳͷͰେ͖ͳ໰୊ͳ͠

Slide 58

Slide 58 text

಺෦ಈ࡞TIPFTMYE Execute provider (hashicorp/go-plugin) shoes-lxd Call API Stadium lxd Virtual Machine with actions/runner Stadium lxd Virtual Machine with actions/runner ɾ 
 ɾ ɾ rand.Intn

Slide 59

Slide 59 text

ෛՙঢ়ଶ

Slide 60

Slide 60 text

ෛՙঢ়ଶ 概ね分散

Slide 61

Slide 61 text

͔͠͠సػ͕😱

Slide 62

Slide 62 text

TIPFTMYE҆৺ਆ࿩่յ wಥવϢʔβར༻͕૿Ճ w4UBEJVN͕଱͖͑Ε่ͣյ🔥 wϦΫΤετ΁ͷόοϑΝϦϯάࣦഊ wṖͷ-9%ϊʔυෆௐ wҟৗʹ"1*઀ଓ͕஗Ԇʢ୆ͷΈʣ wʮۭ͖ʹ༏ઌͯ͠ೖΕΔʯ͕ࠔ೉ w࣮૷্ͷແବ΋͋ͬͨ΋ͷͷʜʜ

Slide 63

Slide 63 text

ෛՙঢ়ଶ

Slide 64

Slide 64 text

ෛՙঢ়ଶ ほぼ0% 🔥🔥🔥

Slide 65

Slide 65 text

#VJME6Q💪

Slide 66

Slide 66 text

TIPFTMYENVMUJ։ൃ wTIPFTMYEͷͭΒΈ wόΠφϦ࣮ߦͳͷͰεςʔτͳ͠ wͪΐͬͱ͙Β͍͸͍࣋ͪͨʜʜ wϥού޲͚σʔϞϯΛ࡞ͬͨ wXIZXBJUBTIPFTMYENVMUJ wTIPFTMYEͷෳ਺୆൛ wύϒϦοΫΫϥ΢υͷΑ͏ʹ 
 "1*&OEQPJOUΛͭʹ

Slide 67

Slide 67 text

಺෦ಈ࡞TIPFTMYE Execute provider (hashicorp/go-plugin) shoes-lxd Call API Stadium lxd Virtual Machine with actions/runner Stadium lxd Virtual Machine with actions/runner ɾ 
 ɾ ɾ

Slide 68

Slide 68 text

಺෦ಈ࡞TIPFTMYENVMUJ Execute provider (hashicorp/go-plugin) shoes-lxd-multi Call API Stadium lxd Virtual Machine with actions/runner Stadium lxd Virtual Machine with actions/runner ɾ 
 ɾ ɾ shoes-lxd- server Call (gRPC)

Slide 69

Slide 69 text

TIPFTMYENVMUJ wΠϯελϯεΛੜ੒͢Δίʔυ͸ 
 TIPFTMYE͔Βίϐϖ wαʔόΫϥΠΞϯτϞσϧ΁ wΩϟύγςΟνΣοΫ wNFUSJDTͷ࣮૷ wར༻͢ΔTUBEJVNӡ༻ͷ؆ૉԽ

Slide 70

Slide 70 text

ෛՙঢ়ଶ TIPFTMYENVMUJޙ

Slide 71

Slide 71 text

ෛՙঢ়ଶ TIPFTMYENVMUJޙ 上限ができた

Slide 72

Slide 72 text

ऩ༰ϝτϦΫε

Slide 73

Slide 73 text

ऩ༰ϝτϦΫε N倍以上は収容しない

Slide 74

Slide 74 text

ऩ༰ϝτϦΫε 他へ順次スケジュール

Slide 75

Slide 75 text

TIPFTMYENVMUJ։ൃ w໾ׂͷ໌֬Խ͕͜͜Ͱ΋Ըܙ wεςʔτϨεʹ࣮૷Մೳ w৑௕Խ͸ԣʹฒ΂Δ͚ͩ wಈ͘Α͏ʹ wQSPWJEFSϞσϧʹΑΓҠߦ΋ؾܰ wNZTIPFTଆͷίʔυมߋͳ͠ wςετςφϯτͰͷࢼݧ΋खܰ

Slide 76

Slide 76 text

ܧଓతͳ#VJME6QͷͨΊͷ 
 $*$%ઓज़

Slide 77

Slide 77 text

಺෦ಈ࡞TIPFTMYENVMUJ Execute provider (hashicorp/go-plugin) shoes-lxd-multi Call API Stadium lxd Virtual Machine with actions/runner Stadium lxd Virtual Machine with actions/runner ɾ 
 ɾ ɾ shoes-lxd- server Call (gRPC)

Slide 78

Slide 78 text

಺෦ಈ࡞TIPFTMYENVMUJ Execute provider 


Slide 79

Slide 79 text

ܧଓతͳ#VJME6Q wίϯςφ࣮ߦ࣌ʹ֎෦͔Βऔಘ w؀ڥม਺PLUGI N w ./shoes-moc k w https://example.com/shoes-mock w։ൃ؀ڥʹ߹Θͤͯࠩ͠׵͑ w։ൃ7.ʹ/HJOYೖΕͯόΠφϦ഑৴ wຊ൪(JU)VC3FMFBTF͔Βऔಘ

Slide 80

Slide 80 text

ܧଓతͳ#VJME6Q apiVersion: myshoes.managed.cycloud.io/v 1 kind: Tenant
 spec : domain: XX X project: YY Y plugin_url: https://github.com/whywaita/shoes-lxd-multi/ releases/download/v0.0.5/shoes-lxd-multi-linux-amd6 4 lxd_image_alias: (snip ) myshoes_version: v1.10.7
 environment_values : MAX_CONCURRENCY_DELETING: '2 ' github_apps: (snip)
 lxd_hosts : - host: https://(snip):8443 # myshoes-stadium-tenantA-00 1 - host: https://(snip):8443 # myshoes-stadium-tenantB-002

Slide 81

Slide 81 text

ܧଓతͳ#VJME6Q apiVersion: myshoes.managed.cycloud.io/v 1 kind: Tenant
 spec : domain: XX X project: YY Y plugin_url: https://github.com/whywaita/shoes-lxd-multi/ releases/download/v0.0.5/shoes-lxd-multi-linux-amd6 4 lxd_image_alias: (snip ) myshoes_version: v1.10.7
 environment_values : MAX_CONCURRENCY_DELETING: '2 ' github_apps: (snip)
 lxd_hosts : - host: https://(snip):8443 # myshoes-stadium-tenantA-00 1 - host: https://(snip):8443 # myshoes-stadium-tenantB-002

Slide 82

Slide 82 text

ܧଓతͳ#VJME6Q apiVersion: myshoes.managed.cycloud.io/v 1 kind: Tenant
 spec : domain: XX X project: YY Y plugin_url: http://10.X.Y.Z/shoes-lxd-multi-linux-amd6 4 lxd_image_alias: (snip ) myshoes_version: v1.10.7
 environment_values : MAX_CONCURRENCY_DELETING: '2 ' github_apps: (snip)
 lxd_hosts : - host: https://(snip):8443 # myshoes-stadium-tenantA-00 1 - host: https://(snip):8443 # myshoes-stadium-tenantB-002

Slide 83

Slide 83 text

ܧଓతͳ#VJME6Q w֤ίϛοτຖʹJNBHFΛϏϧυ w(JU)VC"DUJPOTΛར༻ w ()&$ ()&4ͱ΋ʹ wϦϦʔείϛοτ͚ͩͰ͸ͳ͘શͯ wಛఆςφϯτͷΈCFUB൛ެ։ IUUQTHJUIVCDPNXIZXBJUBNZTIPFTQLHTDPOUBJOFSNZTIPFT

Slide 84

Slide 84 text

ܧଓతͳ#VJME6Q apiVersion: myshoes.managed.cycloud.io/v 1 kind: Tenant
 spec : domain: XX X project: YY Y plugin_url: https://github.com/whywaita/shoes-lxd-multi/ releases/download/v0.0.5/shoes-lxd-multi-linux-amd6 4 lxd_image_alias: (snip ) myshoes_version: v1.10.7
 environment_values : MAX_CONCURRENCY_DELETING: '2 ' github_apps: (snip)
 lxd_hosts : - host: https://(snip):8443 # myshoes-stadium-tenantA-00 1 - host: https://(snip):8443 # myshoes-stadium-tenantB-002

Slide 85

Slide 85 text

ܧଓతͳ#VJME6Q apiVersion: myshoes.managed.cycloud.io/v 1 kind: Tenant
 spec : domain: XX X project: YY Y plugin_url: https://github.com/whywaita/shoes-lxd-multi/ releases/download/v0.0.5/shoes-lxd-multi-linux-amd6 4 lxd_image_alias: (snip ) myshoes_version: sha-xxxxxx
 environment_values : MAX_CONCURRENCY_DELETING: '2 ' github_apps: (snip)
 lxd_hosts : - host: https://(snip):8443 # myshoes-stadium-tenantA-00 1 - host: https://(snip):8443 # myshoes-stadium-tenantB-002

Slide 86

Slide 86 text

ܧଓతͳ#VJME6Q

Slide 87

Slide 87 text

ܧଓతͳ#VJME6Q apiVersion: myshoes.managed.cycloud.io/v 1 kind: Tenant
 spec : domain: XX X project: YY Y plugin_url: https://github.com/whywaita/shoes-lxd-multi/ releases/download/v0.0.5/shoes-lxd-multi-linux-amd6 4 lxd_image_alias: (snip ) myshoes_version: v1.10.7
 environment_values : MAX_CONCURRENCY_DELETING: '2 ' github_apps: (snip)
 lxd_hosts : - host: https://(snip):8443 # myshoes-stadium-tenantA-00 1 - host: https://(snip):8443 # myshoes-stadium-tenantB-002

Slide 88

Slide 88 text

ܧଓతͳ#VJME6Q wSVOOFSΠϝʔδ΋"MXBZT#VJME wXIZXBJUBWJSUVBMFOWJSPONFOUTMYE wຖ೔-9%޲͚ΠϝʔδͷϏϧυ wมԽͷܹ͍͠਌ϦϙδτϦΛଊ͑Δ wఆظతͳΠϝʔδߋ৽ w্هࣾ಺ઃఆͰఆظϏϧυ wదٓ৽͍͠όʔδϣϯΛσϓϩΠ

Slide 89

Slide 89 text

ܧଓతͳ#VJME6Q wϢʔβ૿ՃʹΑΓ4UBEJVN૿ઃ 
 ˠͳ͔ͥδϣϒ࣮ߦ͕஗Ԇ😱 w࣮૷ʹෆඋ͕͋ͬͯ௚ྻಈ࡞ͩͬͨ wՄೳͳݶΓฒྻԽ w-9%(P4%,ʹDPOUFYUରԠΛ 
 $POUSJCVUF MYDMYE

Slide 90

Slide 90 text

ܧଓతͳ#VJME6QͷͨΊ ͷӡ༻

Slide 91

Slide 91 text

؂ࢹ1SPNFUIFVT wશମతʹGET /metricsͰ౷Ұ wNZTIPFT ֤छϚΠΫϩαʔϏε w$ZDMPVE7.্ͷ1SPNFUIFVT w%BTICPBSEΛॱ࣍ڞ༗ w໰୊ղܾ࣌ͷڞ༗ʹར༻ wো֐ൃੜىҼΛॱ࣍ϝτϦΫεʹ௥Ճ<> <>$ZCFS"HFOUͷϓϥΠϕʔτΫϥ΢υ$ZDMPVEͷӡ༻ٴͼϞχλϦϯάʹ͍ͭͯ$0%5 IUUQTXXXTMJEFTIBSFOFUXIZXBJUBDZCFSBHFOUDZDMPVEBENJOJTUSBUJPOBOENPOJUPSJOHGPSDZDMPVE

Slide 92

Slide 92 text

؂ࢹϝτϦΫε Ұྫ wNZTIPFT w(JU)VC"1*ͷ3BUF-JNJU wฒྻ࡞੒ɾ࡟আ਺ wTIPFTMYETFSWFS w4UBEJVNͷར༻཰ wಈ࡞͍ͯ͠ΔΠϯελϯεͷϦετ

Slide 93

Slide 93 text

Πϯελϯε਺͔Βݟ͑Δۀ຿࣌ؒ

Slide 94

Slide 94 text

ӡ༻ͷ೔ʑ

Slide 95

Slide 95 text

ӡ༻ͷ೔ʑ

Slide 96

Slide 96 text

ӡ༻ͷ೔ʑ 対応を実施

Slide 97

Slide 97 text

ϩάΛਖ਼͘͠औಘ wႢಹతͳδϣϒͷ؂ࢹ wޙ௥͍ͯ͠ਖ਼͘͠໰୊Λଊ͑Δඞཁ w-9%ίϯςφϩάDSPOSTZOD w$SPOKPCPO,VCFSOFUFT wCBDLVQNZTRM wEFMFUFMPHT wΞϓϦϩάͷ؂ࢹHPPHMFNUBJM

Slide 98

Slide 98 text

ਖ਼͘͠ӡ༻։ൃ͢Δ͜ͱͰ ਖ਼͘͠ܧଓతͳ#VJME6Q

Slide 99

Slide 99 text

ͦͯ͠

Slide 100

Slide 100 text

5PCFDPOUJOVFE IUUQTHJUIVCDPNXIZXBJUBTIPFTBHFOU

Slide 101

Slide 101 text

·ͱΊ

Slide 102

Slide 102 text

·ͱΊ w$ZDMPVEIPTUFESVOOFSͷ֓ཁ wNZTIPFT wNZTIPFTQSPWJEFSʹ͍ͭͯ wϚϧνςφϯτ wNZTIPFTͰͷऔΓ૊Έ wܧଓతͳ#VJME6Qʹ͍ͭͯ wΞϓϦέʔγϣϯઃܭ wӡ༻͠΍͍͢ΞϓϦέʔγϣϯ։ൃ