aks-automatic-2025 について
Azure Kubernetes Service の利用者向けに、AKS Automatic の知識をまとめたガイドです。クラスターの自動化、スケーリング、セキュリティ、ネットワーク、コスト設定をコマンドやマニフェスト例で説明します。
主な機能
- 01コントロールプレーンとノードの管理
- 02Karpenter によるノードの動的プロビジョニング
- 03HPA、VPA、KEDA によるスケーリング
- 04ID とネットワークのセキュリティ設定
- 05監視とコスト最適化のガイド
活用シーン
- 01AKS Automatic クラスターの作成と設定
- 02ワークロードの自動スケーリング設定
- 03ノード構成や ID の問題の調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ josiahsiegel/ claude-plugin-marketplace --skill aks-automatic-2025インストール後、Claude Code で/aks-automatic-2025を入力して読み込まれたか確認します。
詳細
AKS Automatic - 2025 年 GA 機能
Azure Kubernetes Service Automatic モード(2025 年 10 月 GA)に関する包括的なナレッジベースです。
概要
AKS Automatic は、インテリジェントな自動化と組み込みのベストプラクティスにより運用負荷を解消する、フルマネージドの Kubernetes サービスです。
主な機能(2025 年 10 月 GA)
1. 運用負荷ゼロ
- フルマネージドのコントロールプレーンとワーカーノード
- OS のパッチ適用とセキュリティ更新を自動化
- 監視と診断機能を内蔵
- セキュリティとコンプライアンスを統合
2. Karpenter の統合
- リアルタイムの需要に基づくノードの動的プロビジョニング
- コスト最適化のためのインテリジェントなビンパッキング
- ノードの自動統合とプロビジョニング解除
- 複数のノードプールとインスタンスタイプをサポート
3. オートスケーリング(デフォルトで有効)
- Horizontal Pod Autoscaler(HPA):CPU/メモリに基づいてポッドをスケーリング
- Vertical Pod Autoscaler(VPA):ポッドのリソース要求/上限を調整
- KEDA:外部トリガーによるイベント駆動型オートスケーリング
4. 強化されたセキュリティ
- 認証に Microsoft Entra ID を統合
- Kubernetes 認可に Azure RBAC を使用
- ネットワークポリシーをデフォルトで有効化
- セキュリティパッチを自動適用
- ポッドレベルの認証にワークロード ID を使用
5. 高度なネットワーク
- IP を効率的に使用する Azure CNI Overlay
- 高パフォーマンスのネットワークを実現する Cilium データプレーン
- マイクロセグメンテーションのためのネットワークポリシー
- プライベートクラスターをサポート
6. 新しい課金モデル(2025 年 10 月 19 日適用)
- ホスト型コントロールプレーン料金:$0.16/クラスター/時間
- 実際のノード使用量に基づくコンピューティング料金
- クラスター管理料金は別途不要
- Karpenter の最適化によるコスト削減
7. ノードのオペレーティングシステム
- Kubernetes < 1.34 では Ubuntu 22.04
- Kubernetes >= 1.34 では Ubuntu 24.04
- ノードイメージチャネルによる OS の自動アップグレード
AKS Automatic クラスターの作成
基本的な作成
az aks create \
--resource-group MyRG \
--name MyAKSAutomatic \
--sku automatic \
--kubernetes-version 1.34 \
--location eastus
本番環境向けの構成
az aks create \
--resource-group MyRG \
--name MyAKSAutomatic \
--location eastus \
--sku automatic \
--tier standard \
\
# Kubernetes version
--kubernetes-version 1.34 \
\
# Karpenter (default in automatic mode)
--enable-karpenter \
\
# Networking
--network-plugin azure \
--network-plugin-mode overlay \
--network-dataplane cilium \
--service-cidr 10.0.0.0/16 \
--dns-service-ip 10.0.0.10 \
--load-balancer-sku standard \
\
# Use custom VNet (optional)
--vnet-subnet-id /subscriptions/<sub-id>/resourceGroups/MyRG/providers/Microsoft.Network/virtualNetworks/MyVNet/subnets/AKSSubnet \
\
# Availability zones
--zones 1 2 3 \
\
# Authentication and authorization
--enable-managed-identity \
--enable-aad \
--enable-azure-rbac \
--aad-admin-group-object-ids <group-object-id> \
\
# Auto-upgrade
--auto-upgrade-channel stable \
--node-os-upgrade-channel NodeImage \
\
# Security
--enable-defender \
--enable-workload-identity \
--enable-oidc-issuer \
\
# Monitoring
--enable-addons monitoring \
--workspace-resource-id /subscriptions/<sub-id>/resourceGroups/MyRG/providers/Microsoft.OperationalInsights/workspaces/MyWorkspace \
\
# Tags
--tags Environment=Production ManagedBy=AKSAutomatic
Azure Policy アドオンを使用
az aks create \
--resource-group MyRG \
--name MyAKSAutomatic \
--sku automatic \
--enable-addons azure-policy \
--kubernetes-version 1.34
Karpenter の構成
AKS Automatic は、インテリジェントなノードのプロビジョニングに Karpenter を使用します。AKSNodeClass と NodePool CRD を使用して、ノードのプロビジョニングをカスタマイズできます。
デフォルトの AKSNodeClass
apiVersion: karpenter.azure.com/v1alpha1
kind: AKSNodeClass
metadata:
name: default
spec:
# OS Image - Ubuntu 24.04 for K8s 1.34+
osImage:
sku: Ubuntu
version: "24.04"
# VM Series
vmSeries:
- Standard_D
- Standard_E
# Max pods per node
maxPodsPerNode: 110
# Security
securityProfile:
sshAccess: Disabled
securityType: Standard
カスタム NodePool
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: general-purpose
spec:
# Constraints
template:
spec:
requirements:
- key: kubernetes.io/arch
operator: In
values: ["amd64"]
- key: karpenter.sh/capacity-type
operator: In
values: ["on-demand"]
- key: kubernetes.azure.com/agentpool
operator: In
values: ["general"]
# Node labels
labels:
workload-type: general
# Taints (optional)
taints:
- key: "dedicated"
value: "general"
effect: "NoSchedule"
# NodeClass reference
nodeClassRef:
group: karpenter.azure.com
kind: AKSNodeClass
name: default
# Limits
limits:
cpu: "1000"
memory: 4000Gi
# Disruption budget
disruption:
consolidationPolicy: WhenEmpty
consolidateAfter: 30s
expireAfter: 720h # 30 days
budgets:
- nodes: "10%"
duration: 5m
AI ワークロード向けの GPU NodePool
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: gpu-workloads
spec:
template:
spec:
requirements:
- key: kubernetes.io/arch
operator: In
values: ["amd64"]
- key: karpenter.sh/capacity-type
operator: In
values: ["on-demand"]
- key: node.kubernetes.io/instance-type
operator: In
values: ["Standard_NC6s_v3", "Standard_NC12s_v3", "Standard_NC24s_v3"]
labels:
workload-type: gpu
gpu-type: nvidia-v100
taints:
- key: "nvidia.com/gpu"
value: "true"
effect: "NoSchedule"
nodeClassRef:
group: karpenter.azure.com
kind: AKSNodeClass
name: gpu-nodeclass
limits:
cpu: "200"
memory: 800Gi
nvidia.com/gpu: "16"
disruption:
consolidationPolicy: WhenEmpty
consolidateAfter: 300s
HPA、VPA、KEDA によるオートスケーリング
Horizontal Pod Autoscaler(HPA)
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 2
maxReplicas: 50
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
behavior:
scaleUp:
stabilizationWindowSeconds: 0
policies:
- type: Percent
value: 100
periodSeconds: 15
- type: Pods
value: 4
periodSeconds: 15
selectPolicy: Max
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 50
periodSeconds: 15
Vertical Pod Autoscaler(VPA)
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: myapp-vpa
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
updatePolicy:
updateMode: "Auto" # Auto, Recreate, Initial, Off
resourcePolicy:
containerPolicies:
- containerName: "*"
minAllowed:
cpu: 100m
memory: 128Mi
maxAllowed:
cpu: 4
memory: 8Gi
controlledResources: ["cpu", "memory"]
controlledValues: RequestsAndLimits
KEDA ScaledObject(イベント駆動型)
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: myapp-queue-scaler
spec:
scaleTargetRef:
name: myapp
minReplicaCount: 0 # Scale to zero
maxReplicaCount: 100
pollingInterval: 30
cooldownPeriod: 300
triggers:
# Azure Service Bus Queue
- type: azure-servicebus
metadata:
queueName: myqueue
namespace: myservicebus
messageCount: "5"
authenticationRef:
name: azure-servicebus-auth
# Azure Storage Queue
- type: azure-queue
metadata:
queueName: myqueue
queueLength: "10"
accountName: mystorageaccount
authenticationRef:
name: azure-storage-auth
# Prometheus metrics
- type: prometheus
metadata:
serverAddress: http://prometheus.monitoring.svc.cluster.local:9090
metricName: http_requests_per_second
threshold: "100"
query: sum(rate(http_requests_total[2m]))
ワークロード ID(AAD Pod Identity に代わる機能)
セットアップ
# Workload identity is enabled by default in AKS Automatic
# Create managed identity
az identity create \
--name myapp-identity \
--resource-group MyRG
# Get identity details
export IDENTITY_CLIENT_ID=$(az identity show -g MyRG -n myapp-identity --query clientId -o tsv)
export IDENTITY_OBJECT_ID=$(az identity show -g MyRG -n myapp-identity --query principalId -o tsv)
# Assign role to identity
az role assignment create \
--assignee $IDENTITY_OBJECT_ID \
--role "Storage Blob Data Contributor" \
--scope /subscriptions/<sub-id>/resourceGroups/MyRG/providers/Microsoft.Storage/storageAccounts/mystorage
# Create federated credential
export AKS_OIDC_ISSUER=$(az aks show -g MyRG -n MyAKSAutomatic --query oidcIssuerProfile.issuerUrl -o tsv)
az identity federated-credential create \
--name myapp-federated-credential \
--identity-name myapp-identity \
--resource-group MyRG \
--issuer $AKS_OIDC_ISSUER \
--subject system:serviceaccount:default:myapp-sa
Kubernetes リソース
# Service Account
apiVersion: v1
kind: ServiceAccount
metadata:
name: myapp-sa
namespace: default
annotations:
azure.workload.identity/client-id: "<IDENTITY_CLIENT_ID>"
---
# Deployment using workload identity
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
azure.workload.identity/use: "true" # Enable workload identity
spec:
serviceAccountName: myapp-sa
containers:
- name: myapp
image: myregistry.azurecr.io/myapp:latest
env:
- name: AZURE_CLIENT_ID
value: "<IDENTITY_CLIENT_ID>"
- name: AZURE_TENANT_ID
value: "<TENANT_ID>"
- name: AZURE_FEDERATED_TOKEN_FILE
value: /var/run/secrets/azure/tokens/azure-identity-token
volumeMounts:
- name: azure-identity-token
mountPath: /var/run/secrets/azure/tokens
readOnly: true
volumes:
- name: azure-identity-token
projected:
sources:
- serviceAccountToken:
path: azure-identity-token
expirationSeconds: 3600
audience: api://AzureADTokenExchange
監視とオブザーバビリティ
Container Insights を有効化
# Already enabled with --enable-addons monitoring
# Query logs using Azure Monitor
# Get cluster logs
az monitor log-analytics query \
--workspace <workspace-id> \
--analytics-query "KubePodInventory | where ClusterName == 'MyAKSAutomatic' | take 10" \
--output table
# Get Karpenter logs
kubectl logs -n kube-system -l app.kubernetes.io/name=karpenter
Prometheus と Grafana
# Enable managed Prometheus
az aks update \
--resource-group MyRG \
--name MyAKSAutomatic \
--enable-azure-monitor-metrics
# Access Grafana dashboards through Azure Portal
コストの最適化
課金モデル(2025 年 10 月)
- コントロールプレーン:クラスターあたり $0.16/時間
- コンピューティング:実際のノード使用量に対して課金
- Karpenter:ビンパッキングと統合を自動化
- ゼロへのスケール:KEDA と Karpenter で実現可能
コスト削減のヒント
- 重要でないワークロードには Spot インスタンスを使用
- key: karpenter.sh/capacity-type
operator: In
values: ["spot"]
- 積極的な統合を構成
disruption:
consolidationPolicy: WhenUnderutilized
consolidateAfter: 30s
- ポッド中断予算を実装
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: myapp-pdb
spec:
minAvailable: 1
selector:
matchLabels:
app: myapp
- 適切なサイズへの調整に VPA を使用
- VPA は実際の使用量に基づいてリソース要求を自動調整します
Standard AKS から Automatic への移行
AKS Automatic は新しいクラスター モードです。インプレース移行はサポートされていません。以下の手順に従ってください。
- 新しい AKS Automatic クラスターを作成
- 新しいクラスターにワークロードをインストール
- 機能を検証
- トラフィックを切り替え(DNS、ロードバランサー)
- 古いクラスターを廃止
ベストプラクティス
✓ 新しい本番クラスターには AKS Automatic を使用します ✓ ポッド認証にはワークロード ID を有効にします ✓ 特定のワークロードタイプに合わせてカスタム NodePools を構成します ✓ 包括的なスケーリングを実現するため、HPA、VPA、KEDA を導入します ✓ バッチ処理や耐障害性が求められるワークロードにはスポットインスタンスを使用します ✓ Container Insights と Managed Prometheus を有効にします ✓ 重要なアプリには Pod Disruption Budgets を構成します ✓ マイクロセグメンテーションにはネットワークポリシーを使用します ✓ コンプライアンス対応のため、Azure Policy アドオンを有効にします ✓ Flux または Argo CD を使用して GitOps を導入します
トラブルシューティング
Karpenter のステータスを確認する
kubectl logs -n kube-system -l app.kubernetes.io/name=karpenter --tail=100
kubectl get nodepools
kubectl get nodeclaims
ノードプロビジョニングイベントを表示する
kubectl get events --field-selector involvedObject.kind=NodePool -A
ワークロード ID の問題をデバッグする
# Check service account annotation
kubectl get sa myapp-sa -o yaml
# Check pod labels
kubectl get pod <pod-name> -o yaml | grep azure.workload.identity
# Check federated credential
az identity federated-credential show \
--identity-name myapp-identity \
--resource-group MyRG \
--name myapp-federated-credential
参考資料
AKS Automatic は、Azure でのマネージド Kubernetes の未来を担います。運用負荷をゼロにし、最大限の自動化を実現します!