0Pricing
Cloud & IT Cert Prep · レッスン

AKS へのワークロードのデプロイ

AKS クラスターを作成し、kubectl と Helm chart を使用してマルチコンテナー アプリケーションをデプロイし、Azure Load Balancer サービスで外部に公開します。

「AKS へのワークロードのデプロイ」はCoddyKit上の無料Cloud & IT Cert Prepレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCloud & IT Cert Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。

Azure Kubernetes Service とは

Azure Kubernetes Service (AKS)は、Microsoft がコントロールプレーン(API サーバー、etcd、スケジューラーなど)を無料で運用・保守するマネージド Kubernetes サービスです。料金が発生するのはワーカーノード(VM)のみです。AKS は、Kubernetes のバージョンアップグレード、ノード OS のパッチ適用、コントロールプレーンのスケーリング、Azure のネットワーク、ストレージ、ID との統合を処理します。これにより、本番環境で Kubernetes を運用する際の負担を大幅に軽減できます。

AKS クラスターの作成

az aks createを使用し、ノード数、VM サイズ、ネットワークのオプションを指定して AKS クラスターを作成します。AKS は、VM、マネージドディスク、NIC、ロードバランサーを含むノード リソース グループを自動的に作成します。推奨されるネットワークモードはAzure CNIです。各ポッドに実際の VNet IP アドレスが割り当てられるため、NAT を使用せずに他の Azure サービスと直接通信できます。

# Create an AKS cluster with 3 nodes
az aks create \
  --name myAKSCluster \
  --resource-group MyRG \
  --location eastus \
  --node-count 3 \
  --node-vm-size Standard_D2s_v3 \
  --enable-managed-identity \
  --attach-acr mycontainerregistry \
  --network-plugin azure \
  --generate-ssh-keys

# Get kubectl credentials
az aks get-credentials --name myAKSCluster --resource-group MyRG

ノードプール

AKS クラスターには、同じ構成の VM グループであるノードプールを複数設定できます。システムノードプールは、Kubernetes の重要なシステムコンポーネント(kube-systemポッド)を実行します。ユーザーノードプールは、アプリケーションのワークロードを実行します。プールを分けることで、VM SKU を組み合わせて使用できます。たとえば、Web アプリ用の汎用プールと ML ワークロード用の GPU プールを用意し、それぞれを独立してスケーリングできます。

# Add a GPU node pool for ML workloads
az aks nodepool add \
  --cluster-name myAKSCluster \
  --resource-group MyRG \
  --name gpupool \
  --node-count 2 \
  --node-vm-size Standard_NC6s_v3 \
  --node-taints sku=gpu:NoSchedule

# List node pools
az aks nodepool list \
  --cluster-name myAKSCluster \
  --resource-group MyRG \
  -o table

マルチコンテナーアプリケーションのデプロイ

各層に対応する Kubernetes マニフェストファイルを個別に作成し、kubectl applyで適用することで、AKS に多層アプリケーションをデプロイできます。一般的なデプロイには、Web 層用のDeployment、API 層用のDeployment、それらを接続するServices、環境設定用のConfigMap、単一のホスト名でアプリを外部公開するIngressリソースが含まれます。

# Apply all manifests in a directory
kubectl apply -f k8s/

# Or apply individual files
kubectl apply -f frontend-deployment.yaml
kubectl apply -f frontend-service.yaml
kubectl apply -f api-deployment.yaml
kubectl apply -f api-service.yaml
kubectl apply -f ingress.yaml

# Watch rollout status
kubectl rollout status deployment/frontend
kubectl rollout status deployment/api

Ingress と Application Gateway

Ingress リソースは、ホスト名と URL パスをバックエンドサービスにマッピングする HTTP ルーティングルールを定義します。1 つのサービスごとに外部 IP アドレスが必要な LoadBalancer サービスとは異なり、単一の Ingress コントローラーがすべての外部 HTTP トラフィックを処理し、ルールに基づいてルーティングします。AKS では、NGINX Ingress ControllerまたはApplication Gateway Ingress Controller (AGIC)を使用して TLS を終端し、複数のサービスにトラフィックをルーティングします。

