Подключение томов Azure Elastic SAN к кластеру Azure Kubernetes Service

В этой статье объясняется, как подключить том Azure Elastic SAN из кластера Службы Azure Kubernetes (AKS). Чтобы сделать это подключение, включите драйвер Kubernetes iSCSI CSI в кластере. Используя этот драйвер, вы можете получить доступ к томам в эластичной сети SAN, создав постоянные тома в кластере AKS, а затем подключив тома Elastic SAN к постоянным томам.

Сведения о драйвере

Драйвер ISCSI CSI — это проект открытый код, который позволяет подключаться к кластеру Kubernetes через iSCSI. Так как драйвер является проектом с открытым исходным кодом, корпорация Майкрософт не предоставляет поддержку каких-либо проблем, связанных с драйвером.

Драйвер CSI iSCSI Kubernetes доступен на сайте GitHub:

Лицензирование

Драйвер ISCSI CSI для Kubernetes лицензирован в соответствии с лицензией 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

Конфигурация кластера

После получения информации о вашем томе создайте несколько YAML файлов для новых ресурсов в вашем кластере AKS.

Хранилищный класс StorageClass

Используйте следующий пример для создания storageclass.yml файла. Этот файл определяет класс хранилища постоянного тома.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: san-volume
provisioner: manual

Персистентный том

Создав класс хранилища, создайте файл pv.yml . Этот файл определяет ваш постоянный том. В следующем примере замените yourTargetPortalи yourTargetPortalPortyourIQN на значения, собранные ранее. Используйте пример для создания файла 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 манифест. В следующем примере показано, как может выглядеть файл 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  

Вы успешно подключили том Elastic SAN к кластеру AKS.

Следующие шаги

Планирование развертывания эластичной сети SAN