Azure Container Registryのレイヤーコピー数とは?管理者向け確認事項

Azure Container Registry(ACR)で大規模なイメージ Pull が遅い、AKS のノード増加時に Pod 起動がばらつく――そんな管理者が今回まず押さえるべき結論は、「レイヤーのコピー数は多ければ多いほど速い」わけではないという点です。2026年6月23日の「How Many Copies of Each Layer Does Your Container Registry Actually Need?」は、ACR の内部的なレイヤー配置と Pull 性能の関係を説明する Notice であり、今すぐ利用者側で設定変更や移行を強制される発表ではありません。

ただし、AKS、Azure Container Apps、App Service、CI/CD などで同じコンテナイメージを大量ノードから同時に Pull する環境では、運用設計を見直すきっかけになります。特に確認すべきなのは、ACR の SKU、リージョン配置、Geo レプリケーション、AKS から ACR への権限、Azure Monitor による Pull 失敗や認証失敗の監査です。公式発表では、約1,000ノード規模のテストで、適度なレイヤーコピーは Pod 起動 P99 を改善した一方、過剰なコピーでは遅延が戻る結果が示されています。(TECHCOMMUNITY.MICROSOFT.COM)

目次

How Many Copies of Each Layer Does Your Container Registry Actually Need? とは何か

この発表は、Azure Container Registry の「レイヤーコピー数」を利用者が手動で調整するための手順ではありません。ACR の内部では、コンテナイメージのレイヤーデータが Azure Storage 側に保持され、同じレイヤーに対する複数の読み取りを分散できるようにコピーが管理されます。公式発表では、コピー数が増えると読み取りを受け持つバックエンドが増え、同時 Pull 時のスループット向上につながる一方で、一定以上になると効果が頭打ちになり、さらに増やすと逆にレイテンシが悪化する場合があると説明されています。(TECHCOMMUNITY.MICROSOFT.COM)

管理者向けに言い換えると、今回のポイントは「ACR の性能問題を、単純な容量不足や SKU だけで判断しないこと」です。コンテナレジストリの Pull 性能は、レジストリのリージョン、SKU、同時 Pull 数、イメージサイズ、レイヤー構成、ノード側キャッシュ、ネットワーク経路が組み合わさって決まります。

まず確認すべき結論

確認項目管理者の判断
サービス停止や破壊的変更かいいえ。Notice 扱いの技術解説として読み、直ちに設定変更が必要な発表ではありません。
ユーザーがレイヤーコピー数を直接設定するのか通常は設定対象ではありません。利用者側は SKU、配置、監視、イメージ設計を確認します。
影響が大きい環境大規模 AKS、AI/ML 学習基盤、短時間に多数 Pod を起動するバッチ、全台一斉更新、CI/CD の集中 Pull 環境です。
最初に見るべき指標Pod 起動時間の P90/P99、Pull 失敗、HTTP 429、ACR の Pull 回数、認証失敗、Storage used です。
取るべき行動監視の追加、権限の棚卸し、Geo レプリケーションや Premium SKU の必要性確認、イメージ軽量化です。

公式発表から読み取れる性能上のポイント

公式発表では、ACR Premium を使い、約1,000ノードが同じ大きなイメージを同時にコールド Pull する条件でテストされています。変えたのは単一レジストリエンドポイント背後のレイヤーコピー数で、測定対象は Pod 起動の P50/P90/P99、ストレージ読み取りレイテンシ、エグレススループット、ストレージスロットリングイベントです。(TECHCOMMUNITY.MICROSOFT.COM)

構成Pod 起動 P50Pod 起動 P90Pod 起動 P99スロットリング読み取り負荷の状態
Baseline9分36秒11分00秒14分16秒多い上位バックエンドが上限付近
Low9分27秒10分14秒12分59秒一部ありまだ上限超過が残る
Mid9分25秒9分45秒10分22秒なし上限未満
Higher9分20秒9分37秒10分22秒なし余裕あり
Very high9分28秒10分31秒13分48秒なしスロットリングはないが遅延が悪化

重要なのは、Mid 構成で P99 が 14分16秒から 10分22秒に改善した一方、Very high では 13分48秒まで悪化したことです。公式発表は、コピー数の「最適点」が存在し、ストレージスロットリングが解消された後は、コピーを増やしても効果が伸びないと説明しています。(TECHCOMMUNITY.MICROSOFT.COM)

管理者が確認すべき影響範囲

