Рейтинг:1

Kubernetes: pod не может смонтировать PVC, хотя последний вроде бы правильно привязан к PV

флаг ru

≈ Здравствуйте.

У меня возникла проблема при попытке развернуть модуль, настроенный для использования постоянного тома.Моя установка размещена в облаке Hetzner, а Kubernetes настроен в соответствии с инструкциями, предоставленными провайдером. Базовая конфигурация выглядит нормально, так как я могу развернуть, например. Portainer из одного из предоставленных манифестов: корректно монтирует PVC и запускается. Поскольку конфигурация по умолчанию не создает постоянное хранилище, каждый раз, когда я отменяю и повторно развертываю Portainer, все данные теряются.

Итак, я приступил к созданию постоянный объем, но последний шаг не работает. Я не могу сказать, является ли проблема общей для Kubernetes или связана с моей интеграцией с Hetzner, но я думаю, что имеет смысл сначала проверить первую гипотезу. Вот и спрашиваю здесь, прежде чем идти на форум Hetzner.

Шаги:

  1. Я создал Volume с помощью пользовательского интерфейса Hetzner Cloud.

  2. Затем я развернул PV:

    апиВерсия: v1
    вид: пространство имен
    метаданные:
      имя: Портейнер
    ---
    апиВерсия: v1
    вид: персистентволуме
    метаданные:
      имя: pv-портанер-тест
      пространство имен: portainer
      этикетки:
        окружение: тест
    спецификация:
      storageClassName: portainer-test
      режимы доступа:
        - ReadWriteOnce
      емкость:
        хранилище: 10Gi
      персистентволумереклаймполици: сохранить
      VolumeMode: файловая система
      Си Си:
        драйвер: csi.hetzner.cloud
        Тип фс: ext4
        дескриптор тома: "pv_id"

pv_id это идентификатор тома, который я вижу в пользовательском интерфейсе Hetzner.

Я вижу клип с kubelet получить pv -A:

ПРОСТРАНСТВО ИМЕН ИМЯ ЕМКОСТЬ РЕЖИМЫ ДОСТУПА RECLAIM POLICY STATUS CLAIM STORAGECLASS RESON AGE
            постоянный объем/pv-portainer-test 10Gi RWO Retain Available portainer-test 71s

Обратите внимание, что пространство имен не определено... но я полагаю, что это не серьезная проблема. Может быть, я ошибаюсь.

  1. Я развернул Portainer из здесь и следующий патч:
    вид: Персистентволумеклаим
    апиВерсия: v1
    метаданные:
      имя: Портейнер
      пространство имен: portainer
    спецификация:
      storageClassName: portainer-test
      режимы доступа:
        - ReadWriteOnce
      Ресурсы:
        Запросы:
          хранилище: "10Gi"

Теперь с kubectl получить пвх, пв-А Я вижу, что PVC привязан к PV:

ИМЯПРОСТРАНСТВО НАЗВАНИЕ СТАТУС ТОМ ЕМКОСТЬ РЕЖИМЫ ДОСТУПА STORAGECLASS AGE
portainer persistvolumeclaim/portainer Связанный pv-portainer-test 10Gi RWO portainer-test 16m

ПРОСТРАНСТВО ИМЕН ИМЯ ЕМКОСТЬ РЕЖИМЫ ДОСТУПА RECLAIM POLICY STATUS CLAIM STORAGECLASS RESON AGE
            постоянный объем/pv-portainer-test 10Gi RWO Retain Bound portainer/portainer portainer-test 17 м
  1. Но капсула Portainer остается в КонтейнерСоздание статус навсегда. С kubectl описать Я вижу причину:

Предупреждение FailedAttachVolume 2s (x7 over 38s).

Таким образом, кажется, что он жалуется, потому что PV уже подключен... но на самом деле он должен был быть подключен именно к этому модулю.

Рейтинг:1
флаг in

Обычно вам не нужно сначала создавать PV, когда вы создаете PVC, PV создается автоматически. Однако оставим как есть и есть сомнения по поводу вашего класса хранения Портейн-тест, как вы его создали?

Если вы начнете с самого начала, я полагаю, вы создали секрет для своего токена API для Hetzner и включили драйверы CSI, верно? Затем запросить PVC и развернуть Стручок не должно быть проблемой, если только тип драйвера не поддерживается Kubernetes. Я не знаю, какой у вас тип, но учтите, что Kubernetes поддерживает за csi.hetzner.cloud Только v0.3, v1.0 версии.

Предположим, что до этого вы все делали правильно, и версия Kubernetes (1.13 или новее) и версии драйверов хороши. Итак, вот гид о том, как вручную создать объект PersistentVolume для представления существующего тома:

апиВерсия: v1
вид: персистентволуме
метаданные:
  имя: PV-портанер-тес
спецификация:
  емкость:
    хранилище: 10Gi
  режимы доступа:
    - ReadWriteOnce
  персистентволумереклаймполици: сохранить
  Си Си:
    драйвер: csi.hetzner.cloud
    VolumeHandle: портьер
    Только для чтения: ложь
    Тип фс: ext4
    атрибуты тома:
      фу: бар
    ControllerPublishSecretRef:
      имя: мой секрет1
      пространство имен: моеимяпространство
    nodeStageSecretRef:
      имя: мой секрет2
      пространство имен: моеимяпространство
    nodePublishSecretRef
      имя: мой секрет3
      пространство имен: моеимяпространство

затем прикрепить и смонтировать объем, развернув Стручок. Когда модуль, ссылающийся на том CSI, запланирован, Kubernetes инициирует соответствующие операции с внешним подключаемым модулем CSI (ControllerPublishVolume, NodeStageVolume, NodePublishVolume и т. д.), чтобы убедиться, что указанный том подключен, смонтирован и готов к использованию контейнерами в стручок

И обратите внимание: для csi-драйверов существует ограничение до 16, пожалуйста, проверьте, не является ли ваше ограничение почти 16.

флаг ru
(переписывая комментарий...)
флаг ru
«Обычно вам не нужно сначала создавать PV, когда вы создаете PVC, PV создается автоматически». Да, но с persistVolumeReclaimPolicy: Удалить, а мне нужно Сохранить. «Однако оставим как есть и есть сомнения по поводу вашего класса хранения portainer-test, как вы его создали?» Для того, что касается storageClass выше, это ошибка. Теперь я заменил его на hcloud-volumes. В остальном приведенный вами пример интересен, в частности, что касается VolumeHandle: portainer. Позвольте мне сделать пару новых попыток, а затем я прокомментирую больше.
флаг ru
Хорошо, на самом деле это практически то, что я уже сделал и описал выше - volumeHandle должен быть идентификатором тома, который я предварительно создал. И это работает для создания PV, как я уже сказал, но не монтируется в pod. Насколько я понимаю, секреты указывать не нужно, так как секретный токен уже был передан драйверу Hetzner CSI во время установки.
Рейтинг:1
флаг ru

Проблема была не в k8s, а конкретно в Hetzner. В конфигурации проекта я оставил том подключенным к фиксированному серверу, что, очевидно, сделало его недоступным для подключения через драйвер CSI. Пользователь на Облачный форум Hetzner указал мне на это.

В любом случае, я хотел бы поблагодарить Бажикова за то, что он дал мне несколько подсказок, которые пригодились при решении других проблем.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.