Microsoft AZ-400: コンテナ化と Kubernetes — 学習ガイド
こちらの一部です: Microsoft DevOps Engineer Expert AZ-400 — 学習ガイド. 検証済みの解答で練習: Microsoft試験ハブ, または時間制限付き模擬試験に挑戦: ExamRoll.io.
概要
コンテナ化と Kubernetes は、再現可能なビルド、安全な配布、そして宣言的で自己修復型のランタイムオーケストレーションを組み合わせることで、Azure 上のモダンな DevOps を支えています。これをマスターするには、イメージの組み立てと最適化の方法、レジストリがコンテンツを複製・証明する方法、AKS が中断なく設計・アップグレードされる方法、プログレッシブデリバリーの実装方法、そしてワークロードをエンドツーエンドで保護する方法を理解する必要があります。生の Kubernetes だけでなく、パッケージングには Helm を、リコンシリエーションには GitOps を活用します。さらに、サーバーレスの領域では、Azure Container Apps と Dapr、KEDA を使用して、マイクロサービスパターンとイベント駆動のスケーリングを簡素化します。以下のセクションでは、堅牢でコンプライアントなパイプラインと、回復力のある本番クラスターを実装するために必要なプラットフォームの決定事項と運用プラクティスを要約します。
ビルドとレジストリの基礎: Docker と ACR
パフォーマンスの高いコンテナイメージは、決定論的な Dockerfile と規律あるビルドコンテキストから始まります。マルチステージビルドを使用すると、ツールチェーンを多用するコンパイルステージを、小さなランタイムイメージから分離できます。例えば、ビルダー ステージで .NET や Go のバイナリをコンパイルし、コンパイルされたアーティファクトのみを distroless または最小限のベースイメージ(例: mcr.microsoft.com/dotnet/runtime-deps や gcr.io/distroless/base)にコピーすることで、攻撃対象領域を縮小し、プル時間を短縮できます。すべての RUN、COPY、ADD はレイヤーを作成します。変更頻度の低いステップを後に配置し、可読性を保ちながらコマンドを論理的にグループ化して集約することで、レイヤーキャッシュのヒットを最大化するように Dockerfile を再構成してください。常に .dockerignore を含めて、bin/obj、node_modules、tests、docs、およびシークレットを除外してください。ビルドコンテキストが大きすぎると、アップロードが遅くなり、リモートキャッシュの有効性が低下します。決定論的なパッケージインストール(バージョン固定、ロックファイル)とビルド引数は慎重に使用してください。環境固有のファイルは、不変のイメージではなく、ランタイム構成を介して渡すべきです。
Azure Container Registry (ACR) は、イメージの保存と配布のバックボーンです。ACR タスクを活用して、ビルドを Azure にオフロードします。オンデマンドビルドのためのクイックタスク (az acr run)、Git コミットやベースイメージの更新、スケジュールによってトリガーされる自動タスク、そして Buildx を使用したマルチアーキテクチャイメージのためのマルチステップ Task YAML があります。geo レプリケーション (Premium SKU) は、アーティファクトをリージョン間でミラーリングし、複数リージョンの AKS/ACA デプロイメントにおけるプルレイテンシとエグレスコストを最小限に抑えます。これをプライベートエンドポイントとリポジトリスコープの RBAC と組み合わせることで、最小権限を実現します。コンテンツ信頼を有効にしてイメージに署名し、その来歴を検証します。Docker Content Trust/Notary や進化する OCI 署名エコシステム(例: cosign)は、保護された名前空間に署名を要求する OPA Gatekeeper の制約を介して、アドミッション時に強制できます。脆弱性スキャンを統合します。Microsoft Defender for Cloud は、プッシュ時と保管中のイメージをスキャンし、修正ガイダンス付きで CVE を表示し、Azure Policy と CI チェックを介してデプロイメントをゲートできます。既知の脆弱なレイヤーを減らすために、ベースイメージの更新自動化を含めてください。
AKS プラットフォームとワークロードデリバリー
既定でセキュアな設定で AKS クラスターを作成します。これには、マネージド ID、RBAC のための Azure AD 統合、VNET 統合のための Azure CNI、ネットワークポリシー (Azure または Calico)、シークレット消費のための Azure Key Vault プロバイダー (Secrets Store CSI)、および承認済み IP 範囲を持つプライベートクラスターが含まれます。ワークロードに適したノードプールを選択します。コントロールプレーンに不可欠なコンポーネント用のシステムプール、アプリケーション用のユーザープール、ML 用の GPU プール、コストを削減するステートレスジョブ用のスポットプール、Windows コンテナー用の Windows ノードプールなどです。taints/tolerations と topology spread constraints を使用して、スケジューリングと回復性を制御します。cluster autoscaler とデプロイメントごとの Horizontal Pod Autoscaler でオートスケールします。パフォーマンスと回復性のために、エフェメラル OS ディスクと可用性ゾーンを検討してください。
中断を最小限に抑えるようにアップグレードを計画します。AKS はまずコントロールプレーンをアップグレードし、次にノードプールをアップグレードします。ノードプールのアップグレードで max-surge を使用して、サージキャパシティを追加し、ノードを正常にドレインし、PodDisruptionBudgets を尊重します。予測可能なケイデンスのために自動アップグレードチャネル (rapid/stable/patch-only) を採用し、影響範囲を限定するためにシステムプールとユーザープールのアップグレードを分離します。Kubernetes のバージョンアップがなくてもカーネル/ランタイムの修正を取り込むために、ノードイメージのアップグレードを定期的に実行し、互換性のある CNI/CSI バージョンをピン留めします。ゼロダウンタイムのプラットフォーム変更にはブルーグリーンノードプールを使用します。green を cordon/drain して blue に移行し、nodeSelector/affinity を介して切り替えます。
Kubernetes の Deployment は、maxUnavailable と maxSurge を使ったローリングアップデートをネイティブにサポートしており、ロールアウト中にキャパシティを維持します。readiness/liveness プローブや startup プローブと組み合わせることで、時期尚早なトラフィックを防ぎます。Kubernetes でのブルーグリーンデリバリーは、並行する Deployment (blue と green) を実行し、安定した Service セレクターまたは Endpoint オブジェクトをターゲットリビジョンに切り替えることで実装されます。これにより、ラベルを切り替えるだけでほぼ瞬時のフォールバックが可能になります。カナリアデリバリーは、ingress を介してエッジで行うのが最適です。NGINX Ingress はアノテーションを介した重み付けカナリアをサポートし、Application Gateway Ingress Controller (AGIC) はバックエンド間でトラフィックを分割できます。サービスメッシュは、詳細なポリシーとテレメトリによるトラフィックシフトを提供します。堅牢なパイプラインのためには、重みを昇格させる前に、スモークテストと App Insights の可用性チェックで検証します。
Helm は、Kubernetes マニフェストを、Chart.yaml、テンプレート、およびデフォルトの values.yaml から構成される chart にパッケージ化します。Values ファイルは決定論的に階層化されます。values.<env>.yaml オーバーレイと、サブ chart 横断的な設定のための “global” ブロックを使用します。ACR の OCI ベースの chart ストレージ (helm registry login && helm push oci://…) を備えた Helm 3 を推奨します。これにより、RBAC とイメージ同等の geo-replication が可能になります。Azure Pipelines では、ピン留めされたバージョンの Helm をインストール (HelmInstaller) し、Kubernetes/Azure Resource Manager サービス接続を介してデプロイ (HelmDeploy) します。テンプレートの lint、dry-run、および diff (helm diff plugin) によってリリースをゲートすべきです。values にシークレットをコミットすることは避け、external-secrets または CSI Key Vault を統合して、ランタイムにシークレットを実体化させます。chart はセマンティックバージョニングを行い、トレーサビリティのために appVersion をイメージダイジェストにピン留めします。
運用、セキュリティ、トラフィック制御
Flux または Argo CD を用いた GitOps は、クラスターが宣言された状態に継続的に収束することを保証します。Flux v2 は Azure CLI/extension を介して AKS とネイティブに統合し、一定間隔で Source (Git/OCI/Bucket) と Kustomization を調整します。また、ポリシーに基づいて Helm/Kustomize を新しいタグに更新するイメージ自動化機能も含まれています。Argo CD は Application とそのヘルス状態を追跡し、Azure AD との SSO をサポートし、マルチテナント分離のためのプルベースの app-of-apps モデルで運用できます。両方ともドリフトを検出し、自動修正、イベント/アラートの発行、プログレッシブデリバリーをサポートします。Flagger と組み合わせることで、NGINX、Istio、または Linkerd を使用したカナリアおよび A/B テストを自動化し、メトリクスに基づいて昇格させ、SLO 違反時にロールバックします。
セキュリティはサプライチェーンから始まり、アドミッション (受付) 時とランタイム時に強制されます。Defender for Cloud でイメージを継続的にスキャンし、CI/CD でゲートを設けます。Kubernetes Pod Security Standards (baseline/restricted) を採用し、namespace に Pod Security Admission ラベルを付けて、特権付き/hostPath/安全でない sysctl をデフォルトでブロックします。OPA Gatekeeper で組織のポリシーを強制します。制約テンプレートは、特権コンテナーの禁止、承認済みレジストリの要求、リソース制限の強制、署名付きイメージまたは SBOM の存在を要求します。ネットワークポリシーを適用して、許可された Pod 間および egress トラフィックを定義します。AKS は Azure Network Policies (Azure CNI 使用) と Calico をサポートしています。Azure Firewall または NVA による egress 制御、および Application Gateway WAF による ingress で補完します。非 root ユーザー、読み取り専用のルートファイルシステム、seccomp および AppArmor プロファイル、定期的なノードイメージのアップグレードによってワークロードを強化 (Harden) します。Defender for Kubernetes を介して監査と脅威検出を有効にし、Azure Monitor Container Insights でテレメトリを集約します。OpenTelemetry でログ/トレースを標準化します。
サービスメッシュ (Istio または Linkerd) は、統一されたトラフィック管理、暗号化、および可観測性を追加します。DestinationRules/VirtualServices (Istio) または ServiceProfiles (Linkerd) を使用して、リトライ、タイムアウト、サーキットブレーキング、および重み付けルーティングを定義します。サービス間の暗号化と ID のために相互 TLS を有効にし、“STRICT” mTLS のようなポリシーを強制してギャップを埋めます。メトリクスを Prometheus に、ダッシュボードを Grafana にエクスポートします。分散トレース (Jaeger/Zipkin) をキャプチャし、OpenTelemetry コレクターを介して Application Insights または Azure Monitor にフィードします。メッシュベースのカナリアとフォールトインジェクションは、信頼性の高いテストとプログレッシブデリバリーを強化し、Flagger が SLO に対する分析を自動化します。
Azureにおける開発者の生産性とサーバーレスコンテナ
AKSのDevOps統合ツールは、開発のインナーループを効率化します。Draftは言語フレームワークを検出し、Dockerfile、Helm chart、起動設定をスキャフォールディングすることで、コンテナ化を加速します。Bridge to Kubernetesは、稼働中のクラスターからのサービスコールをローカルのワークステーションにリダイレクトし、他のサービスはクラスター内で実際のデータや依存関係と共に実行させながら、単一のマイクロサービスをローカルでイテレーションおよびデバッグすることを可能にします。Azure Dev Spacesは廃止されました。Bridge to Kubernetesがサポートされているローカル開発エクスペリエンスであり、VS CodeおよびVisual Studioと統合されています。
Azure Container Apps (ACA) は、Kubernetesを管理することなく、マイクロサービスやジョブのためのサーバーレスでフルマネージドなランタイムを提供します。各デプロイはリビジョンを作成し、1つのコマンドまたはYAMLの変更で、リビジョン間でトラフィックをパーセンテージでルーティングし、ブルーグリーンまたはカナリアスタイルのロールアウトを実現できます。ネイティブのDapr統合により、専用の仕組みを構築することなく、サービス呼び出し、pub/sub、バインディング、ステートストア、シークレット管理が可能になります。プラガブルなコンポーネント(例:Azure Service Bus、Key Vault、Cosmos DB)は、一貫したサービス間機能の実装を加速します。KEDAは、HTTPの同時実行数や60以上のスケーラー(Azure Queue/Service Bus、Kafka、Prometheus、カスタム)に基づいたイベント駆動型のオートスケーリングを可能にし、コスト効率のためにゼロへのスケーリングも実現します。ネットワーク分離とVNET統合にはACA Environmentsを使用し、マネージドIDを介してACRを接続し、GitOpsプラクティスとの宣言的なパリティを維持するためにcontainerappsのYAMLを通じて構成を管理します。
実践的な問題シナリオ
Adobe社は、マルチリージョンの顧客分析サービスをモダナイズし、サプライチェーンとランタイムのセキュリティを強化しながら、リリースリスクを低減する必要があります。チームはビルドを標準化し、安全なロールアウトを自動化し、USとEU全域で迅速かつコンプライアンスに準拠したデリバリーを保証しなければなりません。
- 全てのサービスにマルチステージDockerfileと.dockerignoreを実装する
- 理由:イメージサイズと攻撃対象領域を最小化し、ビルドキャッシュのヒット率を向上させ、シークレットや大規模なテストアセットが誤ってイメージに含まれるのを防ぎます。
- ACR Tasksでイメージをビルド・署名し、geoレプリケーションされたACRにプッシュする
- 理由:クラウドビルドはローカル環境の差異を排除し、ベースイメージの更新トリガーはCVEへの露出を低減します。Premium ACRのgeoレプリケーションは、アーティファクトをAKSクラスターと併置することで、レイテンシとエグレスコストを削減します。署名により来歴の追跡が可能になります。
- Defender for Cloudのイメージスキャンを有効化し、CIゲートとOPA Gatekeeperを介して強制する
- 理由:プッシュ時と保存時のスキャンにより、CVEを早期に検出します。Gatekeeperの制約は、「承認済みレジストリのみ」、「署名付きイメージ必須」、リソース制限などを強制し、安全でないワークロードのアドミッションを防ぎます。
- Azure CNI、ネットワークポリシー、マネージドIDを使用して、リージョンごとにプライベートAKSクラスターをプロビジョニングする
- 理由:プライベートエンドポイントはコントロールプレーンの公開を制限し、Azure CNIは企業のVNETと統合し、ネットワークポリシーはラテラルムーブメントを制約し、マネージドIDはシークレットの拡散を排除します。
- システムノードプールとユーザーノードプールを分離し、バッチジョブ用にスポットプールを追加する
- 理由:重要なプラットフォームPodを分離し、重要でないワークロードに対してコスト効率の高いキャパシティを提供し、アップグレードとSLO管理を簡素化します。
- パッケージングにHelmを採用し、chartをACR (OCI) に保存し、Azure Pipelines経由でデプロイする
- 理由:環境ごとの値を持つ、一貫性のあるバージョン管理されたリリースを実現します。Pipelineは、
helm upgradeの前にhelm lint、dry-run、diffを実行し、Kubernetesサービスコネクションを使用してターゲットクラスターに接続します。
- GitOpsによる調整とドリフト検出のためにFlux v2をデプロイし、カナリア展開のためにFlaggerを統合する
- 理由:宣言的でプルベースの同期は、CI内の認証情報を削減し、状態の収束を保証します。Flaggerは、NGINX Ingressのメトリクスを使用してSLOに対する加重カナリア展開を自動化し、エラーやレイテンシの急上昇時にロールバックします。
- PDBとreadiness/startupプローブを使用してローリングアップデートを構成し、リスクの高いコンポーネントにはブルーグリーン展開を使用する
- 理由:ローリングアップデートはキャパシティを維持し、プローブはユーザートラフィックを保護します。Serviceのラベルを切り替えるブルーグリーン展開は、APIゲートウェイなどのリスクの高いコンポーネントで即時ロールバックを可能にします。
- 厳格なmTLS、リトライ、タイムアウトを備えたIstioサービスメッシュを導入し、テレメトリをApplication Insightsにエクスポートする
- 理由:メッシュ全体の暗号化、堅牢なトラフィックポリシー、統一された可観測性を実現します。OpenTelemetryコレクターは、SLO監視とインシデントトリアージのために、トレース/メトリクスを中央ストアに送信します。
- AKSの自動アップグレードチャネルとノードイメージのアップグレードを用いて、制御されたアップグレード戦略を確立する
- 理由:定期的で予測可能なプラットフォームの更新は、ゼロデイ攻撃への露出を低減します。Max-surgeとPDBは中断を最小限に抑え、ユーザープールの個別アップグレードは影響範囲を限定します。
- インナーループ開発にBridge to Kubernetesを使用し、Draftでスキャフォールディングを行う
- 理由:開発者は、モックを使用せずに、クラスター内の依存関係に対してローカルでデバッグできます。Draftは、チーム全体で一貫したコンテナ化とHelmのスキャフォールディングを加速します。
- ロングテールのサービスをDaprとKEDAを備えたAzure Container Appsにオフロードする
- 理由:イベント駆動型でゼロにスケールするマイクロサービス(例:データの取り込みとエンリッチメント)は、カナリア展開のための組み込みトラフィックスプリッティングにより低コストで実行できます。Daprコンポーネントは、専用コードなしでサービス間呼び出しやpub/subを標準化します。
このエンドツーエンドの設計は、ビルドの決定性、安全な配布、宣言的な運用、プログレッシブデリバリーを連携させ、Adobe社に迅速で低リスクなリリースと、リージョン全体で強化されたランタイムを提供します。
← コードとしてのインフラストラクチャと構成管理 · すべてのドメイン · リリース管理とデプロイ戦略 →
これらの問題を練習する → · ExamRoll.ioで時間制限付き練習 →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
試験に合格する →