在 CoreOS 叢集上透過 NFS 共用磁碟?

在 CoreOS 叢集上透過 NFS 共用磁碟?

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填寫得當(也許我們需要用調用supervisord或類似的命令替換 CMD 以使其持久化,但你明白了)

那麼,在運行這個容器時,我們如何正確連結卷呢?我們將從 CoreOS 主機連結哪個磁碟區?或者我需要添加一些東西--net="host"來使客戶端可用?

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

我完全不清楚我們如何實現客戶端的事物,因為我們再次需要一個容器來提供nfs-common,並以某種方式弄清楚其他容器如何共享該資源(也許是一些適當的使用--volumes-from?)我'我很樂意看到如何解決這個問題的概述,或為什麼它不可能以及是否有更好的替代方案來解決這個用例。謝謝!

答案1

您應該能夠在 CoreOS 主機上掛載 NFS 磁碟區。如果沒有從 CoreOS 匯出檔案系統的使用者層工具,您可以使用指令提供的 Fedora 工具箱容器toolbox

答案2

您需要啟動systemd 服務rpc-mountd並在檔案nfsd中定義您的 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 一起使用v723.3.0

您可以透過以下連結找到有關在 CentOS 上透過 NFS 共享磁碟的更多資訊:

相關內容