Как я могу удалить или игнорировать нежелательный .snapshot в подключенном томе? - PullRequest
0 голосов
/ 26 июня 2019

Я использую кластер kubernetes с NFS NAStorage, и когда я монтирую тома, они получают каталог .snapshot, созданный в точке монтирования. Это вызывает проблемы, например, при использовании Helm Charts, так как они не ожидают неизвестный каталог «Только чтение» по определенным путям (например, chown ... <dir> может привести к сбою, аварийно завершив работу контейнера).

При установке Graylog Helm Chart я заметил initContainer для сбоя модуля серого журнала из-за chown: ... Read-only file system после запуска следующей строки chown:

chown -R 1100:1100 /usr/share/graylog/data/

, где смонтирован следующий том:

...
volumeMounts:
  - mountPath: /usr/share/graylog/data/journal
    name: journal
...

Я попытался обойти это, изменив команду «тихо», чтобы она запускалась : при сбое:

chown -fR 1100:1100 /usr/share/graylog/data/ || :

Это сделало initContainer успешным, но теперь вместо этого основной контейнер падает, на этот раз из-за простого присутствия каталога .snapshot.

...
kafka.common.KafkaException: Found directory /usr/share/graylog/data/journal/.snapshot, '.snapshot' is not in the form of topic-partition
If a directory does not contain Kafka topic data it should not exist in Kafka's log directory
...

Я также пытался изменить точку монтирования тома, переместив его на один уровень вверх, но это вызывает новые проблемы:

...
volumeMounts:
  - mountPath: /usr/share/graylog/data
    name: data-journal
...
com.github.joschi.jadconfig.ValidationException: Parent path /usr/share/graylog/data/journal for Node ID file at /usr/share/graylog/data/journal/node-id is not a directory

Я ожидал, что будет какой-то способ отключить создание каталога .snapshot, в идеале способ размонтировать / никогда не монтировать его в первую очередь. Это или любой способ заставить контейнер должным образом игнорировать каталог, чтобы он не мешал процессам в контейнере, так как само его присутствие может серьезно нарушить работу. Однако мне еще не удалось найти ничего подобного, и я не могу найти никого, кто имел подобную проблему (введение томных снимков томов в kubernetes, по меньшей мере, не облегчило поиск).

Редактировать 1

Я пытался (частично успешно, я получаю ошибку Parent path ... is not a directory выше), чтобы реализовать subPath: journal, таким образом, обходя каталог .snapshot (или я так полагаю), но это все еще означает потенциальное редактирование каждой диаграммы, которая используется в моем кластер. Надеюсь, найдется альтернатива на более высоком уровне.

volumeMounts:
  - mountPath: /usr/share/graylog/data/journal
    name: data-journal
    subPath: journal

Редактировать 2

Я работаю с кластером без металла, с MetalLB и Nginx в качестве loadbalancer + ingress controller. Решение для хранения данных предоставляется сторонним поставщиком, и из его решения для резервного копирования создается каталог .snapshot.

Мой воображаемый обходной путь

Поскольку это в основном будет проблемой при использовании Helm Charts или других развертываний, когда монтирование томов будет более или менее вне нашего контроля, я рассмотрю применение « kustomization », которое добавляет одну строку к каждому объему, добавив

...
subPath: mount

или что-то в этом роде. Сделав это, я должен отделить фактическую точку монтирования в томе и каталог, который фактически монтируется в контейнере, на один уровень, оставив каталог .snapshot скрытым в объекте абстрактного тома. Я опубликую свои выводы и потенциальную кастомизацию, которая может из этого выйти, если кто-то столкнется с подобной проблемой.

Если кто-то думает о более обтекаемом решении, оно все равно очень приветствуется - я уверен, что это можно улучшить.

...