与CoreOS共享存储

时间:2014-06-30 13:06:27

标签: coreos

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

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

4 个答案:

答案 0 :(得分:4)

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

这是在/ mnt上安装AWS EFS的示例cloud-config:

#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

使用您的EFS共享的唯一字母数字ID替换xxxx。

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

虽然你想分享你的图像层,但是很奇怪。层本身是Docker的部署优势。如果你有足够的共同点,很少会在应用程序之间重新拉动。假设两个不同的应用程序共享Ubuntu:最新的基础,这是最大的层。当您在该主机上启动第二个应用程序时,您不必重新拉动Ubuntu。您无法使用任何旧的存储后端--CoreOS使用OverlayFS,这可能会让您感兴趣。

答案 1 :(得分:1)

我最近使用Deis解决了这个问题。除了其他有用的功能之外,它还可以立即设置Ceph存储群集和私有docker注册表。存储卷具有容错功能,可跨越群集中的所有计算机。

答案 2 :(得分:1)

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

另一个选项是ClusterHQ的Flocker。但它尚未在CoreOS中提供

答案 3 :(得分:0)

您可以拥有自己的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
相关问题