Назад | Перейти на главную страницу

Делитесь дисками через NFS в кластере CoreOS?

Может ли кластер CoreOS делить дисковое пространство, например используя NFS? Если да, то как это сделать? (например, в сценарии, когда на одном узле много дискового пространства). Это было бы полезно, чтобы каждому узлу не приходилось загружать и хранить свою собственную библиотеку образов докеров, например, или совместно использовать пространство домашнего каталога между узлами.

Поскольку мы не можем установить дополнительное программное обеспечение непосредственно в CoreOS, я полагаю, что нужно было бы написать контейнер только для установки NFS (например, nfs-kernel-server в контейнере на основе Ubuntu).

Я понятия не имею, возможно ли это, но я надеюсь, что есть какой-то устоявшийся способ совместного использования дискового пространства в кластере CoreOS (в конце концов, похоже, что это обычное ожидание для кластера, и, возможно, мое предложение ниже более запутано, чем необходимо) . Просто чтобы дать некоторую информацию для обратной связи, вот что я пока думаю:

Предоставление NFS на стороне хоста кажется разумной задачей докера, например Я представляю себе Dockerfile вроде:

FROM ubuntu:14.04
ENV CLIENT_IP 11.111.111.111          
RUN apt-get update && apt-get install -y nfs-kernel-server supervisor
RUN mkdir /var/nfs && chown nobody:nogroup /var/nfs
RUN echo "/home       ${CLIENT_IP}(rw,sync,no_root_squash,no_subtree_check)" >> /etc/exports
RUN echo "/var/nfs    ${CLIENT_IP}(rw,sync,no_subtree_check)" >> /etc/exports
RUN exportfs -a
CMD service nfs-kernel-server start

куда CLIENT_IP был заполнен надлежащим образом (и, возможно, нам нужно заменить CMD вызовом supervisord или подобное, чтобы сделать это постоянным, но вы поняли идею)

Итак, как нам правильно связать тома при запуске этого контейнера? Какой том мы бы подключили с хоста CoreOS? Или мне нужно добавить что-то вроде --net="host" сделать клиента доступным?

docker run -v /home:/home nfs-server

Мне совсем не ясно, как мы могли бы реализовать клиентскую часть вещей, поскольку нам снова понадобится контейнер для предоставления nfs-common, и каким-то образом выяснить, как другие контейнеры могут затем совместно использовать этот ресурс (возможно, некоторое подходящее использование --volumes-from?) Мне бы хотелось увидеть схему того, как это сделать, или почему это невозможно, и есть ли лучшие альтернативы для решения этого варианта использования. Спасибо!

Вам нужно начать rpc-mountd и nfsd systemd и определите экспорт nfs в /etc/exports файл.

Пример cloud-config.yml:

coreos:
  units:
    - name: rpc-mountd.service
      command: start
      enable: true
    - name: nfsd.service
      command: start
      enable: truestrong text
write_files:
  - path: /etc/exports
    permissions: '0644'
    # Change /network-raid with the dir you want to export over nfs
    content: /network-raid/ 192.168.1.0/24(rw,async,no_subtree_check,no_root_squash,fsid=0)

У меня эта настройка работает с CoreOS Версия 723.3.0.

Вы можете узнать больше о совместном использовании диска через NFS в CentOS по следующим ссылкам:

У вас должна быть возможность смонтировать том NFS на хосте CoreOS. Если нет пользовательских инструментов для экспорта файловой системы из CoreOS, вы можете использовать контейнер панели инструментов Fedora, предоставляемый toolbox команда.