今回の Notice は、すべての Azure 利用者に同じ重みで影響するものではありません。小規模な開発環境や、数台のコンテナホストがたまに Pull するだけの環境では、優先度は高くありません。反対に、同時起動数が多い環境では、Pod 起動遅延がアプリケーションの可用性やジョブ開始時刻に直結します。

環境影響が出やすい理由確認すること
AKS の大規模クラスターノード追加、アップグレード、再スケジュール時に同一イメージ Pull が集中するノード数、同時 Pod 起動数、Pod 起動 P99、ImagePullBackOff の発生有無
AI/ML 学習基盤大容量イメージを多数 GPU ノードで同時に取得しやすい学習開始前の Pull 時間、ジョブ待ち時間、イメージサイズ
CI/CD ランナー群ビルドやテストのタイミングが集中しやすいPull/Push 回数、認証失敗、429、ランナーの分散
複数リージョン展開遠いリージョンの ACR から Pull すると遅延が増えるACR と実行基盤のリージョン、Geo レプリケーション有無
集約型 ACR複数チームが同じレジストリを共有し、権限と負荷が混在するリポジトリ単位の権限、利用チーム別の Pull 傾向、監査ログ

権限確認:AcrPull と ABAC の使い分けを見直す

Azure 管理者が最初に確認すべき実務ポイントは、AKS や CI/CD が ACR にどう認証しているかです。AKS と ACR の統合では、AKS のエージェントプールに関連付いた Microsoft Entra ID マネージド ID に AcrPull ロールが割り当てられます。Microsoft Learn では、Microsoft Entra グループ経由で AcrPull を付与した場合、RBAC 反映に遅延が出る可能性があるため、自動化では kubelet identity の設計に注意するよう案内されています。(Microsoft Learn)

さらに、ACR で Microsoft Entra ABAC によるリポジトリ単位の権限を有効にしている場合は注意が必要です。ABAC 有効レジストリで権限モードが「RBAC Registry + ABAC Repository Permissions」の場合、az aks --attach-acr による従来の付与ではなく、Container Registry Repository Reader などのリポジトリ権限に合わせたロール割り当てが必要になります。(Microsoft Learn)

権限の確認チェックリスト

対象確認内容推奨判断
AKSkubelet identity に Pull 権限があるか通常は AcrPull。ABAC 有効時はリポジトリ単位の Reader 権限を確認
CI/CDPush 用と Pull 用の権限が分かれているかPush 権限を本番実行基盤に付けない
開発者個人ユーザーに過剰な AcrPush/AcrDelete が付いていないか必要なリポジトリだけに限定
サービスプリンシパルパスワード期限、利用場所、所有者が管理されているか可能ならマネージド ID へ寄せる
Admin accountACR の管理者アカウントが有効になっていないかMicrosoft は高権限のため必要時のみ有効化と説明しているため、常用は避ける
ABACチーム別・環境別にリポジトリ条件を設計しているか集約 ACR では特に有効

ACR の認証方式には、個人の Microsoft Entra ID、サービスプリンシパル、マネージド ID、管理者アカウント、非 Entra のトークンベース権限などがあります。管理者アカウントはレジストリ全体に高い権限を持つため、複数ユーザーや本番運用の恒常利用には向きません。(Microsoft Learn)

監査とモニタリング:Pull の「遅い」を見える化する

今回の発表で重要なのは、平均値だけを見ても問題を見落とす点です。Pod 起動の P50 が大きく悪化していなくても、P99 が伸びると、ローリング更新やノードスケールアウトの最後の数%が遅れます。実務では、アプリケーション側の Pod 起動時間と ACR 側の Pull/認証/失敗ログを並べて確認します。

Azure Container Registry は Azure Monitor のメトリックとして StorageUsed、SuccessfulPullCount、SuccessfulPushCount、TotalPullCount、TotalPushCount などを提供しています。また、リソースログとして ContainerRegistryLoginEvents と ContainerRegistryRepositoryEvents を収集でき、後者では push、pull、untag、delete、purge などのリポジトリ操作を確認できます。(Microsoft Learn)

まず有効化する監査ログ

ログ・メトリック用途見るべき場面
TotalPullCountPull の総量を把握するデプロイ時間帯、AKS スケールアウト、CI/CD 集中時間
SuccessfulPullCountPull 成功数を確認するPull 失敗率を推定する
StorageUsedレジストリ容量の増加を把握する古いタグ、巨大イメージ、レプリカ増加の影響確認
ContainerRegistryLoginEvents認証成功・失敗を監査する権限変更後、AKS 接続変更後、CI/CD 変更後
ContainerRegistryRepositoryEventsPull/Push/Delete/Untag を追跡する失敗、誤削除、不審な操作、負荷集中の分析
Activity logレジストリ作成・更新・削除、ロール割り当てを追跡する管理操作の監査、変更管理

