你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将 Azure 弹性 SAN 卷连接到 Azure Kubernetes 服务群集
本文介绍如何从 Azure Kubernetes 服务 (AKS) 群集连接 Azure 弹性存储区域网络 (SAN) 卷。 若要建立此连接,请在群集上启用 Kubernetes iSCSI CSI 驱动程序。 启用此驱动程序后,可以在 AKS 群集上创建永久性卷,然后将弹性 SAN 卷附加到永久性卷,从而访问弹性 SAN 上的卷。
关于驱动程序
iSCSI CSI 驱动程序是一个开放源代码项目,支持通过 iSCSI 连接到 Kubernetes 群集。 由于此驱动程序是一个开放源代码项目,Microsoft 不会针对此驱动程序本身产生的任何问题提供支持。
GitHub 上提供了 Kubernetes iSCSI CSI 驱动程序:
授权
适用于 Kubernetes 的 iSCSI CSI 驱动程序在 Apache 2.0 许可证下获得许可。
先决条件
- 使用最新的 Azure CLI 或安装最新的 Azure PowerShell 模块
- 满足 iSCSI CSI 驱动程序的兼容性要求
- 部署弹性 SAN
- 配置虚拟网络终结点
- 配置虚拟网络规则
限制
- 当前不支持动态预配
- 目前仅支持
ReadWriteOnce
访问模式
入门
驱动程序安装
curl -skSL https://raw.githubusercontent.com/kubernetes-csi/csi-driver-iscsi/master/deploy/install-driver.sh | bash -s master --
部署后,检查 Pod 状态以验证是否已安装驱动程序。
kubectl -n kube-system get pod -o wide -l app=csi-iscsi-node
获取卷信息
需要卷的 StorageTargetIQN、StorageTargetPortalHostName 和 StorageTargetPortalPort。
可以使用以下 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 GB 的存储空间,并使其可用,请将 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 清单。 pod.yml 文件如以下示例所示。 可以将其用于制作自己的 Pod 清单,将 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 文件后,请创建一个 Pod。
kubectl apply -f pathtoyourfile/pod.yaml
若要验证是否已创建 Pod,请运行以下命令:
kubectl get pods
现已成功将弹性 SAN 卷连接到 AKS 群集。