Не удается запустить iscsiadm внутри контейнера krt на CoreOS

Я пытаюсь запустить kubernetes с плагином iscsi внутри rkt на CoreOS, используя инструкцию здесь. Проблема в том, что демон iscsi не запускается, поэтому я получаю сообщение об ошибке и не могу подключить том к модулю.

iscsi_util.go:112] iscsi: failed to sendtargets to portal 156.64.48.59:3260 
    error: iscsiadm: Failed to load module tcp: No such file
iscsiadm: Could not load transport tcp.Dropping interface default.
[disk_manager.go:50] failed to attach disk 
iscsi: failed to setup
kubelet.go:1780] Unable to mount volumes for pod ...

Я попытался смонтировать весь /dev/ внутри контейнера rkt, но это мне не помогло.

2 ответа

Решение

Чтобы получить рабочее решение, мне нужно было:

  • Изменить параметры RKT на

    RKT_OPTS=- том = iscsiadm, вид = хост, источник = / usr / sbin / iscsiadm --mount том = iscsiadm, цель = / usr / sbin / iscsiadm --volume = resolv, kind = хост, источник =/etc/resolv.conf --mount volume=resolv,target=/etc/resolv.conf --volume=etcs,kind=host,source=/etc/iscsi/ --mount volume=etcs,target=/etc/iscsi - том = iscsid, вид = хост, источник = / usr / sbin / iscsid --mount том = iscsid, цель = / usr / sbin / iscsid

  • sudo modprobe iscsi_tcp

Инициализируйте модуль tcp заранее, потому что он нужен для ascsiadm. Но CoreOS загружает модули "по мере необходимости ", и по некоторым причинам он не работает внутри контейнера rkt.

  • echo "InitiatorName=iqn.2001-12.com.mycompany:volume.openiscsi-initiator" > /etc/iscsi/initiatorname.iscsi

Требуется хотя бы какое-то имя инициатора.

Я также заполнил ошибку в CoreOS, возможно, существует лучший обходной путь.

Не похоже, что они добавят его по умолчанию в CoreOS, но вы можете добавить его в конфигурации зажигания. iscsid-initiatorname.service создаст имя для вас.

  "storage": {
    "files": [{
      "filesystem": "root",
      "path": "/etc/modules-load.d/iscsi_tcp.conf",
      "contents": { "source": "data:iscsi_tcp" },
      "mode": 420
    }]
  },
  "systemd": {
    "units": [{
        "enable": true,
        "name": "iscsid-initiatorname.service"
    }]
  }

Это работает только на новой установке или свежем корневом диске, поэтому создайте файл, выполните modprode iscsi_tcp, и делать systemctl start iscsid-initiatorname.service если вы не хотите начинать с чистого рута.

Тогда, если вы используете kubernetes, просто настройте сопоставления томов:

  kubelet:
    extra_args:
      feature-gates: MountPropagation=true

    extra_binds:
      - /usr/sbin/iscsiadm:/usr/sbin/iscsiadm
      - /usr/sbin/iscsid:/usr/sbin/iscsid
      - /etc/iscsi/:/etc/iscsi/

Это заставило OpenEBS работать на моем базовом кластере CoreOS.

Другие вопросы по тегам