Azure Monitor のリソースログは、診断設定を作成して Log Analytics、Storage、Event Hubs などへルーティングしないと保存・クエリできません。ACR のポータル画面で「Monitoring」配下の「Diagnostic settings」を確認し、少なくとも本番レジストリはログ保存先を明確にしておきます。(Microsoft Learn)

KQL 例:Pull 操作の遅延を確認する

ContainerRegistryRepositoryEvents
| where TimeGenerated > ago(24h)
| where OperationName has "Pull"
| summarize
    PullCount = count(),
    P95DurationMs = percentile(DurationMs, 95),
    P99DurationMs = percentile(DurationMs, 99)
  by Repository, bin(TimeGenerated, 15m)
| order by TimeGenerated desc

このクエリで、どのリポジトリの Pull がどの時間帯に遅くなっているかを確認できます。特定のリポジトリだけ P99 が高い場合は、イメージサイズやレイヤー構成、同時起動するワークロードを優先して確認します。

KQL 例:429 や失敗らしきイベントを確認する

ContainerRegistryRepositoryEvents
| where TimeGenerated > ago(24h)
| where ResultDescription contains "429"
   or ResultDescription contains "Too Many"
   or ResultDescription contains "40"
   or ResultDescription contains "50"
| project TimeGenerated, LoginServer, OperationName, Repository, Tag, Identity, CallerIpAddress, ResultDescription, DurationMs
| order by TimeGenerated desc

HTTP 429 が多い場合、単純に ACR のせいと決めつける前に、デプロイ方式を確認します。たとえば、全ノード同時更新、短時間に集中する CI ジョブ、キャッシュされない大容量イメージ、同一リージョン外からの Pull が重なると、レジストリ側・ネットワーク側・ノード側のいずれでもボトルネックが出ます。

KQL 例:認証失敗を確認する

ContainerRegistryLoginEvents
| where TimeGenerated > ago(24h)
| where ResultDescription != "200"
| project TimeGenerated, LoginServer, Identity, CallerIpAddress, ResultDescription
| order by TimeGenerated desc

権限変更後に認証失敗が増えている場合は、AcrPull、ABAC 条件、マネージド ID、サービスプリンシパルのシークレット期限を確認します。AKS 側で ImagePullBackOff が出ていても、原因が性能ではなく認証や権限であるケースは珍しくありません。

SKU とリージョン構成の確認

ACR には Basic、Standard、Premium の SKU があり、Premium はより高いストレージ、同時操作、スループットの上限を持ち、Geo レプリケーションや Private Link などの機能も提供します。Microsoft Learn では、Basic は低利用シナリオ向け、Standard は多くの本番シナリオ向け、Premium は高ボリュームや大規模同時デプロイ向けと説明されています。(Microsoft Learn)

確認項目Basic/Standard のままでよい可能性Premium を検討する目安
利用規模開発・検証、少数ノード、低頻度 Pull多数ノード、同時 Pull、頻繁なデプロイ
リージョン単一リージョンで完結複数リージョンに展開
セキュリティパブリック到達性を制限しない構成で足りるPrivate Link や高度なネットワーク制御が必要
可用性レジストリ停止時の影響が限定的リージョン障害や大規模展開の影響が大きい
運用体制小規模チームで単純運用複数チーム・複数環境で共有

ただし、今回の発表を理由に、すべての ACR を Premium へ移行する必要はありません。まずは Pull 回数、失敗率、Pod 起動時間、リージョン間の距離、イメージサイズを測定し、性能上の根拠がある場合に SKU を見直します。

Geo レプリケーションとレイヤーコピーを混同しない

Geo レプリケーションは、ACR の内容を複数の Azure リージョンに複製し、利用者に近いリージョンから Pull しやすくする機能です。Microsoft Learn では、Geo レプリケーションを有効にすると選択したリージョンに geo-replica リソースが作成され、イメージを push すると各レプリカへコンテンツとメタデータが同期されると説明されています。Geo レプリケーションは Premium SKU が必要です。(Microsoft Learn)

今回の「レイヤーコピー数」は、主に同一リージョン内のレイヤーデータ読み取り分散に関する話です。一方、Geo レプリケーションはリージョン間の配置に関する話です。どちらも Pull 性能に関係しますが、解決する問題が違います。

