Cloud Service
Azure Container Storage
AKS のステートフルなコンテナへ高性能な永続ボリュームをまとめて供給。Azure Container Storage はマネージドディスクやローカル NVMe を束ねてプールにし、ボリューム作成を高速化。AWS の EBS CSI / EKS ストレージ運用相当。
- 1.AKS のコンテナ向けに永続ボリュームをプール化して供給するマネージドサービス。
- 2.マネージドディスク・Elastic SAN・ローカル NVMe を裏付けに選べ、用途で使い分ける。
- 3.Kubernetes 標準の PVC でプロビジョニングでき、大量ボリュームの作成も高速。
解決する課題
データベースやメッセージキューなど**状態を持つコンテナ(ステートフルワークロード)**を AKS で動かすとき、ボリュームの作成が遅い・台数が増える・性能を引き出しにくい、といった課題を解消します。
- ポッドの数だけ大量の永続ボリュームを素早く作りたい(マネージドディスクは VM あたりのアタッチ数に上限がある)
- ローカル NVMe SSD の高速な一時領域を Kubernetes ボリュームとして安全に使いたい
- 複数のバッキング(ディスク / SAN / ローカル)を同じ操作感でプロビジョニングしたい
- Kubernetes ネイティブな宣言(PVC / StorageClass)でストレージ運用を自動化したい
主要概念と用語
- ストレージプール(Storage Pool): バッキングストレージをまとめた論理的な容量の単位。ここからボリュームを切り出す
- バッキングストレージ(Backing Storage): プールの裏付け。Azure マネージドディスク、Azure Elastic SAN、ノードのローカル NVMe(一時 SSD)から選ぶ
- CSI ドライバ / StorageClass: Container Storage Interface 準拠のドライバ。プールごとに StorageClass が用意され、標準の PVC でボリュームを要求する
- PV / PVC(永続ボリューム / 要求): Kubernetes 標準の抽象。PVC を作るとプールからボリュームが動的にプロビジョニングされる
- レプリケーション: ローカル NVMe バッキングで、ノード障害に備えてボリュームを複数ノードに複製する設定
- 拡張機能(AKS Extension): Azure Container Storage 自体は AKS の拡張機能としてクラスタに導入される
仕様・制限・クォータ
- AKS 上で動作するサービスで、対象クラスタに拡張機能として導入する
- バッキングごとに特性が異なる: マネージドディスクは永続・ゾーン内冗長、Elastic SAN は共有しやすくスケール、ローカル NVMe は最速だがノードに紐づく揮発的な領域
- ローカル NVMe バッキングは対応する VM サイズ(ローカル NVMe を持つ SKU)が必要
- プール容量やノード数、対応リージョン・可用性ゾーンには制約があり、ワークロード規模に合わせて計画する
- 導入には一定以上のノードリソース(CPU / メモリ)が必要で、小さすぎるノードでは利用できないことがある
内部の仕組み
Azure Container Storage は AKS クラスタ内で動くコントロールプレーンとして、選んだバッキングストレージをストレージプールに束ね、そこから Kubernetes の永続ボリュームを切り出します。利用者は CSI ドライバが提供する StorageClass を指定して PVC を作るだけで、裏側のマネージドディスク作成やアタッチ、ローカル NVMe の組み込みが自動化されます。
バッキングの選択がそのまま性能・耐久性のトレードオフになります。マネージドディスクはディスク自体が冗長化された永続ストレージで、ポッドが別ノードへ移ってもデータが残ります。Elastic SAN は大容量を多数のボリュームへ柔軟に割り当てやすく、スケールアウト用途に向きます。ローカル NVMe はノード直結の SSD を使うため最も低遅延・高 IOPS ですが、ノードに紐づくためそのままでは揮発的で、ノード障害でデータが失われる前提です。
ローカル NVMe の揮発性を補うため、レプリケーションを有効にするとボリュームを複数ノードに同期複製し、ノード障害時にも別レプリカから継続できます。レプリカ数を増やすほど可用性は上がりますが、書き込みは全レプリカへ反映するためスループットとコストに影響します。
ローカル NVMe バッキングはノードに紐づくため、レプリケーションなしではノード障害や再イメージでデータが失われます。永続が必須のデータはマネージドディスク / Elastic SAN を選ぶか、ローカル NVMe ではレプリケーションを有効にしてください。
設計パターン / ベストプラクティス
- キャッシュ / 一時インデックスなど消えてよい高速領域にはローカル NVMe を、永続が必要な DB データにはマネージドディスクや Elastic SAN を割り当てる
- ステートフルワークロードは StatefulSet + PVC テンプレートで、ポッドごとに専用ボリュームを安定して確保する
- 可用性ゾーンをまたぐクラスタでは、ボリュームのゾーン配置とポッドのスケジューリングを揃える(別ゾーンのディスクはアタッチできない)
- ローカル NVMe で可用性が要るならレプリケーションを有効化し、必要なレプリカ数を性能・コストと天秤にかける
- ボリュームのサイズは将来の拡張を見据えつつ、過剰プロビジョニングを避けてプール容量を計画する
運用・監視
- AKS / Azure Monitor(Container Insights) でノードとポッド、ボリュームの使用率・IOPS・遅延を監視する
kubectl get pvc/kubectl get pvでバインド状態とプロビジョニングの進捗を確認し、Pending が続く場合はプール容量やゾーン不整合を疑う- ローカル NVMe 構成ではノードの入れ替え(アップグレード / スケール)時のデータ移行手順を事前に決めておく
- 拡張機能と CSI ドライバのバージョン更新を AKS のアップグレード運用に組み込む
- プール容量の逼迫に備え、空き容量のしきい値アラートを設定する
コスト
Azure Container Storage の課金は基本的に選んだバッキングストレージの料金に従います。マネージドディスクや Elastic SAN はプロビジョニング容量と性能に応じた課金で、ローカル NVMe は VM 価格に含まれる一時 SSD を使うため追加のストレージ課金は発生しにくい一方、その VM サイズ自体のコストがかかります。
| バッキング | コストの考え方 | 向いている用途 |
|---|---|---|
| ローカル NVMe | VM 価格に内包。追加ストレージ課金は少 | 高速な一時 / キャッシュ領域 |
| マネージドディスク | 容量と性能に応じた課金 | 永続が必要な本番データ |
| Elastic SAN | プールした容量と性能で課金 | 多数ボリュームへ柔軟配分 |
- レプリカ数を増やすほど実効容量と書き込み負荷が増えるため、必要な可用性に見合うレプリカ数に抑える
- 使われていない PVC / PV やプールの空き容量を定期的に棚卸しして無駄を削る
セキュリティ
- バッキングがマネージドディスク / Elastic SAN の場合、保存時暗号化(SSE)が既定で有効。要件に応じカスタマー管理キー(CMK)を Key Vault で管理する
- クラスタや拡張機能の操作は Microsoft Entra ID + Azure RBAC で最小権限に制御する
- ボリュームへのアクセスは Kubernetes の RBAC と名前空間分離で制御し、不要なポッドから参照させない
- ノードとストレージ間の通信は AKS のネットワーク構成に従い、必要ならプライベートな経路で閉域化する
1 クラスタで複数のストレージプールを併用できます。永続データはマネージドディスク、爆速の一時領域はローカル NVMe のように、ワークロードごとに最適なバッキングの StorageClass を割り当てるのが基本です。
関連サービス・比較
土台となる Azure Managed Disks との関係を整理します。Container Storage はディスクを「コンテナ向けに束ねて自動供給する層」で、ディスク自体の置き換えではありません。
| 観点 | Azure Container Storage | Azure Managed Disks 直接利用 |
|---|---|---|
| 対象 | AKS のステートフルコンテナ | VM / 一部 AKS の PV |
| プロビジョニング | プールから PVC で動的に切り出し | ディスク単位で個別作成 |
| バッキングの選択 | ディスク / SAN / ローカル NVMe | ディスク SKU のみ |
| 大量ボリューム | 高速にスケールしやすい | VM のアタッチ上限に依存 |
| ローカル NVMe | ボリュームとして利用+複製 | 標準では一時ディスク扱い |
ハンズオン / CLI例
# Azure Container Storage の拡張機能を有効にして AKS クラスタを作成
az aks create \
--resource-group demo-rg \
--name demo-aks \
--node-count 3 \
--enable-azure-container-storage azureDisk \
--location japaneast
# クラスタ認証情報を取得
az aks get-credentials \
--resource-group demo-rg \
--name demo-aks
# 用意された StorageClass を確認し、PVC を作成してボリュームを動的プロビジョニング
kubectl get storageclass
cat <<'EOF' | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: demo-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: acstor-azuredisk
resources:
requests:
storage: 100Gi
EOF
# バインド状態を確認
kubectl get pvc demo-pvc
Azure Service
Azure Container Storageを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
ストレージ
比較で見る軸
クラウド: Azure / カテゴリ: ストレージ / 難易度: intermediate
導入後に効く点
マネージドディスク・Elastic SAN・ローカル NVMe を裏付けに選べ、用途で使い分ける。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Azure
- カテゴリ
- ストレージ
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- performance / operational / reliability / cost
判断チェックリスト
- 自社の用途が「ストレージ / performance」に近いか確認する。
- 強みである「AKS のコンテナ向けに永続ボリュームをプール化して供給するマネージドサービス。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。