Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
cocone Teck Talk Vol.2 -EC2を用いたGitLab Runnerのオー...
Search
cocone
August 17, 2021
Programming
1.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
cocone Teck Talk Vol.2 -EC2を用いたGitLab Runnerのオートスケーリング化
オートスケーリング化の説明/手順/ハマり/効果についてお話します。
cocone
August 17, 2021
More Decks by cocone
See All by cocone
Cocone_Research_Center_2025.pdf
cocone
0
390
20240301_cocone_EMゆるミートアップvol6_LT資料
cocone
0
960
2024_cocone-wellbeing
cocone
0
5.3k
2023夏季合同企業説明会ココネ
cocone
0
420
cocone TECH TALK Vol.6 - リアルタイム対戦xバックエンドアーキテクチャ
cocone
0
740
cocone TECH TALK Vol.6 - ココネグループのブロックチェーン MOOI Network とのバックエンド連携
cocone
0
680
cocone TECH TALK Vol.6 - Kotlin バックエンドアーキテクチャ of アバターサービス
cocone
0
690
cocone corporation(JPN)/Handbook2022
cocone
1
31k
cocone Tech Talk vol.5 - Unity Dotsを使ってみた
cocone
0
2.6k
Other Decks in Programming
See All in Programming
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
380
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
120
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
5.2k
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
970
APNsからLive Activityを開始する話
yumnumm
0
170
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
770
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
1.6k
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
610
dotNET_vulnclicker_intro.pdf
deka_morita
0
140
Featured
See All Featured
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
Odyssey Design
rkendrick25
PRO
2
880
Code Reviewing Like a Champion
maltzj
529
40k
Building an army of robots
kneath
307
47k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Utilizing Notion as your number one productivity tool
mfonobong
4
620
Tell your own story through comics
letsgokoyo
1
1.1k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
300
Everyday Curiosity
cassininazir
0
360
Designing for Performance
lara
612
70k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
Transcript
EC2を用いた GitLab Runnerの オートスケーリング化 開発部 谷澤駿一
2 自己紹介 谷澤 駿一 Tanizawa Shunnichi 経歴: インフラ 約5年 (
Sier / 事業会社 / 現在) 業務内容: インフラの保守・運用 最近の出来事: 会社まで徒歩15分になりました
3 ココネのインフラ 運用 基盤 MW オンプレ 約300 Server Biblia
Billing等 多くの プロジェクト ポケコロ等
4 • GitLab CI/CD 目指す構成 • 導入背景 • 現状の確認
• 導入パターン • オートスケーリングの導入 • 性能評価 目次 (20分)
5 GitLab CI/CD 目指す構成 構成内容 gitlab-ci.yml:CI/CDの定義を記載 Config.toml:Runnerの設定を記載
6 GitLab CI/CD 目指す構成 gitlab-ci.yml ・CI/CDの定義を記載 ・ジョブ毎に処理を分けることが可能 ・Autoscalingではジョブ毎に
実行環境が割り当てられる ・便利なパラメータが多く存在 stages:実行順序 variables:変数 when : 手動実行を要求等
7 • GitLab CI/CD 目指す構成 • 導入背景と現状の確認 • 導入パターン
• オートスケーリングの導入 • 性能評価 目次
8 導入背景と現状の確認 きっかけ 開発側からの相談。 ・ジョブが同時に一つしか実行できない ・複数ジョブ/プロジェクトの同時実行で待ち時間が発生
9 導入背景と現状の確認 Runnerを登録した際に発行される サイトのURL Config.toml concurrent:ジョブの同時実行数 ジョブが同時に一つしか実行できない ➔ Runnerの設定によるものだった。
これで問題解決?
10 導入背景と現状の確認 スペックの増強が必要 現状のインスタンス t3.small (cpu: 2/memory: 2G)
ピーク ジョブの同時実行数: 1 cpu使用率: 約45% メモリ使用率: 約85%
11 • GitLab CI/CD 目指す構成 • 導入背景と現状の確認 • 導入パターン
• オートスケーリングの導入 • 性能評価 目次
12 導入パターン マシンスペックの 増強 対応案A オートスケーリングの実 装(GitLab公式) 対応案B
13 導入パターン マシンスペックの 増強 対応案A 良い点 ・対応や管理が簡単 懸念点 ・1台当たりのコストが増加
・利用していない時間帯のコスト ・複数プロジェクトの同時利用時の負荷
14 導入パターン これに見合うスペックは? 開発チームのジョブ実行結果を ざっくり観測 (1プロジェクト) e2eテストなので重め t3.small (cpu:
2/memory: 2G) 6台合わせて CPU使用率: 約176% メモリ使用率:概算 4-6G (瞬間的な負荷は別)
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倍以上のコストが発生する。 ・ジョブの同時実行数を制御しない場合、リソースが枯渇する恐れ。
16 導入パターン オートスケーリングの実 装 対応案B 良い点 ・必要な時に必要な数で処理を実行 ・リソースやコストの最適化 懸念点
・設定方法 ・運用実績
17 • GitLab CI/CD 目指す構成 • 導入背景と現状の確認 • 導入パターン
• オートスケーリングの導入 • 性能評価 目次
18 オートスケーリングの導入 準備するもの ・GitLab Server ・Runner Server OS:
ubuntu ミドルウェア:gitlab-runner / Docker / Docker-machine ・Security Group (tcp 22,2376) ・AWS Credentials
19 オートスケーリングの導入 Runnerの種類 Shared: 全プロジェクト共通 group: グループのプロジェクト用 specific 特定のプロジェクト用
今回はSharedとしてRunnerを登録する Runnerの登録 <ご自身のgitlab-url>/admin/runners
20 オートスケーリングの導入 Runner URL 先程確認したトークン Runnerの名前 Runnerの登録 コマンド:
gitlab-runner register 設定ファイルの生成 /etc/gitlab-runner配下にconfig.tomlが生成される。
dockerイメージ CI/CDの実行環境の中(オートスケーリングマシン)でもdockerコマンドを 利用する場合はdind(docker in docker)イメージを指定する。 21 オートスケーリングの導入 !マークがついている場合 コマンド:
gitlab-runner verify gitlab-runner h でヘルプを確認可能
dockerイメージ CI/CDの実行環境の中(オートスケーリングマシン)でもdockerコマンドを 利用する場合はdind(docker in docker)イメージを指定する。 22 オートスケーリングの導入 !マークがついている場合 コマンド:
gitlab-runner verify gitlab-runner h でヘルプを確認可能
23 オートスケーリングの導入 ようやく config.tomlの説明 公式のオートスケーリングに関しては、 このファイルでほぼ全て定義しているため これを理解していればほぼゴールです。
24 オートスケーリングの導入 concurrent ジョブの同時実行数 limit インスタンスの最大数 concurrent/limitで負荷とコストが決まってくるので
状況に応じて設定する。 config.tomlはそのままで反映されないので systemctl gitlab-runner restartで設定反映
25 オートスケーリングの導入 privileged docker in dockerを利用する場合 true必須 disable_cache
オートスケーリングを行う場合、 他のインスタンスのローカルキャッシュ が利用できないため、S3に分散キャッシュ gitlab-ci.ymlでcacheパラメータを利用する 場合はtrue必須。 pull_policy = “if-not-present” Dockerイメージがローカルに存在する場合は ダウンロードせず、そのイメージを利用する
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
27 オートスケーリングの導入 request-spot-instance=true or false スポットインスタンスをオートスケーリングの インスタンスに活用する場合はtrue
t3.smallの場合オンデマンドと比較し、約1/3の コストで利用できる。 spot-price スポットインスタンスのMAX入札額 ※以下のオプションを付与すると、インスタンス 作成時にエラーが発生する。 "amazonec2-block-duration-minutes=xx" ex) test-key
28 オートスケーリングの導入 request-spot-instance=true or false スポットインスタンスをオートスケーリングの インスタンスに活用する場合はtrue
t3.smallの場合オンデマンドと比較し、約1/3の コストで利用できる。 spot-price スポットインスタンスのMAX入札額 ※以下のオプションを付与すると、インスタンス 作成時にエラーが発生する。 "amazonec2-block-duration-minutes=xx" ex) test-key
29 オートスケーリングの導入
30 オートスケーリングの導入 gitlab-ci.yml stages: ジョブの依存関係 cache: before_scriptの結果をpathsに保存
artifacts: ジョブの実行結果を保存
31 オートスケーリングの導入
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
33 オートスケーリングの導入 runner ログの確認 var/log/syslog もしくは gitlab-runner --debug run
https://gitlab.com/gitlab-org/gitlab-runner/-/issues/3687 spotインスタンスを利用した場合に発生するエラー 実装上の問題らしく、エラーは吐くが処理に影響はない。(少しもやもや)
34 • GitLab CI/CD 目指す構成 • 導入背景と現状の確認 • 導入パターン
• オートスケーリングの導入 • 性能評価 目次
35 性能評価(稼働状況) 稼働状況: ・1ヶ月運用した結果オートスケーリングのエラーによるジョブ失敗はなし。 (受け付けたジョブ数は約3000程度) ※Spotの特性により、特定のインスタンスプールがなくなることや
入札価格がスポット価格を下回ることによりインスタンスが中断する可能性 があります。入札は余裕を持って行うことでほぼ回避可能ですが、 インスタンスプールが気になる場合はスクリプト等でsubnet-id等を変更 する仕組みが必要になります。(とはいえプールも現在は結構安定しています) ・ジョブが並列化され、複数プロジェクトや同一ステージ間で同時に 実行できるように
36 性能評価(コスト)
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割程のコスト削減が可能!
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/
39 終わりに 本日お話させて頂いた内容は、特に難しい作業は必要なく、 性能やコストに多くのメリットをもたらすことができます。 気になった方はぜひ、お試しください。
ご清聴ありがとうございました!!