Я хотел бы добавить том 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
iscsiadm ... -login; mount /dev/sdc
, только Kubernetes не может смонтировать ее на том же узле. - person rookie099   schedule 02.05.2019$ 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.2019StorageClass
), а указываю том непосредственно внутри данного манифеста модуля. Я попытался начать с максимально простой настройки. - person rookie099   schedule 02.05.2019