Upgrade to Pro — share decks privately, control downloads, hide ads and more …

cocone Teck Talk Vol.2 -EC2を用いたGitLab Runnerのオートスケーリング化

cocone
August 17, 2021

cocone Teck Talk Vol.2 -EC2を用いたGitLab Runnerのオートスケーリング化

オートスケーリング化の説明/手順/ハマり/効果についてお話します。

cocone

August 17, 2021
Tweet

More Decks by cocone

Other Decks in Programming

Transcript

  1. 2 自己紹介
 谷澤 駿一 Tanizawa Shunnichi
 経歴:
  インフラ 約5年 (

    Sier / 事業会社 / 現在) 
 業務内容:
  インフラの保守・運用
 最近の出来事:
  会社まで徒歩15分になりました 
 

  2. 3 ココネのインフラ
 運用
 基盤
 MW
 オンプレ
 
 約300 Server
 Biblia


    Billing等
 多くの
 プロジェクト
 ポケコロ等

  3. 4 
 • GitLab CI/CD 目指す構成
 • 導入背景
 • 現状の確認


    • 導入パターン
 • オートスケーリングの導入
 • 性能評価
 目次 (20分)

  4. 6 GitLab CI/CD 目指す構成 
 gitlab-ci.yml
 ・CI/CDの定義を記載
 ・ジョブ毎に処理を分けることが可能
 ・Autoscalingではジョブ毎に
  

    実行環境が割り当てられる
 ・便利なパラメータが多く存在
 stages:実行順序
   variables:変数
   when : 手動実行を要求等

  5. 7 
 • GitLab CI/CD 目指す構成
 • 導入背景と現状の確認
 • 導入パターン


    • オートスケーリングの導入
 • 性能評価
 目次

  6. 10 導入背景と現状の確認 
 スペックの増強が必要
 
 現状のインスタンス
 t3.small (cpu: 2/memory: 2G)


      
 ピーク
 ジョブの同時実行数: 1
 cpu使用率: 約45%
 メモリ使用率: 約85%

  7. 11 
 • GitLab CI/CD 目指す構成
 • 導入背景と現状の確認
 • 導入パターン


    • オートスケーリングの導入
 • 性能評価
 目次

  8. 14 導入パターン
 これに見合うスペックは?
 開発チームのジョブ実行結果を
 ざっくり観測 (1プロジェクト)
 e2eテストなので重め
 
 t3.small (cpu:

    2/memory: 2G)
 
 6台合わせて
 CPU使用率: 約176%
 メモリ使用率:概算 4-6G
 (瞬間的な負荷は別)
 

  9. 15 導入パターン
 CPU使用率: 約176% メモリ使用率:概算 4-6G
 インスタンスタイプ
 vCPU
 メモリ(GiB)
 価格($)

    / 1h
 t3.small
 2
 2
 0.0272(基準)
 t3.large
 2
 8
 0.1088 (4倍)
 c5.large
 2
 4
 0.107 (約3.9倍)
 m5.large
 2
 8
 0.124 (約4.5倍)
 r5.large
 2
 16
 0.152 (約5.6倍)
 c5.xlarge
 4
 8
 0.214 (約7.8倍)
 m5.xlarge
 4
 16
 0.248 (約9倍)
 (2021/07/02調べ) ・単純にコストだけを比較した場合、t3.smallの約7.8倍以上のコストが発生する。
 ・ジョブの同時実行数を制御しない場合、リソースが枯渇する恐れ。

  10. 17 
 • GitLab CI/CD 目指す構成
 • 導入背景と現状の確認
 • 導入パターン


    • オートスケーリングの導入
 • 性能評価
 目次

  11. 18 オートスケーリングの導入 
 準備するもの
 ・GitLab Server
 ・Runner Server
   OS:

    ubuntu
 ミドルウェア:gitlab-runner / 
 Docker / Docker-machine
 ・Security Group (tcp 22,2376)
 ・AWS Credentials

  12. 20 オートスケーリングの導入 
 Runner URL
 先程確認したトークン 
 Runnerの名前
 Runnerの登録 コマンド:

    gitlab-runner register
 設定ファイルの生成
  /etc/gitlab-runner配下にconfig.tomlが生成される。

  13. 24 オートスケーリングの導入 
 concurrent
 ジョブの同時実行数
 
 limit
 インスタンスの最大数
 concurrent/limitで負荷とコストが決まってくるので 


    状況に応じて設定する。 
 config.tomlはそのままで反映されないので 
 systemctl gitlab-runner restartで設定反映 

  14. 25 オートスケーリングの導入 
 privileged
 docker in dockerを利用する場合 true必須 
 disable_cache


    オートスケーリングを行う場合、
 他のインスタンスのローカルキャッシュ 
 が利用できないため、S3に分散キャッシュ 
 gitlab-ci.ymlでcacheパラメータを利用する 
 場合はtrue必須。
 pull_policy = “if-not-present”
 Dockerイメージがローカルに存在する場合は 
 ダウンロードせず、そのイメージを利用する 

  15. 26 オートスケーリングの導入 
 IdleCount
 最低起動台数(ジョブ実行時に即時受付可能) 
 IdleTime
 ジョブ実行後にインスタンスが削除される 
 までの時間

    (再利用可能)
 use-private-address=true/false
 trueにした場合はprivate ipが通信に利用される 
 ため、private subnetを利用する場合は外部 
 (Docker hub等)と通信するための 
 フォワードプロキシ等が必要。
 ※起動インスタンスにpublic ipが付与されて 
 いるがそれで通信されている訳ではない 
 ex) test-key 
 ※MachineOptionsにもCredentialsの設定が
 必要ですが、aws configureの設定を
 利用できるのでそちらを使用しています。
 ex) --amazonec2access-key= xxxxx

  16. 27 オートスケーリングの導入 
 request-spot-instance=true or false 
 スポットインスタンスをオートスケーリングの 
 インスタンスに活用する場合はtrue

    
 t3.smallの場合オンデマンドと比較し、約1/3の 
 コストで利用できる。
 spot-price
 スポットインスタンスのMAX入札額 
 ※以下のオプションを付与すると、インスタンス 
  作成時にエラーが発生する。
  "amazonec2-block-duration-minutes=xx" 
 ex) test-key 

  17. 28 オートスケーリングの導入 
 request-spot-instance=true or false 
 スポットインスタンスをオートスケーリングの 
 インスタンスに活用する場合はtrue

    
 t3.smallの場合オンデマンドと比較し、約1/3の 
 コストで利用できる。
 spot-price
 スポットインスタンスのMAX入札額 
 ※以下のオプションを付与すると、インスタンス 
  作成時にエラーが発生する。
  "amazonec2-block-duration-minutes=xx" 
 ex) test-key 

  18. 32 オートスケーリングの導入 
 Idle Count 2 
 のうち1台が
 Job01を受付
 Create

    
 IdleCount = 2を維持するため
 新たにdocker-machineが
 インスタンスを起動
 Testステージでは2つのジョブが
 並行稼動する。IdleCountを維持
 するため、インスタンスが起動
 ジョブ実行後はIdle timeで定められ た時間が過ぎた後にIdleCount
 で設定した数までインスタンスが
 削除される。
 Create 
 ※Idleとして残るスポットインスタンスは定期的に更新されて 
  いるようです。 
  これはスポットの有効期限までインスタンスが残り続けるのを 
  防ぐローテーションになっていると思います。 
 Idle Count = 2
 Using
 Using
 Using
 Idle Count = 2

  19. 33 オートスケーリングの導入 
 runner ログの確認
 var/log/syslog もしくは gitlab-runner --debug run


    
 https://gitlab.com/gitlab-org/gitlab-runner/-/issues/3687
 spotインスタンスを利用した場合に発生するエラー
 実装上の問題らしく、エラーは吐くが処理に影響はない。(少しもやもや)
 

  20. 34 
 • GitLab CI/CD 目指す構成
 • 導入背景と現状の確認
 • 導入パターン


    • オートスケーリングの導入
 • 性能評価
 目次

  21. 35 性能評価(稼働状況) 
 稼働状況:
 ・1ヶ月運用した結果オートスケーリングのエラーによるジョブ失敗はなし。 
  (受け付けたジョブ数は約3000程度) 
 ※Spotの特性により、特定のインスタンスプールがなくなることや 


      入札価格がスポット価格を下回ることによりインスタンスが中断する可能性 
   があります。入札は余裕を持って行うことでほぼ回避可能ですが、 
   インスタンスプールが気になる場合はスクリプト等でsubnet-id等を変更 
   する仕組みが必要になります。(とはいえプールも現在は結構安定しています) 
 ・ジョブが並列化され、複数プロジェクトや同一ステージ間で同時に 
  実行できるように
 
 

  22. 37 性能評価(稼働状況) 
 コスト:
 スペックを上げる場合
  0.214(c5.xlarge) * 24(hour) * 30(days)

    = $154.08 
 オートスケーリングを行う場合
  0.009(t3.small spot) * 24(hour) *30(days) * 平均起動台数(2-4) = 約$25 
 
 
 
 
 1ヶ月あたり、約8割程のコスト削減が可能!

  23. 38 参考文献
 ▪Autoscaling GitLab Runner on AWS EC2
 https://docs.gitlab.com/runner/configuration/runner_autoscale_aws/ 


    インストール手順や設定等も上記リンクやページ内リンクにございます。 
 
 ▪gitlab-ci.ymlリファレンス
 https://gitlab-docs.creationline.com/ee/ci/yaml/