DigitalOcean
本教程中,我们将向您说明如何在DigitalOcean上创建一个3节点集群。
请在阅读本文时,获取源码并参考contrib/digitalocean中的脚本。
必要条件
要完成本指南,你必须拥有:
- 一个指向集群的域名
- 开通至少3台2GB以上的DigitalOcean Droplet的能力
为了开通集群,我们需要安装一些管理工具。docl是一个协助开通DigitalOcean Droplet的便利工具。我们还需要Deis控制工具,用于协助我们安装、配置和管理Deis平台。
检查系统需求
请在选择运行Deis的droplet规格时参考“系统需求”中的资源要求。
生成SSH密钥
deisctl工具使用SSH通道与远程主机进行通讯。如果你没有SSH密钥,以下命令将生成一个名为deis的密钥对:
$ ssh-keygen -q -t rsa -f ~/.ssh/deis -N '' -C deis
生成新的发现URL
发现URL将节点的地址和元数据保存在一个唯一的标识下,以此协助etcd实例连接在一起。在仓库根目录下运行以下命令来生成一个带有新的发现URL的contrib/coreos/user-data文件:
$ make discovery-url
user-data中包含了必要的脚本,因此不要在未运行make discovery-url前开通Deis集群。
创建CoreOS Droplet
现在我们有了user-data文件,接下来可以开通一些Droplet。我们提供了一个用于完成所有重活的脚本来简化该步骤。不过,如果你想手工配置,可先将SSH公钥上传到要登录的主机上。然后,按以下要求创建至少3个Droplet:
- 所有Droplet部署在同一个区域中
- 区域必须启用私有网络
- 区域必须启用用户数据,保存user-data于此
- 选择CoreOS Alpha通道
- 从列表中选择你的SSH公钥
如果你的区域中私有网络不可用,则将user-data文件中的$private_ipv4替换成$public_ipv4。
如果你想使用脚本:
$ gem install docl
$ docl authorize
$ docl upload_key deis ~/.ssh/deis.pub
$ # 获取你的SSH密钥ID
$ docl keys
deis (id: 12345)
$ # 获取区域名称
$ docl regions --metadata --private-networking
Amsterdam 2 (ams2)
Amsterdam 3 (ams3)
London 1 (lon1)
New York 3 (nyc3)
Singapore 1 (sgp1)
$ ./contrib/digitalocean/provision-do-cluster nyc3 12345 4GB
这将开通3个CoreOS节点以供使用。
配置DNS
- 注意
- 如果你使用第三方DNS注册商,请在配置时参考他们的文档,兼顾必要的DNS记录。
- 注意
- 如果你没有可用于测试的域名,可以参考“使用xip.io”为Deis设置一个通配DNS。
Deis需要一条通配DNS记录以便正常工作。如果你使用的顶级域名(TLD)是example.com,你的应用将存在于*.example.com层级。比如,一个名为app的应用将可通过app.example.com进行访问。
在DigitalOcean上配置的方法之一是通过DNS控制面板设置一个轮询DNS。要这么做,请将下列记录加入你的域名:
- 一条顶层域名的通配CNAME记录,例如,一条以*为名的CNAME记录,同时@作为别名
- 针对每台创建好的CoreOS主机,一条A记录指向TLD,例如,一条名为@的A记录,指向droplet的公有IP地址
现在zone文件将拥有如下条目:(你的IP地址将有所不同)
* CNAME @
@ IN A 104.131.93.162
@ IN A 104.131.47.125
@ IN A 104.131.113.138
为方便起见,你也可以为每个节点设置DNS记录:
deis-1 IN A 104.131.93.162
deis-2 IN A 104.131.47.125
deis-3 IN A 104.131.113.138
如果你需要使用DNS控制面板方面的帮助,请查阅DigitalOcean社区网站的这篇教程。
应用安全组设置
由于DigitalOcean没有安全组的功能,我们需要添加一些自定义的iptables规则以便阻止外部世界访问我们的组件。要这么做,contrib/下面的一个脚本将帮助我们完成。运行如下:
$ for i in 1 2 3; do ssh core@deis-$i.example.com 'bash -s' < contrib/util/custom-firewall.sh; done
我们的组件现在对外部资源锁死了。
安装Deis平台
现在你已经完成了集群开通,请参考“安装Deis平台”开始平台安装。