Azure Kubernetes Service で構築する GitHub Actions Runner Controller

1.9K Views

February 19, 25

スライド概要

2025/02/19 第52回 Tokyo Jazug Night の登壇資料です。

profile-image

都内で働いているインフラエンジニアです。Azure を含むMicrosoft 製品、インフラ、開発周りに興味があります。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Azure Kubernetes Service で構築する GitHub Actions Runner Controller 2025/02/19 第52回 Tokyo Jazug Night Kazuki Yamabe

2.

アジェンダ • 自己紹介 • 大規模な環境でGitHub Actions を使うときの課題 • Self-hosted runner & Actions Runner Controller • Azure Kubernetes Service とは • Azure サービスでARC を構成する • Actions Runner Controller on AKS の運用 • まとめ • 参考資料 2

3.

アジェンダ • 自己紹介 • 大規模な環境でGitHub Actions を使うときの課題 • Self-hosted runner & Actions Runner Controller • Azure Kubernetes Service とは • Azure サービスでARC を構成する • Actions Runner Controller on AKS の運用 • まとめ • 参考資料 3

4.

自己紹介 名前:Kazuki Yamabe 所属:株式会社エーピーコミュニケーションズ 得意分野:Azure、Microsoft 製品、インフラ全般の構築・運用 IaC、CI/CD 構築・運用、など ◼ ブログ・SNS • ブログ:https://www.kdkwakaba.com/ • X:@kdk_wakaba • Linkedin:kdk-wakaba 4

5.

はじめに ■本セッションでお話しないこと • GitHub Actions Runner Controller の具体的な構築手順、設定 • Azure のコンテナサービス、他クラウドのKubernetes サービスとの比較 ■注意事項 • 本セッションは2025年2月19日現在の内容となります • Kubernetes の実務歴1ヶ月程度の人のため、誤りがあればご指摘いただければ幸いです 5

6.

アジェンダ • 自己紹介 • 大規模な環境でGitHub Actions を使うときの課題 • Self-hosted runner & Actions Runner Controller • Azure Kubernetes Service とは • Azure サービスでARC を構成する • Actions Runner Controller on AKS の運用 • まとめ • 参考資料 6

7.

大規模な環境でGitHub Actions を使うときの課題 大規模な環境でGitHub Actions の運用をしているとこのような課題が発生する。 • CI/CD パイプラインを実行するホストのスペックを上げたい、カスタマイズしたい • セキュリティ要件が厳しく、システムと外部サービスの接続を極力避けたい • GitHub Actions の従量課金による料金を削減したい 7

8.

アジェンダ • 自己紹介 • 大規模な環境でGitHub Actions を使うときの課題 • Self-hosted runner & Actions Runner Controller • Azure Kubernetes Service とは • Azure サービスでARC を構成する • Actions Runner Controller on AKS の運用 • まとめ • 参考資料 8

9.

Self-hosted runner & Actions Runner Controller GitHub Actions にはGitHub ホストのRunner とSelf-hosted Runner がある。 • GitHub 管理のホストが実行基盤 • 標準ランナーはスペックが固定。Team プラン以 上はより大きいランナーを利用可能 • 利用した時間に応じた従量課金 • ユーザー所有のホストが実行基盤 • スペック、実行環境のカスタマイズはユーザー管理 • ユーザー所有のホストによる課金 GitHub hosted Runner Self-hosted Runner 9

10.

Self-hosted runner & Actions Runner Controller ■メリット • ハードウェア、実行環境のカスタマイズ性に優れている • 内部ネットワーク内からシステムに接続するためセキュリティ面を強化できる • GitHub Actions による従量課金が発生しない ■デメリット • Self-hosted runner 環境の運用・管理コストが発生する • Self-hosted runner に関する学習コストがかかる • ユーザー所有のホストによってスケーリングが困難となる可能性がある 10

11.

Self-hosted runner & Actions Runner Controller とはいえSelf-hosted runner も万能ではない。 需要が増えたので Runner をスケールしたい けど急にホストを 増やせない… 実行後にクリーンな 実行環境を維持したい Self-hosted Runenr 環境の 構築、管理が大変 11

12.

Self-hosted runner & Actions Runner Controller ARC はSelf-hosted runner の調整、スケーリングを行うKubernetes Operator。 ワークフローの数に応じた Self-hosted runner を 自動スケーリング・割り当て 一時コンテナによるクリーンな 実行環境による ワークフロー実施 Helm チャートベースの 構築、管理 12

