talked by CI/CD Conference 2021 by CloudNative Days https://event.cloudnativedays.jp/cicd2021
re-upload: https://speakerdeck.com/whywaita/cyberagent-oss-cicd-myshoes-cicd2021
24. 内部動作 - 追加時
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
25. 内部動作 - 削除時
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
26. 内部動作 - 追加時
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
27. 内部動作 - 追加時
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
28. 内部動作 - 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のスペック
29. 内部動作 - 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
30. 内部動作 - 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
39. 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 利⽤
40. 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
41. 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を直接利⽤
44. 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
45. 既存 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
46. 既存 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
47. 既存 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との接続は不可