你当前正在访问 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 许可证下获得许可

先决条件

限制

  • 当前不支持动态预配
  • 目前仅支持 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 文件。 此文件定义永久性卷。 在下面的示例中,将 yourTargetPortalyourTargetPortalPortyourIQN 替换为之前收集的值,然后使用该示例创建 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 清单,将 nameimagemountPath 的值替换为自己的值即可:

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 群集。

后续步骤

规划弹性 SAN 的部署