13.

Self-hosted runner & Actions Runner Controller ARC にはController-manager、Listener、Runner Scale Set の3つの役割がある。 引用元:Actions Runner Controller について 13

14.

アジェンダ • 自己紹介 • 大規模な環境でGitHub Actions を使うときの課題 • Self-hosted runner & Actions Runner Controller • Azure Kubernetes Service とは • Azure サービスでARC を構成する • Actions Runner Controller on AKS の運用 • まとめ • 参考資料 14

15.

Azure Kubernetes Service とは - 概要 Azure 上でコンテナアプリケーションを実行するマネージドのKubernetes サービス。 Kubernetes の 複雑な運用・管理 の負担削減 クラウドの利点を 活かした高可用性、 価格レベルに応じた SLA の保証 需要に応じた自動 スケーリングや イベントドリブンの 自動スケーリング (KEDA) をサポート ノードプールの VM サイズ、クラス ター数に応じた 従量課金 15

16.

Azure Kubernetes Service とは – AKS でARC を使うメリット AKS でCI/CD 基盤を作るため、Azure 前提となるが以下のようなメリットがある。 • Azure サービスとの親和性が高く、連携を行うことで素早く環境を準備できる - Load Balancer、Entra ID やRBAC、Azure Monitor との連携 • マネージドサービスにおける運用・管理工数の削減 - ハードウェアやネットワーク周りの管理をAzure 側に任せられる - Kubernetes の自動アップグレードやAzure CLI を介したコマンドの実行と運用周りの充実 • CI/CD プロセスにおけるセキュリティ面の向上 - システムから外部のCI/CD 基盤と直接通信しないため、セキュリティ要件の厳しい場合に良い 16

17.

アジェンダ • 自己紹介 • 大規模な環境でGitHub Actions を使うときの課題 • Self-hosted runner & Actions Runner Controller • Azure Kubernetes Service とは • Azure サービスでARC を構成する • Actions Runner Controller on AKS の運用 • まとめ • 参考資料 17

18.

Azure サービスでARC を構成する – 構成のイメージ 18

19.

Azure サービスでARC を構成する – ネットワーク • ARC は各システム (サービス) と通信できる環境を作る - IP レンジが重複しないように仮想ネットワークのピアリングで相互接続する - 仮想ネットワーク間の通信量が多くなるとピアリングの料金も多くなるため注意 • 本番環境とステージング/開発環境のRunner はネットワークを分離させる - 内部の不正な操作、実行防止になる - ステージング環境でやったつもりが本番環境に…、みたいな事故も無くせる - 環境を分ける分だけ費用がかかるため、規模に応じて分離する 19

20.

Azure サービスでARC を構成する - セキュリティ① • プライベートクラスターによる外部公開されないKubernetes 環境を作成可能 - GitHub → ARC → システム、とシステムに直接接続しないためセキュリティ向上に繋がる - AKS からGitHub への通信にはNAT Gateway のような外部通信手段を準備する - パブリックからプライベート、プライベートからパブリックみたいな変更はできない • 仮想ネットワークのピアリングを行う場合、必要なところのみNSG で許可する - 大雑把に通信許可をすると意図しない通信を行う可能性も - このあたりはAzure 環境払い出しの時にまとめられると良い 20

21.

Azure サービスでARC を構成する - セキュリティ② • Microsoft Entra 統合やAzure RBAC によるアクセス制御が可能 • 必要に応じてKubernetes RBAC による詳細な制御も利用する 21

22.

アジェンダ • 自己紹介 • 大規模環境でGitHub Actions を使うときの課題 • Self-hosted runner & Actions Runner Controller • Azure Kubernetes Service とは • Azure サービスでARC を構成する • Actions Runner Controller on AKS の運用 • まとめ • 参考資料 22

23.

Actions Runner Controller on AKS の監視① • Azure Monitor とContainer Insights の連携によるログ、パフォーマンスの取得 - ノードからPod のリソース使用率や正常性と基本的な項目を確認できる - モニタリングする項目を一つ一つ設定する工数も削減できる • Application Insights との連携によるログ、メトリクス、分散トレースの取得 • OpenTelemetry の有効化によりARC のパフォーマンス周りをまとめられる • 収集したログはLog Analytics ワークスペースに格納 - ログの分析や他のAzure サービスへの利用ができる - ワークフローの実行が多いとARC のメトリクスが肥大化することもあるため注意する 23

