オーバービュー
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
-
これを使うと Azure のマネージド ID を pod に割り当てることができます。
-
インストール方法は2種類。
- oss としてインストール
- helm or yaml
- AKS のアドオンとしてインストール(2021/3/13 時点でパブリックプレビュー)
- 1クラスタ50までという制約があるらしい。
- oss としてインストール
マネージド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まで。