# Ingress routing traffic to two services by path
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  tls:
  - hosts: [myapp.contoso.com]
    secretName: myapp-tls
  rules:
  - host: myapp.contoso.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service: {name: api-svc, port: {number: 80}}
      - path: /
        pathType: Prefix
        backend:
          service: {name: frontend-svc, port: {number: 80}}

アプリケーションのパッケージ化に Helm Charts を使用する

Helmは Kubernetes のパッケージマネージャーです。chartは、アプリケーションに必要なすべての Kubernetes マニフェスト(Deployments、Services、Ingress、ConfigMaps)を、バージョン管理されたパラメーター化可能な 1 つのパッケージにまとめます。helm installを使用すると、環境固有の値を指定して chart をデプロイできます。Artifact Hub のHelm リポジトリには、一般的なインフラストラクチャ(NGINX、cert-manager、Prometheus、Redis)用のビルド済み chart が数千件あります。

# Add the NGINX Ingress Controller chart repo
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

# Install NGINX Ingress Controller
helm install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --create-namespace \
  --set controller.replicaCount=2

# Install your own app chart with custom values
helm install myapp ./charts/myapp -f values-prod.yaml

ローリングアップデートとロールバック

コンテナーイメージのタグを変更して Deployment を更新すると、Kubernetes はローリングアップデートを実行します。更新されたイメージで新しいポッドを作成し、古いポッドを段階的に終了するため、更新中もアプリケーションは利用可能な状態を維持します。新しいバージョンに問題がある場合は、kubectl rollout undoを使用して直前のリビジョンにすぐにロールバックできます。Kubernetes は、各 Deployment のリビジョン履歴を設定可能な期間保持します。

# Update the image to a new version
kubectl set image deployment/myapp \
  myapp=mycontainerregistry.azurecr.io/myapp:v2.0

# Watch the rollout progress
kubectl rollout status deployment/myapp

# View rollout history
kubectl rollout history deployment/myapp

# Rollback to the previous version
kubectl rollout undo deployment/myapp

# Rollback to a specific revision
kubectl rollout undo deployment/myapp --to-revision=2

クラスターオートスケーラー

Cluster Autoscalerは、保留中のポッドのスケジューリング状況とノードの使用率に基づいて、AKS のノードプールにワーカーノードを自動的に追加または削除します。すべてのノードが一杯でポッドをスケジュールできない場合、Cluster Autoscaler は新しいノードをプロビジョニングします。ノードの使用率が低く、ポッドを集約できる場合は、ポッドを退避させてノードを削除します。これは Horizontal Pod Autoscaler を補完する機能です。HPA はポッドをスケーリングし、Cluster Autoscaler はノードをスケーリングします。

# Enable Cluster Autoscaler on the default node pool
az aks update \
  --name myAKSCluster \
  --resource-group MyRG \
  --enable-cluster-autoscaler \
  --min-count 2 \
  --max-count 10

# Update autoscaler bounds on a specific node pool
az aks nodepool update \
  --cluster-name myAKSCluster \
  --resource-group MyRG \
  --name nodepool1 \
  --enable-cluster-autoscaler \
  --min-count 3 \
  --max-count 20

Azure Monitor による AKS の監視

Azure Monitor Container Insightsを有効にすると、サードパーティ製の監視ツールをデプロイせずに、AKS クラスターからログとメトリックを収集できます。Container Insights には、クラスターの正常性、ノードとポッドの CPU 使用率・メモリ使用量、コンテナーログ、ポッドのライブストリーミング用の事前構成済みダッシュボードが用意されています。Prometheusと統合してカスタムメトリックをスクレイピングでき、Log Analytics では KQL を使用してすべてのデータをクエリできます。

