$30 off During Our Annual Pro Sale. View Details »

CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021

whywaita
PRO
September 03, 2021
25

CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021

talked by CI/CD Conference 2021 by CloudNative Days https://event.cloudnativedays.jp/cicd2021

Original: https://www.slideshare.net/whywaita/cyberagent-oss-cicd-myshoes-cicd2021

This slide is re-upload by the author.

whywaita
PRO

September 03, 2021
Tweet

More Decks by whywaita

Transcript

  1. CyberAgent における
    OSS の CI/CD 基盤開発
    myshoes 編
    株式会社サイバーエージェント
    CyberAgent group Infrastructure Unit Private Cloud Team
    Cloud Maker / Nakanishi Kento @whywaita
    CI/CD Conference by CloudNative Days @ ONLINE
    / /
    1

    View Slide

  2. Nakanishi Kento / whywaita
    • CloudMaker since
    CyberAgent group Infrastructure Unit Private Cloud team
    • 業務: OpenStack / Kubernetes を使った新機能開発
    • 趣味: ⾃宅インフラ / アニソン
    • AS (CA-LAB) Founderになりました
    • 好きなCI: GitHub Actions, GitLab CI
    2

    View Slide

  3. .GitHub Actionsのrunner事情
    .myshoesとは
    .CyberAgentにおけるmyshoesの活⽤事例
    3

    View Slide

  4. GitHub Actionsの
    runner事情
    4

    View Slide

  5. GitHub Actionsの好きなところ
    • GitHubリポジトリとの連携がスムーズ
    • ⼀通り⼈間がほしい機能が *だいたい* ある
    • on.schedule, on.workflow_dispatch, matrix
    • runner が Virtual Machine (not Container)
    • docker run が普通にできる
    • mkmod / dbus が普通にできる
    • つまり何でも動くということだ
    5

    View Slide

  6. docker run ができる
    • runner内では dockerd がそのまま動いている
    • テストに必要なdockerコンテナ
    • 例: ory/dockertest
    • MySQL, Redis, minio + self build image ok
    • helm/kind-action
    • A GitHub Action for Kubernetes IN Docker
    6

    View Slide

  7. mkmod / dbus が普通にできる
    iSCSI initiator のテストがうごく
    7
    https://github.com/lovi-cloud/go-os-brick/blob/master/test/scripts/init.sh

    View Slide

  8. mkmod / dbus が普通にできる
    LXDを動かしてpacker buildできる
    8
    https://github.com/whywaita/virtual-environments-lxd

    View Slide

  9. 便利 ✨
    9

    View Slide

  10. runnerについて
    • 2種類が存在
    • GitHub-hosted runner
    • GitHubが管理してくれるrunner
    • self-hosted runner
    • ⾃分で管理するrunner
    • actions/runner をVMにインストール
    10

    View Slide

  11. runnerについて
    • 2種類が存在
    • GitHub-hosted runner
    • GitHubが管理してくれるrunner
    • self-hosted runner
    • ⾃分で管理するrunner
    • actions/runner をVMにインストール
    11
    ⼀⻑⼀短

    View Slide

  12. GitHub-hosted Runner
    • Pros
    • 完全マネージド
    • Cons
    • スペックが 2Core GB 固定
    • ⾃前でやるよりは⾼い
    12

    View Slide

  13. self-hosted Runner
    • Pros
    • ⾃⼰のインフラで実⾏可能 (スペック、IP)
    • Cons
    • 冪統性がない
    • self-hosted⽤terraformを管理する
    terraformをself-hostedで動かして……
    13

    View Slide

  14. そんなときに便利なのが……
    14

    View Slide

  15. 15

    View Slide

  16. 16
    とは (OSSとして)

    View Slide

  17. whywaita/myshoes
    • Auto scaling self-hosted runner for GitHub Actions
    • self-hosted runner をjobごとに⽣成、登録
    • runnerにはそれぞれの環境のインフラが利⽤可能
    • shoes-aws, shoes-lxd, shoes-openstack, ⾃作も可
    • OSS: https://github.com/whywaita/myshoes
    17

    View Slide

  18. 利⽤イメージ - ジョブ実⾏
    18
    Jobを実⾏すると……

    View Slide

  19. 利⽤イメージ - runner作成
    19
    myshoesによって⾃動で追加

    View Slide

  20. 利⽤イメージ - ジョブ終了
    20
    Jobが終了すると……

    View Slide

  21. 利⽤イメージ - runner削除
    21
    myshoesによって⾃動で削除

    View Slide

  22. GitHub-hosted と同じ使い⼼地を実現
    22

    View Slide

  23. runner 仕様まとめ
    • 毎回再作成されるため冪等性アリ
    • matrix 対応
    • N個 jobがある場合はN個 runnerを作成
    • イメージはshoes providerごとに指定可能
    • GitHub-hostedに限りなく近くする事推奨
    23

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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のスペック

    View Slide

  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

    View Slide

  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

    View Slide

  31. 夢がひろがるmyshoes-provider
    • Public Cloudの安価なインスタンス
    • AWS Spot Instances, GCP Preemptible Instances
    • Private Cloud, ⾃宅サーバ
    • LXD, OpenStack
    • 専⽤ハードウェア対応
    • GPU, FPGA
    31

    View Slide

  32. CyberAgentにおける
    myshoesの活⽤事例
    32

    View Slide

  33. 前提知識: Cycloud
    • Cy(berAgent)cloud
    • Private Cloud
    • IaaS, Managed Service
    • サイバーエージェント向けにカスタマイズ
    • 安価に計算機資源を利⽤可 🥰
    33

    View Slide

  34. CyberAgentのCI事情
    • 技術選定は各プロダクトが⾏う
    • github.com , GitHub Enterprise Server, GitLab
    • Jenkins, Travis CI, CircleCI, Drone CI, Bitrise
    • エンタープライズ契約を⾏うことも
    ex:) CircleCI Enterprise
    • GitHub Actionsもbeta時代から⼀部プロダクトで導⼊
    34

    View Slide

  35. CyberAgentのCI事情
    • Circle CI Enterprise からGitHub Actionsへの移⾏需要
    • Enterprise 契約の終了
    • コストメリットの低下
    • サポートコストの増加
    • Cycloudの安価な計算機資源が利⽤できるのでは?
    → myshoesの開発へ
    35

    View Slide

  36. CyberAgent では
    • myshoesをマネージドサービスとして提供
    • Cycloudユーザでも⾮ユーザでも利⽤可
    • GHES, GHEC, github.com 全対応
    • 社内のほぼ全てのユースケースに対応
    • マルチテナントとして提供
    36

    View Slide

  37. CyberAgentにおけるmyshoes構成
    • whywaita/myshoes + shoes-lxd
    • マルチテナント提供: myshoes-controller
    • Kubernetes Controller
    • MySQL Cluster (with orchestrator)
    • Docker Registry v , LXD image server
    37

    View Slide

  38. 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

    View Slide

  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 利⽤

    View Slide

  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

    View Slide

  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を直接利⽤

    View Slide

  42. さらに
    42

    View Slide

  43. 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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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との接続は不可

    View Slide

  48. CyberAgentにおけるmyshoes仕様
    • Cycloud VMをstadiumとし
    GitHub-hostedよりも安価に提供
    • LXDイメージはGitHub-hostedとほぼ同じイメージを利⽤
    • https://github.com/whywaita/virtual-environments-lxd
    • ↑ + apt repoなど若⼲⼿を加えたもの
    • runnerスペック 2Core GB ~ Core GB
    48

    View Slide

  49. 今後の展望
    • OSSとして
    • shoes provider, Documentsの拡充
    • ⼿動オペレーションの絶滅
    • マネージドサービスとして (要望次第)
    • GPU runner ?
    • macOS runner?
    49

    View Slide

  50. まとめ
    • GitHub Actionsについて説明
    • Pros / Cons, runnerについて
    • whywaita/myshoes つくりました
    • 便利に、安価にGitHub Actionsをつかえます
    • 引き続き運⽤ / 機能開発していきます
    • 使ってみたレポ、Issue、PRお待ちしております!
    50

    View Slide