AKS上でgithubセルフホストランナーを動かす

Pocket

オーバービュー

GithubActionのセルフホストランナーをAKS上でPodとして動かしてみた。

GithubAction のセルフホストランナー

  • GithubActionの実行環境を独自に作れる仕組み。
  • Githubの組織単位、あるいはリポジトリ単位で作成できる。
  • 起動時にtoken認証が必要であり、数時間で期限が切れるのでオートスケールはできない。
  • 期限が切れる前なら複数台一気に立ち上げることは可能。

ユースケース

  • DockerビルドしてVNETからのみアクセスできるコンテナレジストリにpushするとか
  • マネージドIDでログインしてAzureサービスをCIから使わせるとか

Podの構成

  • ランナー起動時にGithubに対してtoken認証するが、此のときに作成されるファイルをマウントしたAzureFileで永続化している
  • az-cli入れようと思ったら700Mくらいイメージのサイズが増えたので止めた
  • 最低限のツールを入れておくのでdockerで好き勝手してくれ、という思想
  • docker runするときにボリュームマウントする場合、daemon側のボリュームが使われる
  • docker-shareをEmptyDirで共有し、docker runするときにボリュームマウントできるように設計している
  • デーモンとdocker-shareを外部に出して共通化しても良いかも

aad-pod-identity

マネージドIDとは?

  • VMやサービスにシステムIDとして割り当てられる
  • 初期の頃はManagedServiceIdentityと呼ばれていたらしい

コンポーネント

コンポーネント 役割
AzureIdentity マネージドIDのリソースIDとクライアントIDを設定する
AzureIdentityBinding AzureIdentityとPodを紐付ける
mic コントローラー。Nodeに設定されたマネージドID(xxx-agentpool)の権限を使って対象のマネージドIDをアサインする。
※そのため、対象のマネージドIDにxxxx-agentpoolマネージドIDへマネージドIDオペレーターの権限を付与する必要がある。
nmi daemonsetとして動作し、AzureInstanceMetadataエンドポイントへの通信を仲介する

動作イメージ

注意点

  • サブスクリプションあたりの割当数上限は2000まで。
Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です