問題主な対策
同一リージョン内で大量ノードが同時 Pull して遅いSKU、同時起動制御、イメージ軽量化、監視、Microsoft 側の内部スケーリング改善を確認
別リージョンの ACR から遠距離 Pull して遅いGeo レプリケーション、実行基盤と ACR のリージョン整合を確認
認証失敗で Pull できないAcrPull、ABAC、マネージド ID、サービスプリンシパルを確認
古いイメージが溜まり容量が増えるタグ運用、削除、保持ポリシー、StorageUsed を確認
デプロイ時だけ遅いデプロイの同時実行数、ローリング更新幅、事前 Pull、ノードキャッシュを確認

複数リージョンへコンテナを展開している場合、Microsoft Learn のベストプラクティスでも、レジストリ管理の簡素化とレイテンシ低減のために Geo レプリケーションが推奨されています。(Microsoft Learn)

移行・設計見直しの判断基準

今回の Notice は、強制移行の発表ではありません。そのため、移行計画を立てる場合も「何が遅いのか」を分けて判断します。

すぐに移行しなくてよいケース

次の条件に当てはまる場合、まずは監視の追加と現状把握で十分です。

条件理由
Pull 失敗や 429 がほぼないACR が明確なボトルネックとは言いにくい
Pod 起動 P99 が業務要件内改善余地はあっても緊急性は低い
単一リージョン・少数ノードGeo レプリケーションや Premium 化の効果が限定的
イメージサイズが小さいレジストリよりアプリ起動処理が支配的な場合がある
デプロイ頻度が低いコスト増の方が大きくなる可能性がある

構成変更を検討すべきケース

次のような状況では、SKU、リージョン、権限、デプロイ方式を見直します。

症状具体的な対応
AKS のスケールアウト時に Pod 起動が大きくばらつくP90/P99 を測定し、同時起動数を調整する
複数リージョンの AKS が1つの ACR から Pull しているPremium + Geo レプリケーションを検討する
CI/CD の特定時間帯に Pull/Push が集中するランナーの実行時間分散、キャッシュ、リトライ設計を見直す
429 や Pull 失敗が繰り返されるSKU、リクエスト集中、リトライ、同時デプロイ数を確認する
権限エラーと性能問題が混在している認証失敗ログと Pull 遅延を分けて分析する
レジストリを複数チームで共有しているABAC によるリポジトリ単位権限を検討する

イメージ設計で見直すべきポイント

ACR の内部最適化だけに頼るのではなく、コンテナイメージ自体も見直します。Microsoft Learn のベストプラクティスでは、Pull 性能に影響する要素としてイメージのレイヤー数にも触れており、少なすぎると再利用やキャッシュの利点が出にくく、多すぎると Pull や展開に時間がかかるため、5〜10レイヤーが目安とされています。(Microsoft Learn)

実務で効くイメージ改善

改善項目効果注意点
ベースイメージを軽量化するPull 時間と展開時間を短縮しやすいセキュリティ更新と互換性を確認する
不要なツールを最終イメージに入れないサイズ削減、脆弱性面の改善multi-stage build を使う
レイヤー数を極端に増やさないPull と展開のオーバーヘッドを抑えるキャッシュ再利用とのバランスを見る
タグだけでなく digest を使う意図しないイメージ変更を避けやすい運用ルールをチームで統一する
本番と開発のイメージを分ける本番イメージを小さく保ちやすいデバッグツールを本番に残さない
古いタグを整理するStorageUsed の増加を抑える参照中の digest を削除しないよう確認する

ACR の StorageUsed は、共有レイヤー、マニフェスト、レプリカコピーを含む容量として扱われます。レイヤー共有があるため、単純に各リポジトリのサイズを足した値とは一致しない場合があります。(Microsoft Learn)

デプロイ運用で避けたい失敗

大規模環境では、ACR の性能だけでなく「いつ、どれだけ同時に Pull するか」が重要です。特に、ノードの入れ替え、クラスターアップグレード、全 Pod の再起動、HPA/KEDA による急激なスケールアウトが重なると、同じレイヤーへの読み取りが集中します。