# Enable Azure Monitor Container Insights on AKS
az aks enable-addons \
  --addons monitoring \
  --name myAKSCluster \
  --resource-group MyRG \
  --workspace-resource-id /subscriptions/.../workspaces/MyLogAnalytics

# Stream live logs from a running pod
kubectl logs -f deployment/myapp -c myapp

# Query pod resource usage
kubectl top pods --namespace default

AKS RBAC と Azure Active Directory

AKS をMicrosoft Entra IDと統合すると、Azure AD のユーザーとグループを Kubernetes RBAC に使用できます。個別の Kubernetes ユーザーアカウントを管理する代わりに、Entra ID のオブジェクト ID にClusterRoleまたはRole bindingsを割り当てます。開発者がkubectlを実行すると、AKS はその Entra ID トークンを検証します。これにより、ID を一元管理でき、条件付きアクセスや MFA ポリシーとも統合できます。

# Enable Entra ID RBAC on an AKS cluster
az aks update \
  --name myAKSCluster \
  --resource-group MyRG \
  --enable-azure-rbac

# Assign a built-in AKS role to an Entra group
az role assignment create \
  --role 'Azure Kubernetes Service RBAC Reader' \
  --assignee '<Entra-Group-Object-ID>' \
  --scope /subscriptions/.../resourceGroups/MyRG/providers/Microsoft.ContainerService/managedClusters/myAKSCluster

ポッドレベルのセキュリティにネットワークポリシーを使用する

ネットワークポリシーは、どのポッド同士が通信できるかを制御する Kubernetes リソースです。既定では、クラスター内のすべてのポッドが他のすべてのポッドに接続できます。ネットワークポリシーを使用すると、ポッドレベルでファイアウォールを設定できます。AKS では、Azure network policy または Calico を有効にしてポリシーを適用します。一般的な方法は、ポッド間のすべてのトラフィックをブロックするdefault-denyポリシーを設定し、その後、アプリケーションに必要な通信経路に対して明示的な許可ポリシーを追加することです。

# Default deny all ingress to pods in namespace
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-ingress
  namespace: production
spec:
  podSelector: {}  # Matches all pods
  policyTypes:
  - Ingress

# Allow API pods to receive from frontend pods only
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: api-allow-frontend
spec:
  podSelector: {matchLabels: {app: api}}
  ingress:
  - from:
    - podSelector: {matchLabels: {app: frontend}}

理解度チェック

このレッスンで学んだ Microsoft Azure Fundamentals(AZ-900)の概念について、理解度を確認します。

レッスンのまとめ

このレッスンでは、AKSが Microsoft によってコントロールプレーンが運用されるマネージド Kubernetes サービスであること、Helm chartsが複数の Kubernetes リソースで構成されるアプリケーションをパッケージ化し、再現性のあるデプロイを可能にすること、そしてCluster Autoscalerがポッドのスケジューリング需要に応じてノードを動的に追加・削除することを学びました。次は、Azure Functions のトリガーとバインディングについて学びます。

よくある質問

「AKS へのワークロードのデプロイ」レッスンは無料ですか?

はい。「AKS へのワークロードのデプロイ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cloud & IT Cert Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。

「AKS へのワークロードのデプロイ」で何を学びますか?

AKS クラスターを作成し、kubectl と Helm chart を使用してマルチコンテナー アプリケーションをデプロイし、Azure Load Balancer サービスで外部に公開します。 ブラウザで直接実行するハンズオンコードでCloud & IT Cert Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cloud & IT Cert Prepを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCloud & IT Cert Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「AKS へのワークロードのデプロイ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCloud & IT Cert Prepレッスンでコードを書いて実行できますか?

はい。すべてのCloud & IT Cert Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Azure Container Registry
  2. Azure Container Instances
  3. Azure 向け Kubernetes の概念
  4. AKS へのワークロードのデプロイ
← Cloud & IT Cert Prepに戻る