内部動作 - 追加時
24
Cloud Provider
• AWS / GCP / Azure
• LXD
• OpenStack
• etc etc
② Send a webhook
to myshoes
① Request job
③ Execute provider
Virtual Machine
with actions/runner
④ Create an instance
⑤ Register runner
Slide 25
Slide 25 text
内部動作 - 削除時
25
Cloud Provider
• AWS / GCP / Azure
• LXD
• OpenStack
• etc etc
① Get a list of runner
③ Execute provider
Virtual Machine
with actions/runner
④ Delete an instance
② Check to delete runner
Slide 26
Slide 26 text
内部動作 - 追加時
26
Cloud Provider
• AWS / GCP / Azure
• LXD
• OpenStack
• etc etc
② Send a webhook
to myshoes
① Request job
③ Execute provider
Virtual Machine
with actions/runner
④ Create an instance
⑤ Register runner
Slide 27
Slide 27 text
内部動作 - 追加時
27
Cloud Provider
• AWS / GCP / Azure
• LXD
• OpenStack
• etc etc
③ Execute provider
Virtual Machine
with actions/runner
④ Create an instance
② Send a webhook
to myshoes
① Request job
⑤ Register runner
Slide 28
Slide 28 text
内部動作 - shoes provider
28
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
.Runner Name : runnerに付けるべき名前
.Setup Script : actions/runner展開スクリプト
.Resource Type : runnerのスペック
Slide 29
Slide 29 text
内部動作 - shoes-aws
29
Amazon Web Services
Execute provider
(hashicorp/go-plugin)
EC
with actions/runner
shoes-aws
EC
with actions/runner
EC
with actions/runner
Call AWS REST API
.Runner Name to tag “Name”
.Setup Script to cloud-init user-data
.Resource Type to AWS Instance Type
Slide 30
Slide 30 text
内部動作 - shoes-lxd
30
LXD server
Execute provider
(hashicorp/go-plugin)
LXD Container
with actions/runner
shoes-lxd
Call LXD REST API
LXD Container
with actions/runner
LXD Container
with actions/runner
.Runner Name to Instance name
.Setup Script to cloud-init user-data
.Resource Type to limits.cpu, limits.memory
CyberAgentにおけるmyshoes構成
• whywaita/myshoes + shoes-lxd
• マルチテナント提供: myshoes-controller
• Kubernetes Controller
• MySQL Cluster (with orchestrator)
• Docker Registry v , LXD image server
37
Slide 38
Slide 38 text
Kubernetes Cluster
CyberAgentにおけるmyshoes構成
38
myshoes-proxy
(Global IP)
github.com
GHES
User
Tenant A
Tenant B
webhook
myshoes REST API
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
k s Service
k s Service
for Service X
for Service Y
k s Service
Tenant C
k s Service
Slide 39
Slide 39 text
Kubernetes Cluster
CyberAgentにおけるmyshoes構成
39
myshoes-proxy
(Global IP)
github.com
GHES
User
Tenant A
Tenant B
webhook
myshoes REST API
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
k s Service
k s Service
for Service X
for Service Y
k s Service
Tenant C
k s Service
myshoes-proxy
• HTTPプロキシ
• webhook from GitHub
• myshoes REST API
• Prometheusメトリクス
• Kubernetes Pod
• svc.cluster.local 利⽤
Slide 40
Slide 40 text
Kubernetes Cluster
CyberAgentにおけるmyshoes構成
40
myshoes-proxy
(Global IP)
github.com
GHES
User
Tenant A
Tenant B
webhook
myshoes REST API
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
k s Service
k s Service
for Service X
for Service Y
k s Service
Tenant C
k s Service
myshoes-controller
• operator-sdk
• Tenant Resource
• Service, Secret,
Deployment
Slide 41
Slide 41 text
Kubernetes Cluster
CyberAgentにおけるmyshoes構成
41
myshoes-proxy
(Global IP)
github.com
GHES
User
Tenant A
Tenant B
webhook
myshoes REST API
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
k s Service
k s Service
for Service X
for Service Y
k s Service
Tenant C
k s Service
• shoes-lxd
• job実⾏ごとに
LXDインスタンス作成
• CoW + dockerdのためbtrfs
• btrfs subvolume
• NVMe volumeを直接利⽤
Slide 42
Slide 42 text
さらに
42
Slide 43
Slide 43 text
Kubernetes Cluster
CyberAgentにおけるmyshoes構成
43
myshoes-proxy
(Global IP)
github.com
GHES
User
Tenant A
Tenant B
webhook
myshoes REST API
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
k s Service
k s Service
for Service X
for Service Y
k s Service
Tenant C
k s Service
Slide 44
Slide 44 text
CyberAgentにおけるmyshoes構成
44
Tenant A
Tenant B
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
k s Service
k s Service
for Service X
for Service Y
k s Service
Tenant C
k s Service
Slide 45
Slide 45 text
既存 Cycloud
CyberAgentにおけるmyshoes構成
45
Tenant A
Tenant B
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
k s Service
k s Service
for Service X
for Service Y
k s Service
Tenant C
k s Service
Service VM
Service VM
Service VM
Slide 46
Slide 46 text
既存 Cycloud
CyberAgentにおけるmyshoes構成
46
Tenant A
Tenant B
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
k s Service
k s Service
for Service X
for Service Y
k s Service
Tenant C
k s Service
Service VM
Service VM
Service VM
Slide 47
Slide 47 text
既存 Cycloud
CyberAgentにおけるmyshoes構成
47
Tenant A
Tenant B
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
Stadium VM
Stadium VM
Stadium VMs
LXD (listen )
k s Service
k s Service
for Service X
for Service Y
k s Service
Tenant C
k s Service
Service VM
Service VM
Service VM
既存 Cycloud ユーザは
⾃テナントのVMとの接続が可能
他テナントのVMとの接続は不可