Модуль Kubernetes не может смонтировать том iSCSI: не удалось получить путь для диска iscsi

Я хотел бы добавить том iSCSI в модуль, как в этом этом примере. Я уже подготовил цель iSCSI на сервере Debian и установил open-iscsi на всех своих рабочих узлах. Я также подтвердил, что могу смонтировать цель iSCSI на рабочем узле с помощью инструментов командной строки (т.е. все еще вне Kubernetes). Это прекрасно работает. Для простоты аутентификации (CHAP) пока нет, а на целевой системе уже присутствует ext4 файловая система.

Теперь я хотел бы, чтобы Kubernetes 1.14 смонтировал ту же цель iSCSI в модуль со следующим манифестом:

---
apiVersion: v1
kind: Pod
metadata:
  name: iscsipd
spec:
  containers:
  - name: iscsipd-ro
    image: kubernetes/pause
    volumeMounts:
    - mountPath: "/mnt/iscsipd"
      name: iscsivol
  volumes:
  - name: iscsivol
    iscsi:
      targetPortal: 1.2.3.4 # my target
      iqn: iqn.2019-04.my-domain.com:lun1
      lun: 0
      fsType: ext4
      readOnly: true

Согласно kubectl describe pod, это работает на начальном этапе (SuccessfulAttachVolume), но затем не работает (FailedMount). Точное сообщение об ошибке гласит:

Warning  FailedMount ... Unable to mount volumes for pod "iscsipd_default(...)": timeout expired waiting for volumes to attach or mount for pod "default"/"iscsipd". list of unmounted volumes=[iscsivol]. list of unattached volumes=[iscsivol default-token-7bxnn]
Warning  FailedMount ... MountVolume.WaitForAttach failed for volume "iscsivol" : failed to get any path for iscsi disk, last err seen:
Could not attach disk: Timeout after 10s

Как я могу дополнительно диагностировать и решить эту проблему?

ОБНОВЛЕНИЕ. В этой связанной проблеме решение заключалось в использовании числовой IP-адрес цели. Однако в моем случае это не помогает, поскольку я уже использую targetPortal формы 1.2.3.4 (также пробовал как с номером порта 3260, так и без него).

ОБНОВЛЕНИЕ. Остановка scsid.service и / или open-iscsi.service (как предлагается здесь) тоже не повлияло.

ОБНОВЛЕНИЕ По всей видимости, ошибка возникает в pkg/volume/iscsi/iscsi_util.go в случае waitForPathToExist(&devicePath, multipathDeviceTimeout, iscsiTransport) сбоя. Однако странно то, что при его запуске файл с адресом devicePath (/dev/disk/by-path/ip-...-iscsi-...-lun-...) действительно существует на узле.

ОБНОВЛЕНИЕ. Я использовал эту процедуру для определения простой цели iSCSI в следующих тестовых целях:

pvcreate /dev/sdb
vgcreate iscsi /dev/sdb
lvcreate -L 10G -n iscsi_1 iscsi
apt-get install tgt
cat >/etc/tgt/conf.d/iscsi_1.conf <<EOL
<target iqn.2019-04.my-domain.com:lun1>
  backing-store /dev/mapper/iscsi-iscsi_1
  initiator-address 5.6.7.8 # my cluster node #1
  ... # my cluster node #2, etc.
</target>
EOL
systemctl restart tgt
tgtadm --mode target --op show

person rookie099    schedule 30.04.2019    source источник
comment
Вы проверили свои разрешения / эквивалент групп безопасности для диска?   -  person cookiedough    schedule 30.04.2019
comment
@cookiedough Как мне это сделать? В настоящее время я могу без проблем смонтировать цель в командной строке с помощью iscsiadm ... -login; mount /dev/sdc, только Kubernetes не может смонтировать ее на том же узле.   -  person rookie099    schedule 02.05.2019
comment
Привет @ rookie099, не могли бы вы поделиться своими манифестами pv и pvc? Также предоставьте нам вывод команд $ kubectl get pv и $ kubectl describe pv <your_pv>, а также $ kubectl get pvc и более поздних версий $ kubectl describe pvc <your_pvc>. Storageclass также может оказаться полезным $ kubectl get sc.   -  person PjoterS    schedule 02.05.2019
comment
@PjoterS Прямо сейчас я не использую ни _1 _ / _ 2_ (ни StorageClass), а указываю том непосредственно внутри данного манифеста модуля. Я попытался начать с максимально простой настройки.   -  person rookie099    schedule 02.05.2019
comment
@PjoterS P.S. Я только что пробовал альтернативную версию с _1 _ / _ 2_, но она не работает точно так же (как я уже подозревал).   -  person rookie099    schedule 02.05.2019
comment
Теперь, когда вы используете PV и PVC, можете ли вы поделиться манифестом и журналом описания?   -  person cookiedough    schedule 02.05.2019


Ответы (2)


Вероятно, это связано с проблемой аутентификации вашей цели iscsi.

Если вы еще не используете аутентификацию CHAP, вам все равно необходимо отключить аутентификацию. Например, если вы используете targetcli, вы можете выполнить следующие команды, чтобы отключить его.

$ sudo targetcli
/> /iscsi/iqn.2003-01.org.xxxx/tpg1 set attribute authentication=0 # will disable auth
/> /iscsi/iqn.2003-01.org.xxxx/tpg1 set attribute generate_node_acls=1 # will force to use tpg1 auth mode by default

Если это вам не помогает, поделитесь своей целевой конфигурацией iscsi или руководством, которому вы следовали.

person coolinuxoid    schedule 06.05.2019
comment
Мне трудно в это поверить, потому что я могу без проблем смонтировать цель в командной строке узла (вне Kubernetes). Но я добавлю свою целевую конфигурацию iSCSI к вопросу, как вы предлагаете. Не могу попробовать ваш конкретный рецепт, потому что я не использую targetcli (насколько мне известно). - person rookie099; 07.05.2019
comment
Да, вы можете смонтировать командную строку узла, добавив InitiatorName, но это тоже метод аутентификации. Но когда вы пытаетесь смонтировать с помощью модуля, нет параметра, позволяющего указать InitiatorName в конфигурации модуля. Вот почему вам нужно отключить метод аутентификации или использовать метод CHAP в TPG. Ты хоть пробовал? - person coolinuxoid; 07.05.2019
comment
Какой точный путь мне нужно использовать для моего примера: например, /iscsi/iqn.2019-04.my-domain.com/tpg1 set attribute authentication=0 не дает такого пути. - person rookie099; 07.05.2019
comment
если вы имеете в виду targetcli, когда вы создаете цель в /iscsi create, она создает имя цели iqn по умолчанию, и у вас будет один вариант. Вы можете следовать этому руководству, отключив метод аутентификации и так далее. atodorov.org/blog/2015/04/07/ - person coolinuxoid; 07.05.2019

это сработало для меня

iscsi:
     chapAuthSession: false

Использованная литература:

  1. https://github.com/kubernetes-retired/external-storage/tree/master/iscsi/targetd
  2. https://docs.mirantis.com/docker-enterprise/v3.1/dockeree-products/mke/deploy-apps-with-kubernetes/persistent-storage/configure-iscsi.html
person ale_maqueda    schedule 05.01.2021