如何在 DigitalOcean 上建立 Deis 集群

介绍

Deis 是一个开源的私有平台作为服务(PaaS),它简化了在自己的服务器上部署和管理应用程序。通过利用 Docker 和 CoreOS 等技术,Deis 在您选择的托管提供商上提供类似于 Heroku 的工作流程和扩展功能。

在本教程中,我们将向您展示如何在DigitalOcean上设置自己的3台机器Deis平台集群。

<$>[注] 注: 本教程是基于 Deis 的 v1.9.0 版本。

前提条件

要完成本指南,您必须具备以下内容:

  • 创建具有至少4GB内存和40GB磁盘空间的至少3Dropplets的能力. 这些将是Deis平台将安装在 上的CoreOS机器 * SSH 密钥(s)将添加到 dropplets中,用于使用deisctl工具时的身份验证
  • SSH 密钥将对Deis的构建者 进行身份验证 * 一个域将指向集群机器 - 本教程将使用example.com作为其域名。

本教程主要基于 如何在DigitalOcean上设置CoreOS集群

我們還會在本地 Mac OS X 電腦上安裝 Deis Control Utility,『deisctl』和『Deis 客戶端』(https://github.com/deis/deis),『deis』,但如果您願意,您可以安裝在其他地方,例如 Ubuntu 14.04 Droplet。

创建新发现 URL

要创建我们将安装 Deis 平台的 CoreOS 集群,我们首先需要生成一个新的发现 URL,一个独特的地址,存储 peer CoreOS 地址和元数据。 最简单的方法是使用 https://discovery.etcd.io,这是一个免费的发现服务。 通过在 Web 浏览器中访问 https://discovery.etcd.io/new?size=3或运行下面的 curl 命令来创建一个新的发现 URL:

1curl -w "\n" "https://discovery.etcd.io/new?size=3"

任何一种方法都会返回一个独特而新鲜的发现URL,它看起来像以下某些东西(突出的部分将是一个独特的代币):

1https://discovery.etcd.io/f8d48be35b794da45e249bb149729a27

您将使用结果的发现 URL 创建新的 Deis 平台集群. 相同的发现 URL 必须在您想要添加到特定 Deis 平台集群的每个 CoreOS 服务器的云配置的etcd部分中指定。

现在我们有一个发现URL,让我们看看将其添加到云配置,我们将使用它来创建我们的Deis集群的每个机器。

二 用户数据

要创建一个将用于我们的Deis群集的CoreOS机器群集,我们将使用由Deis维护者提供的特殊云配置文件。

使用者數據

在文本编辑器中打开所提供的用户数据,然后找到定义 discovery URL 的行。

1--discovery #DISCOVERY_URL

删除评论,并将突出的#DISCOVERY_URL替换为您在上一步中生成的独特的发现 URL。

本教程基于 Deis 1.9.0,但示例用户数据中指定的版本可能更为当前。

1ExecStart=/usr/bin/sh -c 'curl -sSL --retry 5 --retry-delay 2 http://deis.io/deisctl/install.sh | sh -s 1.9.0'

请务必在下列步骤中安装deisctldeis时使用用户数据中的版本。

如果您愿意,您可以将这个用户数据文件保存在某个地方。

创建 CoreOS 滴滴

如果您不熟悉在创建Droplet时如何通过 _user data_提供云配置文件,请参阅我们CoreOS集群教程的 如何提供云配置部分。

创建至少三个Dropplets, 在同一个区域,具有以下规格:

  • 至少 4GB 内存和 40GB 磁盘空间
  • 私人网络已启用,如果可用. 如果私人网络在您所选择的地区无法使用,请编辑用户数据,并用$private_ipv4代替$public_ipv4
  • 启用用户数据,然后从上一步输入用户数据 *选择 CoreOS 稳定频道作为 Linux 发行版 *从列表中选择您的 SSH 密钥

如果您更愿意使用docl便利工具来提供您的Droplets,请遵循指示 这里

一旦你创建了至少三台这些机器,你应该有一个CoreOS集群,它已经准备好安装Deis平台。

DNS 配置

Deis 需要一个 Wildcard DNS 记录才能正常运作. 如果您正在使用的顶级域(TLD)是 example.com,您的应用程序将存在于 *.example.com 级别。

在 DigitalOcean 上配置此功能的一种方法是通过 DNS 控制面板设置圆形机器人 DNS。

  • 在您的最高级别域的 wildcard CNAME 记录,即名称为*的 CNAME 记录,以及@作为 Canonic 主机名称
  • 对于每台创建的 CoreOS 机器,一个指向 TLD 的 A 记录,即名为@的 A 记录,具有 Droplet 的公共 IP 地址

该区域文件现在将有以下条目:(您的IP地址将不同)

1[secondary_label DNS Records 1 of 2]
2*	CNAME	@
3@	IN A	104.131.93.162
4@	IN A	104.131.47.125
5@	IN A	104.131.113.138

在本示例中,Deis路由器/控制器可通过deis.example.com访问。

为了方便,您还可以为每个节点设置 DNS 记录:

1[secondary_label DNS Records 2 of 2]
2deis-1	IN A	104.131.93.162
3deis-2	IN A	104.131.47.125
4deis-3	IN A	104.131.113.138

如果您需要使用 DNS 控制面板的帮助,请参阅 此教程

使用 xip.io

如果您不希望设置自己的域名,您可以使用「xip.io」提供您的 wildcard DNS. 基本上,这将允许您使用您的 Droplet 的 IP 地址附加到 ".xip.io" 作为一个解决到 IP 地址的 wildcard 域名。

在您在集群上安装 Deis 平台后,请确定哪台 CoreOS 机器在运行[email protected]单元中使用deisctl list - 我们将在下一节中安装deisctl。然后确定该机器的公共 IP 地址。

1[secondary_label xip.io example]
2deis.104.131.47.125.xip.io

应用安全组设置

DigitalOcean Droplets 默认情况下没有启用防火墙,所以我们应该添加一些iptables规则,以确保我们的组件不能被外部人访问。

1curl -O https://raw.githubusercontent.com/deis/deis/master/contrib/util/custom-firewall.sh

在审查脚本内容后,在每个服务器上执行它,例如,使用我们之前创建的DNS条目,我们会运行以下命令:

1ssh [email protected] 'bash -s' < custom-firewall.sh
2ssh [email protected] 'bash -s' < custom-firewall.sh
3ssh [email protected] 'bash -s' < custom-firewall.sh

请确保在所有服务器上运行脚本。

安装这些工具

现在我们已经安装了CoreOS群集,我们将安装Deis控制实用程序和客户端,您应该在您想要控制您的Deis群集的计算机上安装这些工具,我们将展示在单独的Ubuntu 14.04 Droplet上安装它们,但您可以随时随地安装它们。

安装 Deis 控制工具

Deis 控制实用程序允许您与 Deis 机器互动,并在集群上安装 Deis 平台。

然后,通过下载并运行安装脚本来安装Deis Control Utility,使用以下命令(用用户数据中发现的数字替换版本):

1/bin/bash -c 'curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.9.0'

这将deisctl安装到当前目录中,并更新 Deis 单元文件。

让我们将其链接到/usr/local/bin,所以它将在我们的PATH中:

1sudo ln -fs $(pwd)/deisctl /usr/local/bin/deisctl

现在你可以使用deisctl命令。

安装客户端

Deis 客户端,也称为 Deis 命令行接口,允许您与 Deis 控制器单元进行交互。

安装 Deis 客户端,通过下载并运行安装脚本使用以下命令(用用户数据中发现的数字替换版本):

1/bin/bash -c 'curl -sSL http://deis.io/deis-cli/install.sh | sh -s 1.9.0'

这将安装deis,这是当前目录的客户端. 让我们将其链接到/usr/local/bin,所以它将在我们的PATH:

1sudo ln -fs $(pwd)/deis /usr/local/bin/deis

Deis 客户端已安装,您现在可以使用deis命令。

平台提供

从您安装 Deis 工具的计算机上,我们将提供 Deis 平台。

确保您的 SSH 代理正在运行(并选择与您的 CoreOS Droplets 添加的 SSH 密钥相匹配的私钥):

1eval `ssh-agent -s`
2ssh-add ~/.ssh/id_rsa_deis

接下来,我们必须导出DEISCTL_TUNNEL,以指向我们的Deis机器之一,以名称或公共IP地址。

1export DEISCTL_TUNNEL=deis-1.example.com

这就是deisctl试图与集群进行通信的地方,您可以通过运行deisctl列表来测试它是否正常工作,如果您看到一个单一的输出行,则控制实用程序正在与指定的CoreOS机器进行通信。

在提供平台之前,我们需要向Deis添加一个SSH密钥,这样它可以在deis run期间连接到远程主机:

1deisctl config platform set sshPrivateKey=~/.ssh/id_rsa_deis

我们还需要告诉控制器我们正在部署的应用程序的域名:

1deisctl config platform set domain=example.com

一旦之前的配置命令已运行,请使用此命令提供 Deis 平台:

1deisctl install platform

您将看到如下输出,这表明运行 Deis 所需的单元已被加载到 CoreOS 集群中:

 1[secondary_label Install Output:]
 2  
 3   Installing Deis...
 4  
 5Storage subsystem...
 6deis-store-metadata.service: loaded
 7...
 8Done.
 9
10Please run `deisctl start platform` to boot up Deis.

运行此命令来启动 Deis 平台:

1deisctl start platform

一旦你看到Deis开始了,你的Deis平台在一个集群上运行!

您可以通过运行以下命令来验证所有 Deis 单元都是 loadedactive:

1deisctl list

所有单位都必须活跃。

安装 Deis-store-admin (可选)

在继续前,您可能需要安装deis-store-admin组件,这在诊断存储问题时往往是有帮助的。

要安装该组件,请运行以下命令:

1deisctl install store-admin
2deisctl start store-admin

现在你已经完成了一个群集的配置,注册一个Deis管理员用户开始使用该平台!

注册2个用户

现在Deis平台正在运行,我们必须使用deis命令注册用户。deis命令通过可访问的deis.example.com的 _router_单元与Deis控制器进行通信:

1deis register http://deis.example.com

您将被要求提供一个 用户名密码电子邮件地址. 提供这些项目后,您将自动登录Deis平台。

接下来,将适当的 SSH 密钥添加到 deis. 输入以下命令:

1deis keys:add

您将被要求从可用的密钥中选择一个 SSH 密钥,选择您想要添加的密钥。

登录到 Deis

如果您需要稍后登录,请使用以下命令:

1deis login http://deis.example.com

你将被邀请使用你之前创建的Login。

部署样本应用程序(可选)

Deis支持三种不同的构建应用程序:

  1. 海洛库 Buildpacks
  2. 文件文件
  3. 文件图像

我们将展示如何使用 Heroku Buildpack 工作流来部署应用程序,使用 Deis 提供的 example-ruby-sinatra

更改到您要下载示例应用程序的目录,在您处于所需位置后,运行此命令来克隆 git 存储库:

1git clone https://github.com/deis/example-ruby-sinatra.git
2cd example-ruby-sinatra

deis create命令可用于在Deis控制器上创建应用程序。

1deis create

这会创建一个应用程序,并用Deis的自动命名算法命名它:

1[secondary_label deis create output:]
2Creating application... done, created dapper-yachting
3Git remote deis added

在这种情况下,申请的名称是dapper-yachting

现在,要部署应用程序,请使用git push deis master

1git push deis master

运行部署命令后,您将看到许多输出行.一旦完成,输出将表示应用已经部署,并告诉您其自动生成的名称,以及它可以访问的位置:

 1[secondary_label git push deis master output:]
 2...
 3-----> Launching...
 4       done, dapper-yachting:v2 deployed to Deis
 5
 6       http://dapper-yachting.example.com
 7
 8       To learn more, use `deis help` or visit http://deis.io
 9
10To ssh://[email protected]:2222/dapper-yachting.git
11 * [new branch]      master -> master

在本示例中,URL为http://dapper-yachting.dev.example.com,即与集群名称结合的应用程序名称。

您可以通过在 Web 浏览器中访问应用程序 URL 来测试它是否有效,或使用以下 curl 命令(在自己的 URL 中替代):

1curl http://dapper-yachting.dev.example.com

您应该看到类似于以下的输出:

1[secondary_label App output:]
2Powered by Deis! Running on container ID a0d35733aad8

样本应用程序查看运行位置的容器ID,并输出它。

结论

现在你有一个工作 Deis 设置,尝试使用其他两个工作流部署 Deis 应用程序. 该 dockerfile 工作流与 Heroku Buildpack 流相似,因为它还使用git push来部署,而 docker image 工作流则使用deis pull来部署。

Published At
Categories with 技术
comments powered by Disqus