【问题标题】:Shared storage with CoreOS与 CoreOS 共享存储
【发布时间】:2016-04-08 07:04:22
【问题描述】:

我有一个由 4 台 CoreOS 机器组成的测试集群。我想在它们之间共享存储,例如将我的 docker 图像放在那里,而不必将它们拉到每台机器上。

不过,CoreOS 似乎不支持 NFS。在 CoreOS 上创建共享存储有哪些选择?

【问题讨论】:

  • 这个问题可能属于serverfault.com而不是这里。
  • 感谢您的指点,也在那里问过。
  • @babbata。你能提供更多细节吗? NFS 是我们 CI 测试套件的一部分。
  • ClusterHQ 的 Flocker 看起来很有前途。等待他们发​​布 CoreOS 的版本。 docs.clusterhq.com/en/0.3.2/faq/…
  • CoreOS 支持 nfs

标签: coreos


【解决方案1】:

CoreOS 实际上是 support NFS-- 我们为 AWS 中的 EFS 共享存储配置了 NFS 挂载。

这是在 /mnt 上挂载 AWS EFS 的示例云配置:

#cloud-config

write_files:
  - path: /etc/conf.d/nfs
    permissions: '0644'
    content: |
      OPTS_RPC_MOUNTD=""
coreos:
  units:
    - name: rpc-statd.service
      command: start
      enable: true
    - name: mnt.mount
      content: |
         [Mount]
         What=AZ_ZONE.fs-xxxxxxxx.efs.us-west-2.amazonaws.com:/
         Where=/mnt
         Type=nfs
    - name: runcmd.service
      command: start
      content: |
         [Unit]
         Description=command
         [Service]
         Type=oneshot
         ExecStart=/bin/sh -c "AZ_ZONE=$(curl -L http://169.254.169.254/latest/meta-data/placement/availability-zone); sed -i \"s/AZ_ZONE/$AZ_ZONE/\" /etc/systemd/system/mnt.mount; systemctl daemon-reload; systemctl restart mnt.mount"
  update:
    group: stable
    reboot-strategy: off

将 xxxx 替换为您的 EFS 共享的唯一字母数字 ID。

在 EFS 可用之前,我们使用 BitTorrent Sync,或者。

很好奇你为什么要分享你的图像层。这些层本身就是 Docker 的部署优势。如果您有足够的共同点,那么在应用程序之间很少会重新拉动。假设两个不同的应用程序共享最大的层 Ubuntu:latest 基础。当您在该主机上启动第二个应用程序时,您不必重新启动 Ubuntu。你也不能使用任何旧的存储后端——CoreOS 使用 OverlayFS,这可能很有趣。

【讨论】:

    【解决方案2】:

    我最近使用Deis 解决了这个确切的问题。除了其他有用的功能外,它还设置了一个开箱即用的Ceph 存储集群和私有 docker 注册表。存储卷是容错的,跨越集群中的所有机器。

    【讨论】:

      【解决方案3】:

      我在 CoreOS 集群中使用EFS(Amazon Elastic File System) 作为共享存储。

      另一个选项是来自 ClusterHQ 的Flocker。但它尚未在 CoreOS 中可用

      【讨论】:

        【解决方案4】:

        您可以拥有自己的 docker 注册表服务器,该服务器仅在主计算机上启动并从 s3 拉取图像。这个我没试过,但看起来不错。下面的服务文件将与官方注册表存储库一起使用。这不是一个完整的解决方案,但我认为应该能让你找到你正在寻找的方向。

        https://registry.hub.docker.com/u/blalor/docker-s3-registry/

        您将拥有一个用于 docker 注册表的服务文件和一个服务发现文件,以通知您的集群注册表所在的位置。另一种方法是使用名为 http://quay.io

        的 CoreOS 私有注册表

        registry@.service 文件:

        [Unit]
        Description=Docker Registry
        After=docker.service
        Requires=docker.service
        
        [Service]
        Restart=always
        RestartSec=10s
        TimeoutStartSec=0
        ExecStartPre=-/usr/bin/docker kill registry
        ExecStartPre=-/usr/bin/docker rm registry
        ExecStartPre=/usr/bin/docker pull registry
        ExecStart=/usr/bin/docker run -p 5000:5000 --name registry -e SETTINGS_FLAVOR=s3 -e AWS_BUCKET=my-registry-bucket -e STORAGE_PATH=/registry -e AWS_KEY=... -e AWS_SECRET="..." registry
        ExecStartPost=/usr/bin/etcdctl set /domains/domain.com/registry `ifconfig|grep 'broadcast 10'|awk '{print $2}'`
        ExecStop=/usr/bin/docker stop registry
        
        [Install]
        WantedBy=multi-user.target
        
        [X-Fleet]
        Global=true
        Conflicts=registry@*.service
        

        registry-discovery@.service 文件:

        [Unit]
        Description=Announce registry
        BindsTo=registry@*.service
        
        [Service]
        ExecStart=/bin/sh -c "while true; do etcdctl set /services/registry/%H:%i '{ \"host\": \"%H\", \"port\": \"%i\", \"version\": \"52c7248a14\" }' --ttl 60;sleep 45;done"
        ExecStop=/usr/bin/etcdctl rm /services/registry/%H:%i
        
        [X-Fleet]
        X-ConditionMachineOf=registry@*.service
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-08-13
          • 2014-10-08
          • 2019-04-12
          • 1970-01-01
          • 1970-01-01
          • 2012-12-11
          • 1970-01-01
          • 2020-12-09
          相关资源
          最近更新 更多