/ Azure • LXD • OpenStack • etc etc ② Send a webhook to myshoes ① Request job ③ Execute provider Virtual Machine with actions/runner ④ Create an instance ⑤ Register runner
/ Azure • LXD • OpenStack • etc etc ① Get a list of runner ③ Execute provider Virtual Machine with actions/runner ④ Delete an instance ② Check to delete runner
/ Azure • LXD • OpenStack • etc etc ② Send a webhook to myshoes ① Request job ③ Execute provider Virtual Machine with actions/runner ④ Create an instance ⑤ Register runner
/ Azure • LXD • OpenStack • etc etc ③ Execute provider Virtual Machine with actions/runner ④ Create an instance ② Send a webhook to myshoes ① Request job ⑤ Register runner
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のスペック
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
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
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
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 利⽤
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
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を直接利⽤
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
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
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
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
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との接続は不可