Azure Elastic SAN ボリュームを Azure Kubernetes Service クラスターに接続する
この記事では、Azure Kubernetes Service (AKS) クラスターから Azure Elastic Storage Area Network (SAN) ボリュームを接続する方法について説明します。 この接続を確立するには、クラスターで Kubernetes iSCSI CSI ドライバーを有効にします。 このドライバーを使用すると、AKS クラスターに永続ボリュームを作成し、Elastic SAN ボリュームを永続ボリュームにアタッチすることで、Elastic SAN 上のボリュームにアクセスできます。
ドライバーについて
iSCSI CSI ドライバーは、iSCSI 経由で Kubernetes クラスターに接続できるオープンソース プロジェクトです。 ドライバーはオープンソース プロジェクトであるため、Microsoft はドライバー自体に起因する問題についてはサポートを提供しません。
Kubernetes iSCSI CSI ドライバーは、GitHub で入手できます。
ライセンス
Kubernetes 用の iSCSI CSI ドライバーは、Apache 2.0 ライセンスでライセンスされています。
前提条件
- 最新の Azure CLI を使用するか、最新の Azure PowerShell モジュールをインストールする
- iSCSI CSI ドライバーの互換性要件を満たす
- Elastic SAN をデプロイする
- 仮想ネットワーク エンドポイントを構成する
- 仮想ネットワーク ルールを構成する
制限事項
- 動的プロビジョニングは現在サポートされていません
- 現在サポートされているのは
ReadWriteOnce
アクセス モードのみです
作業の開始
ドライバーのインストール
curl -skSL https://raw.githubusercontent.com/kubernetes-csi/csi-driver-iscsi/master/deploy/install-driver.sh | bash -s master --
デプロイ後、ポッドの状態を確認して、ドライバーがインストールされていることを確認します。
kubectl -n kube-system get pod -o wide -l app=csi-iscsi-node
ボリュームの情報の取得
ボリュームの StorageTargetIQN、StorageTargetPortalHostName、StorageTargetPortalPortalPort が必要です。
それらは、次の Azure PowerShell コマンドで取得できます。
Get-AzElasticSanVolume -ResourceGroupName $resourceGroupName -ElasticSanName $sanName -VolumeGroupName $searchedVolumeGroup -Name $searchedVolume
次の Azure CLI コマンドでも取得できます。
az elastic-san volume show --elastic-san-name --name --resource-group --volume-group-name
クラスター構成
ボリュームの情報を取得したら、AKS クラスター上の新しいリソース用にいくつかの yaml ファイルを作成する必要があります。
Storageclass
storageclass.yml ファイルを作成するには、次の例を使用します。 このファイルは、永続ボリュームのストレージ クラスを定義します。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: san-volume
provisioner: manual
永続ボリューム
ストレージ クラスを作成したら、pv.yml ファイルを作成します。 このファイルは、永続ボリュームを定義します。 次の例では、yourTargetPortal
、yourTargetPortalPort
、および yourIQN
を前に収集した値に置換してから、この例を使用して pv.yml ファイルを作成します。 1 ギガバイトを超えるストレージが必要で、それを使用できる場合は、1Gi
を必要なストレージの量に置換してください。
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: iscsiplugin-pv
labels:
name: data-iscsiplugin
spec:
storageClassName: san-volume
accessModes:
- ReadWriteOnce
capacity:
storage: 1Gi
csi:
driver: iscsi.csi.k8s.io
volumeHandle: iscsi-data-id
volumeAttributes:
targetPortal: "yourTargetPortal:yourTargetPortalPort"
portals: "[]"
iqn: "yourIQN"
lun: "0"
iscsiInterface: "default"
discoveryCHAPAuth: "true"
sessionCHAPAuth: "false"
pv.yml ファイルを作成したら、次のコマンドで永続ボリュームを作成します。
kubectl apply -f pathtoyourfile/pv.yaml
永続ボリューム要求
次に、永続ボリューム要求を作成します。 前に定義した永続ボリュームで定義したストレージ クラスを使用します。 次に、pvc.yml ファイルの例を示します。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: iscsiplugin-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: san-volume
selector:
matchExpressions:
- key: name
operator: In
values: ["data-iscsiplugin"]
pvc.yml ファイルを作成した後、永続ボリューム要求を作成します。
kubectl apply -f pathtoyourfile/pvc.yaml
PersistentVolumeClaim が作成され、PersistentVolume にバインドされていることを確認するには、次のコマンドを実行します。
kubectl get pvc pathtoyourfile
最後に、ポッド マニフェストを作成します。 次に、pod.yml ファイルの例を示します。 これを使用して独自のポッド マニフェストを作成し、name
、image
、および mountPath
の値を独自のものに置換することができます。
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: maersk/nginx
imagePullPolicy: Always
name: nginx
ports:
- containerPort: 80
protocol: TCP
volumeMounts:
- mountPath: /var/www
name: iscsi-volume
volumes:
- name: iscsi-volume
persistentVolumeClaim:
claimName: iscsiplugin-pvc
pod.yml ファイルを作成したら、ポッドを作成します。
kubectl apply -f pathtoyourfile/pod.yaml
ポッドが作成されたことを確認するために、次のコマンドを実行します。
kubectl get pods
これで、Elastic SAN ボリュームが AKS クラスターに正常に接続されました。