WedX - журнал о программировании и компьютерных науках

Совместное использование папки между узлами Kubernetes

У меня есть 3 узла Kubernetes, один из них главный, а остальные рабочие. Я развернул приложение Laravel на главном узле и создал тома и класс хранилища, которые указывают на эту папку. Это мои файлы YAML для создания томов и утверждения постоянного тома

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    name: qsinav-pv-www-claim
spec:
    storageClassName: manual
    accessModes:
        - ReadWriteOnce
    resources:
        requests:
            storage: 5Gi

класс хранения

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: manual
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-ssd

apiVersion: v1
kind: PersistentVolume
metadata:
  name: qsinav-pv-www
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  claimRef:
    namespace: default
    name: qsinav-pv-www-claim
  hostPath:
    path: "/var/www/html/Test/qSinav-starter"

Проблема в том, что модули на каждом узле пытаются смонтировать папку на своем родительском узле. Так как я запускаю веб-приложение и у меня есть балансировка нагрузки между этими узлами, если я вошел в первый узел и следующий запрос отправился на узел 2, он перенаправляет меня на страницу входа, поскольку у меня там нет сеанса. Поэтому мне нужно предоставить доступ к одной папке с главного узла всем рабочим узлам. Я не знаю, что мне делать, чтобы достичь своей цели, поэтому, пожалуйста, помогите мне решить эту проблему. Заранее спасибо


  • Что должно быть в этом томе? Это просто данные приложения, или вы пытаетесь поместить все приложение в том? 28.03.2021
  • Это твое приложение? Знаете ли вы, что это, как правило, не лучший способ обмена данными сеанса между контейнерами? Вы уверены, что данные сеанса хранятся на диске, а не в памяти, и в этом случае они не будут работать? 29.03.2021

Ответы:


1

Да, это ожидаемо и четко упоминается в документации для hostPath тома.

Модули с одинаковой конфигурацией (например, созданные из шаблона PodTemplate) могут вести себя по-разному на разных узлах из-за разных файлов на узлах.

Вам нужно использовать что-то вроде nfs, которое можно использовать совместно между узлами. Ваше определение PV в конечном итоге будет выглядеть примерно так (измените IP и путь в соответствии с вашей настройкой):

apiVersion: v1
kind: PersistentVolume
metadata:
  name: qsinav-pv-www
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  claimRef:
    namespace: default
    name: qsinav-pv-www-claim
  nfs: 
    path: /tmp 
    server: 172.17.0.2
28.03.2021

2

не используйте тип hostPath, потому что этот тип тома предназначен только для кластера с одним узлом, он хорошо работает только для среды с одним узлом, потому что, если модуль назначен другому узлу, тогда модуль не может получить данные. .

поэтому используйте тип Локальный

Он запоминает, какой узел использовался для предоставления тома, таким образом гарантируя, что перезапускающийся POD всегда найдет хранилище данных в том состоянии, в котором он оставил его до перезагрузки.

Ps 1: после остановки узла данные как пути к хосту, так и локальных постоянных томов этого узла теряются.

ps 2: the local and the hostPath type don't work with dynamic provisioning

apiVersion: v1
kind: PersistentVolume
metadata:
  name: qsinav-pv-www
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  claimRef:
    namespace: default
    name: qsinav-pv-www-claim
  local:
    path: "/var/www/html/Test/qSinav-starter"

28.03.2021
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: wedx@cp9.ru