DigitalOcean

本教程中,我们将向您说明如何在DigitalOcean上创建一个3节点集群。

请在阅读本文时,获取源码并参考contrib/digitalocean中的脚本。

必要条件

要完成本指南,你必须拥有:

  • 一个指向集群的域名
  • 开通至少3台2GB以上的DigitalOcean Droplet的能力

为了开通集群,我们需要安装一些管理工具。docl是一个协助开通DigitalOcean Droplet的便利工具。我们还需要Deis控制工具,用于协助我们安装、配置和管理Deis平台。

检查系统需求

请在选择运行Deis的droplet规格时参考“系统需求”中的资源要求。

生成SSH密钥

deisctl工具使用SSH通道与远程主机进行通讯。如果你没有SSH密钥,以下命令将生成一个名为deis的密钥对:

  1. $ ssh-keygen -q -t rsa -f ~/.ssh/deis -N '' -C deis

生成新的发现URL

发现URL将节点的地址和元数据保存在一个唯一的标识下,以此协助etcd实例连接在一起。在仓库根目录下运行以下命令来生成一个带有新的发现URL的contrib/coreos/user-data文件:

  1. $ 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。

如果你想使用脚本:

  1. $ gem install docl
  2. $ docl authorize
  3. $ docl upload_key deis ~/.ssh/deis.pub
  4. $ # 获取你的SSH密钥ID
  5. $ docl keys
  6. deis (id: 12345)
  7. $ # 获取区域名称
  8. $ docl regions --metadata --private-networking
  9. Amsterdam 2 (ams2)
  10. Amsterdam 3 (ams3)
  11. London 1 (lon1)
  12. New York 3 (nyc3)
  13. Singapore 1 (sgp1)
  14. $ ./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地址将有所不同)

  1. * CNAME @
  2. @ IN A 104.131.93.162
  3. @ IN A 104.131.47.125
  4. @ IN A 104.131.113.138

为方便起见,你也可以为每个节点设置DNS记录:

  1. deis-1 IN A 104.131.93.162
  2. deis-2 IN A 104.131.47.125
  3. deis-3 IN A 104.131.113.138

如果你需要使用DNS控制面板方面的帮助,请查阅DigitalOcean社区网站的这篇教程

应用安全组设置

由于DigitalOcean没有安全组的功能,我们需要添加一些自定义的iptables规则以便阻止外部世界访问我们的组件。要这么做,contrib/下面的一个脚本将帮助我们完成。运行如下:

  1. $ for i in 1 2 3; do ssh core@deis-$i.example.com 'bash -s' < contrib/util/custom-firewall.sh; done

我们的组件现在对外部资源锁死了。

安装Deis平台

现在你已经完成了集群开通,请参考“安装Deis平台”开始平台安装。