24.

Actions Runner Controller on AKS の監視② AKS はManaged Prometheus、Managed Grafana の関連付けにより容易に可視化をできる。 ※ ただしManaged Grafana はユーザー数に応じた月額課金があるためユーザーの増やしすぎは注意 24

25.

Actions Runner Controller on AKS の管理・アップデート • ArgoCD などのGitOps ツールによる自動デプロイ - Runner の台数、スペックの調整と安定するまで変更が多いので早めに自動化する • Runner イメージをカスタマイズする場合はOS、各種ツールのアップデート管理を行う - GitHub hosted と違い管理側で対応が必要なため、定期的に実施する - Azure Container Registry のタスク、GitHub Actions で自動化すると管理工数削減に • AKS はKubernetes バージョンの自動アップグレード機能もある - 開発者の利用していない時に実施で工数削減も 25

26.

Actions Runner Controller on AKS の需要予測 • 大企業だとワークフローの実行頻度が多くなるため、定期的に需要を見直す - VM サイズを絞りすぎるとワークフロー実行までの待ち時間が長くなるので注意する - Listener からRunner を割り当てるまでの時間を定期的にモニタリングする - 一時ランナーを事前に作成する場合、ワークフロー実行中のRunner 数もモニタリングする • Node プールのサイズ変更はプールの新規作成 (追加) が必要 - 予算に余裕があればRunner 数を数台増やせるスペックを確保しておきたい - 急な切り替えは開発者のワークフロー実行に影響があるので注意する 26

27.

Actions Runner Controller on AKS の料金周り • 利用者の需要に合わせてノードのオートスケーリングを利用 - ユーザーノードプールをゼロスケーリングすることも可能 - GitHub Actions のSchedule を使った夜間、休日ジョブがある場合は必要な分は残す - 利用しない時間帯がある場合はクラスター停止も検討 • 需要に応じたノードプールのサイズ (VM サイズ) 、周辺リソースを見直す - 不必要に大きいサイズを使っている場合はサイズの縮小も検討する - ログ、メトリクスの容量も増えると費用がかかってくる • AKS はノードのサイズに応じた予約、Savings Plan、スポットインスタンスが利用可能 - リソースの安定してきた時に割引プランでコスト削減も検討する - 検証用、優先度の低いジョブ実行用にスポットノードを利用する 27

28.

Actions Runner Controller on AKS 開発者向けの整備 • Azure 環境の払い出しとチームが異なる場合は関連チームと連携 • 開発者向けのドキュメント準備 (整備) や勉強会の実施 - 開発者のGitHub Actions 習熟度に合わせて相談会や勉強会を実施する • 社内固有の設定やツール操作をカスタムアクション化 - 開発者が同じ設定を何度も書くならヒアリングしつつカスタムアクションで提供もあり - ただしカスタムアクション化すると管理工数が増えるため、精査した上で作成する 28

29.

アジェンダ • 自己紹介 • 大規模環境でGitHub Actions を使うときの課題 • Self-hosted runner & Actions Runner Controller • Azure Kubernetes Service とは • Azure サービスでARC を構成する • Actions Runner Controller on AKS の運用 • まとめ • 参考資料 29

30.

まとめ • ARC はSelf-hosted runner のスケーリングに関する課題を解決するKubernetes のOperator • マネージドなAKS と関連するAzure サービスを組み合わせることで、Azure 上での CI/CD 基盤の構築・運用における様々な負担を削減できる • AKS 上のARC を運用するにはKubernetes だけでなくCI/CD 基盤のモニタリングや 需要予測、開発者のサポートが必要 30

31.

参考資料 • 自己ホスト ランナーの概要 • Actions Runner Controller について • Azure Kubernetes Service (AKS) とは • Azure Kubernetes Service (AKS) でのアクセスと ID オプション • Azure Kubernetes Service を監視する • Azure Kubernetes Service (AKS) でノード プールのサイズを変更する • Azure Kubernetes Services (AKS) でのコスト最適化に関するベスト プラクティス 31

32.

ご清聴ありがとうございました。 32