Overview
このドキュメントでは、カスタム Kubernetes ストレージ クラスと永続ボリュームを使用して外部記憶域ネットワーク (SAN) リソースを使用するように Azure Local で AKS クラスターを構成する手順について説明します。 基になるメカニズムはコンテナー ストレージ インターフェイス (CSI) です。これにより、Kubernetes は標準化された方法で幅広いストレージ バックエンドと対話できます。 SAN プロビジョンナーにマップするカスタム StorageClass を定義することで、ワークロードはボリュームごとに手動で管理者の介入を行うことなく、永続ストレージを動的に要求およびバインドできます。
前提条件
Azure にデプロイおよび登録された Azure ローカル クラスター。
aksarc および connectedk8s 拡張機能と共にインストールされた Azure CLI。
Azure ローカル クラスター用に構成されたカスタムの場所。
AKS クラスター用に作成された論理ネットワーク (vnet)。
クラスター管理者アクセス権を持つ Microsoft Entra グループ。
Azure Local クラスター ノードからプロビジョニングされ、アクセス可能な外部 SAN ストレージへのアクセス。
kubectl がローカルにインストールされています。
手順 1: AKS クラスターを作成する
オプション A: Azure portal
- Azure portal で Azure ローカル クラスターに移動します。
- 左側のメニューで、[リソース → Kubernetes クラスター] をクリックします。
- [Kubernetes クラスターの作成] をクリックします。
- クラスター名を指定し、Azure ローカル クラスターのカスタムの場所を選択し、残りのフィールドに入力します。
- ウィザードを続行し、[作成] をクリックします。
オプション B: Azure CLI
次のコマンドを実行する前に、必要な Azure CLI 拡張機能をインストールします。 Azure にサインインし、ターゲット サブスクリプションを設定してから、次のコマンドを実行します。
az aksarc create \
-n $aksclustername \
-g $resource_group \
--custom-location $customlocationID \
--vnet-ids $logicnetId \
--aad-admin-group-object-ids $aadgroupID \
--generate-ssh-keys
手順 2: Kubernetes クラスターに接続する
ターミナル ウィンドウで az connectedk8s proxy コマンドを実行して、新しく作成されたクラスターに接続します。 これにより、Arc に接続されたクラスターへのローカル プロキシが確立されます。 次に、同じ作業フォルダーを指す新しい PowerShell ウィンドウを開きます。
クラスターで動作する後続のすべての kubectl コマンドでは、次のフラグを追加して Kubernetes 構成ファイルを明示的に指定することが必要になる場合があります。
--kubeconfig .\aks-arc-kube-config
手順 3: ディスク用のカスタム ストレージ クラスを作成する
カスタム StorageClass は、Kubernetes がストレージ要求を Azure Local で使用可能な特定の SAN ベースのディスクの種類にマップする方法です。 StorageClass 定義は、CSI プロビジョニング、再利用ポリシー、バインド モード、およびストレージ ベンダーの CSI ドライバーで必要な SAN 固有のパラメーターを指定します。
Microsoft Learn のドキュメントに従って、ディスク用のカスタム ストレージ クラスを作成します。Azure Arc で有効になっている AKS で Container Storage Interface (CSI) ディスク ドライバーを使用する - Azure Arc で有効になっている AKS |Microsoft Learn
または、Azure portal を使用します。AKS クラスター ページに移動し、ストレージ→ Kubernetes リソースをクリックします。 このページでは、ストレージ クラス、永続ボリューム要求、および永続ボリュームを作成および管理できます。
手順 4: 永続ボリューム要求を作成する (PVC)
StorageClass が作成されたら、永続ボリューム要求 (PVC) を定義して、SAN ストレージ リソースにバインドされている永続ボリュームを要求します。 次の例では、カスタム ストレージ クラスを使用して 1 GiB ボリュームを要求します。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: aks-hci-vhdx
spec:
accessModes:
- ReadWriteOnce
storageClassName: <your custom storage class name>
resources:
requests:
storage: 1Gi
手順 5: ポッドで永続ボリュームを使用する
volumeMount を使用して、ポッド定義内の PVC を参照します。 次の例では、SAN ベースのボリュームを /mnt/aks-hci にマウントする nginx コンテナーをデプロイします。このコンテナーでは、アプリケーションでデータの読み取りと書き込みを行うことができます。
kind: Pod
apiVersion: v1
metadata:
name: nginx
spec:
containers:
- name: myfrontend
image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
volumeMounts:
- mountPath: "/mnt/aks-hci"
name: volume
volumes:
- name: volume
persistentVolumeClaim:
claimName: aks-hci-vhdx
手順 6: 永続ボリュームを使用してサンプル アプリケーションをデプロイする
次の完全なマニフェストは、Redis バックエンドと Web フロントエンドで構成される Azure Vote アプリケーションをデプロイします。 どちらのコンポーネントも SAN ベースの永続ボリュームをマウントし、Azure Local 上の外部ストレージとのエンドツーエンドの統合を示します。
Note
このマニフェストを適用する前に、(手順 4 で説明されているように) カスタム ストレージ クラスを使用して、PVC aks-hci-vhdx-1 と aks-hci-vhdx-2 が既に作成されていることを確認します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: azure-vote-back
spec:
replicas: 1
selector:
matchLabels:
app: azure-vote-back
template:
metadata:
labels:
app: azure-vote-back
spec:
nodeSelector:
"kubernetes.io/os": linux
containers:
- name: azure-vote-back
image: mcr.microsoft.com/oss/bitnami/redis:6.0.8
env:
- name: ALLOW_EMPTY_PASSWORD
value: "yes"
ports:
- containerPort: 6379
name: redis
volumeMounts:
- mountPath: "/mnt/aks-hci"
name: volume1
volumes:
- name: volume1
persistentVolumeClaim:
claimName: aks-hci-vhdx-1
---
apiVersion: v1
kind: Service
metadata:
name: azure-vote-back
spec:
ports:
- port: 6379
selector:
app: azure-vote-back
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: azure-vote-front
spec:
replicas: 1
selector:
matchLabels:
app: azure-vote-front
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
minReadySeconds: 5
template:
metadata:
labels:
app: azure-vote-front
spec:
nodeSelector:
"kubernetes.io/os": linux
containers:
- name: azure-vote-front
image: lgmorand/azure-vote-front:v1
ports:
- containerPort: 80
resources:
requests:
cpu: 250m
limits:
cpu: 500m
env:
- name: REDIS
value: "azure-vote-back"
volumeMounts:
- mountPath: "/mnt/aks-hci"
name: volume2
volumes:
- name: volume2
persistentVolumeClaim:
claimName: aks-hci-vhdx-2
---
apiVersion: v1
kind: Service
metadata:
name: azure-vote-front
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: azure-vote-front