失敗しやすい運用起きる問題改善策
全ノード・全 Pod を一斉更新するACR、ネットワーク、ノード展開が同時に詰まるローリング更新幅を制御する
大容量イメージを毎回 Pull するノード追加時の起動が遅いベースイメージを見直し、不要ファイルを削る
CI/CD と本番デプロイが同時刻に集中するPush/Pull が同時に増えるジョブ時間を分散する
権限変更とデプロイを同日に行う性能問題と認証問題の切り分けが難しい権限変更後に小規模 Pull テストを行う
平均起動時間だけを見る一部 Pod の遅延を見落とすP90/P99 を見る
ACR のリージョンを意識しない遠距離 Pull で遅延が増える実行リージョンに近い配置を選ぶ

周知ポイント:開発チーム・SRE・セキュリティに伝える内容

今回の発表は、開発チームに「ACR が変わるので作業してください」と伝えるより、運用基準の見直しとして共有するのが適切です。特に、アプリケーションチームにはイメージサイズとデプロイ方式、SRE には監視指標、セキュリティ担当には権限と監査ログを伝えます。

社内周知テンプレート

Azure Container Registry のレイヤーコピー数と大規模 Pull 性能に関する Microsoft の技術解説が公開されました。今回の発表は破壊的変更や強制移行ではありませんが、大規模 AKS、CI/CD、複数リージョン展開では、同時 Pull 時の Pod 起動 P99 や Pull 失敗を確認する必要があります。各チームは、利用中の ACR、イメージサイズ、デプロイ時の同時起動数、ACR への権限、監査ログの有効化状況を確認してください。

役割別の依頼事項

対象依頼する内容
アプリ開発チーム本番イメージのサイズ、レイヤー数、不要ファイル混入を確認する
DevOps チームCI/CD の Pull/Push 集中時間、ランナー数、リトライ設定を確認する
AKS 管理者ノードスケールアウト時の Pod 起動 P90/P99、ImagePullBackOff を確認する
セキュリティ担当AcrPull、AcrPush、ABAC、サービスプリンシパル、Admin account を棚卸しする
監査担当ContainerRegistryLoginEvents と ContainerRegistryRepositoryEvents の保存先を確認する
コスト管理担当StorageUsed、SKU、Geo レプリケーションの必要性を確認する

管理者向け最終チェックリスト

分類チェック項目完了基準
影響範囲ACR を利用する AKS、Container Apps、App Service、CI/CD を一覧化した利用レジストリ、リージョン、SKU、用途が分かる
性能Pod 起動 P90/P99 と Pull 失敗を確認した遅延が特定時間帯・特定リポジトリに偏っていないか判断できる
SKUBasic/Standard/Premium の妥当性を確認した高ボリュームや複数リージョンでは Premium 検討理由が整理されている
リージョンACR と実行基盤の距離を確認した遠距離 Pull がある場合は Geo レプリケーションを検討した
権限AKS、CI/CD、開発者の Pull/Push 権限を確認した過剰権限や期限切れ SP がない
ABACABAC 有効レジストリの AKS 接続方式を確認したaz aks --attach-acr 前提のままになっていない
監査診断設定を有効化したLog Analytics などにログが保存されている
アラートPull 失敗、認証失敗、Storage used のアラートを設計した異常を利用者報告前に検知できる
イメージ大容量イメージとレイヤー数を確認した改善対象のリポジトリが明確になっている
周知影響チームへ Notice の意味を共有した強制移行ではなく、運用確認であると伝わっている

まとめ:今やるべきことは「コピー数調整」ではなく運用の可視化

「How Many Copies of Each Layer Does Your Container Registry Actually Need?」は、Azure Container Registry の内部設計を理解するうえで重要な発表です。ただし、管理者が今すぐ行うべきことは、レイヤーコピー数を手動で増やすことではありません。まずは、自社の ACR 利用状況を棚卸しし、Pull が集中する時間帯、Pod 起動 P99、認証失敗、HTTP 429、SKU、リージョン配置を確認することです。

特に本番 AKS や大規模 CI/CD で ACR を使っている場合は、次の順番で進めると失敗しにくくなります。最初に Azure Monitor の診断設定を有効化し、Pull と認証のログを残します。次に、AKS と ACR の権限、ABAC の有無、管理者アカウントの状態を確認します。そのうえで、イメージサイズ、レイヤー数、デプロイ同時実行数、Geo レプリケーションや Premium SKU の必要性を判断します。

今回の Notice は、ACR の性能を「容量」だけで見るのではなく、「同時 Pull」「レイヤー設計」「監査」「リージョン配置」まで含めて考えるよい機会です。大規模環境ほど、平均値ではなく P90/P99 を見て、利用者が体感する Pod 起動遅延を基準に改善してください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次