我有4台CoreOS机器的测试集群。我希望在它们之间共享存储,例如将我的docker图像放在那里,而不必将它们拉到每台机器上。
然而,似乎CoreOS不支持NFS。在CoreOS上创建共享存储有哪些选择?
答案 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)
答案 2 :(得分:1)
答案 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