
Возможно ли для кластера CoreOS совместно использовать дисковое пространство, например, с помощью NFS? Если да, то как это сделать? (например, в сценарии, когда у одного узла много дискового пространства). Это было бы полезно, чтобы избежать необходимости загружать и хранить собственную библиотеку образов Docker для каждого узла, например, или совместно использовать пространство домашнего каталога между узлами.
Поскольку мы не можем устанавливать дополнительное программное обеспечение непосредственно в CoreOS, я полагаю, что для установки NFS придется написать контейнер (например, nfs-kernel-server
в контейнере на базе Ubuntu).
Я понятия не имею, возможно ли это, но надеюсь, что есть какой-то устоявшийся способ совместного использования дискового пространства в кластере CoreOS (в конце концов, это похоже на общее ожидание для кластера, и, возможно, мое предложение ниже более запутанное, чем необходимо). Просто чтобы предоставить немного пищи для обратной связи, вот что я думаю на данный момент:
Предоставление хостовой части NFS кажется разумной задачей Docker, например, я представляю себе 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
?). Я бы с удовольствием увидел схему того, как это сделать, или почему это невозможно, и есть ли лучшие альтернативы для решения этого варианта использования. Спасибо!
решение1
Вы должны иметь возможность монтировать том NFS на хосте CoreOS. Если нет пользовательских инструментов для экспорта файловой системы из CoreOS, вы можете использовать контейнер Fedora toolbox, предоставленный командой toolbox
.
решение2
Вам необходимо запустить 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)
У меня эта настройка работает с CoreOSv723.3.0.
Дополнительную информацию о совместном использовании дисков через NFS в CentOS можно найти по следующим ссылкам: