Microsoft の Azure Container Registry(ACR)チームが、外部レジストリのコンテナイメージを ACR 経由でキャッシュする「ACR Artifact Cache」の内部アーキテクチャを公式ブログで詳細に公開した。1日1億件を超えるイメージプルを支えるプルスルーキャッシュの設計思想と、実際の動作フローが明らかになった。
なぜ上流レジストリに直接依存してはいけないのか
コンテナを本番運用しているチームなら、一度は遭遇したことがあるはずだ——Docker Hub のレートリミットに引っかかり、Kubernetes ノードが突然イメージを取得できなくなるアレだ。
Docker Hub は認証なしユーザーや個人プランユーザーに対してプル数を制限しており、CI/CD の共有エージェントや大規模な Kubernetes クラスターでは、あっという間に上限に達する。しかしこれは Docker Hub 固有の話ではない。本質的な問題は「上流レジストリへの直接依存が、本番システムに許容できないリスクをもたらす」という点にある。
具体的な失敗パターンはこうだ:
- 上流の一時的な障害や低速化がそのままサービス停止に直結する
- レートリミット・バースト制限で大規模スケールアウト時にイメージ取得が詰まる
- 認証情報の管理が各チームに分散し、セキュリティ統制が効かなくなる
- ネットワークポリシー(承認済みの境界内のみ通信を許可)が上流への直接アクセスを許可しないケースがある
ACR Artifact Cache はこの問題を「上流の内容を ACR 経由で透過的にキャッシュする」ことで解決する。クライアントは通常の ACR プルと同じ操作をするだけでよく、裏側の複雑さは隠蔽される。
キャッシュルールとクレデンシャル管理
設定はコントロールプレーンで行う。チームはまず「キャッシュルール」を作成し、ACR 内の下流パスと上流ソースのマッピングを定義する。
出典: この記事は Inside ACR Artifact Cache: Pull-Through Caching at Scale の内容をもとに、筆者の見解を加えて独自に執筆したものです。