如何设置上DigitalOcean一个DEIS集群

DEIS是一个开源的私有平台即服务(PaaS),它简化了部署和自己的服务器上管理你的应用程序。通过利用技术,例如泊坞和CoreOS,DEIS提供了一个工作流程和缩放功能,是类似于Heroku的的,在...

介绍

Deis是一种开源私有平台即服务(PaaS),可简化在自己的服务器上部署和管理应用程序。 通过利用诸如Docker和CoreOS等技术,Deis在您选择的托管提供商上提供类似于Heroku的工作流和缩放功能。 Deis支持可以在Docker容器中运行的应用程序,并且可以在支持CoreOS的任何平台上运行。

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

注:本教程基于DEIS的v1.9.0版本。

先决条件

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

  • 能够创建至少3个Droplet至少有4GB的内存40GB的磁盘空间 这些将是将安装Deis平台的CoreOS计算机
  • SSH密钥(多个)添加到Droplet,使用时用于验证deisctl工具
  • SSH用于对Deis的构建器进行身份验证的密钥
  • 域指向与集群机-本教程将使用example.com作为其领域。 一个替代方案是使用XIP

本教程主要是基于如何建立一个CoreOS集群上DigitalOcean 如果您无法顺利完成本教程中有关创建CoreOS群集的步骤,请查看它。

我们也将安装DEIS控制工具deisctlDEIS客户端deis ,本地的Mac OS X计算机上,但你可能在其他地方安装它们,比如一个Ubuntu 14.04Droplet,如果你想。 与用于创建CoreOSDroplet必须存在,其中在计算机上的SSH密钥对应的SSH私钥deisctl安装。

生成新的发现URL

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

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

任一方法将返回一个独特的和新的发现URL,看起来像下面(突出部分将是一个独特的令牌):

https://discovery.etcd.io/f8d48be35b794da45e249bb149729a27

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

现在,我们有一个发现URL,让我们来看看它添加到cloud-config ,我们将用它来创建我们的集群DEIS每台机器。

Deis用户数据

要创建将在我们DEIS群集中使用CoreOS计算机集群中,我们将使用一个特殊cloud-config由DEIS的维护者提供的文件。 此文件位于Deis GitHub存储库:

Deis用户数据

在文本编辑器中打开提供的用户数据,并找到发现URL定义行。 它将如下所示:

        --discovery #DISCOVERY_URL

取消注释,并替换突出#DISCOVERY_URL与您在上一步中生成的唯一URL的发现。

本教程基于Deis 1.9.0,但是示例用户数据中指定的版本可能更新。 查找以下行(突出显示的数字表示版本):

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

记下版本号。 是确保在安装时,在用户数据使用的版本deisctldeis在下面的步骤。

如果您愿意,可以将此用户数据文件保存在某个位置。

创建CoreOS Droplets

现在,我们有,我们将使用用户数据 ,我们现在创建CoreOS机器。 如果你不熟悉如何提供cloud-configDroplet创建过程中,通过用户数据文件,请参阅如何提供云配置我们CoreOS集群教程部分。

创建至少三Droplet, 在同一地区 ,具有以下规格:

  • 至少4GB内存40GB硬盘空间
  • 专用网络启用后,如果有的话。 如果专用网络不可用在你选择的区域,编辑的用户数据和更换的每个实例$private_ipv4$public_ipv4
  • 使用户数据和来自前面步骤中输入用户数据
  • 选择CoreOS稳定通道作为Linux发行版
  • 从列表中选择您的SSH密钥

如果您希望使用docl方便的工具来配置你的Droplet,按照指示在这里

一旦创建了至少三台这些机器,您应该有一个CoreOS集群准备好进行Deis平台安装。 让我们继续设置DNS。

配置DNS

Deis需要通配符DNS记录才能正常工作。 如果您使用的是顶级域名(TLD)是example.com ,您的应用程序将在存在*.example.com水平。 例如,所谓的“应用程序”的应用程序将通过访问app.example.com

上DigitalOcean配置此的一种方式是通过设置循环DNS DNS控制面板 为此,请将以下记录添加到您的网域:

  • 在您的顶级域名通配符CNAME记录,即CNAME记录*作为名称,并@作为规范主机名
  • 对于创建的每个CoreOS机,A记录指向TLD,即一个名为A记录@ ,随着Droplet的公网IP地址

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

*   CNAME   @
@   IN A    104.131.93.162
@   IN A    104.131.47.125
@   IN A    104.131.113.138

在这个例子中,DEIS路由器/控制器将通过到达deis.example.com

为方便起见,您还可以为每个节点设置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的控制面板帮助,请查看本教程

使用xip.io

如果你不想建立自己的域名,可以使用xip.io提供您的通配符DNS。 基本上,这将允许您使用由“.xip.io”附加的Droplet的IP地址作为解析为IP地址的通配符域。

您在集群上安装DEIS平台后,确定哪些CoreOS机器运行deis-router@1.service单元deisctl list -我们将安装deisctl在下一节。 然后确定该机器的公共IP地址。 如果是104.131.47.125 ,您可以使用以下域达到DEIS路由器:

deis.104.131.47.125.xip.io

应用安全组设置

DigitalOceanDroplet没有默认启用防火墙,所以我们应该增加一些iptables规则,以确保我们的组件不为外人访问。 该DEIS库提供了一个脚本,可以发现, 在这里 ,可以做到这一点。

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

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

ssh core@deis-1.example.com 'bash -s' < custom-firewall.sh
ssh core@deis-2.example.com 'bash -s' < custom-firewall.sh
ssh core@deis-3.example.com 'bash -s' < custom-firewall.sh

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

安装Deis工具

现在我们已经设置了CoreOS集群,我们将安装Deis Control Utility和Client。 您应该在要控制Deis群集的计算机上安装这些工具。 我们将演示将它们安装在单独的Ubuntu 14.04 Droplet上,但是您可以随意安装它们。

安装Deis Control实用程序

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

更改到你想安装的目录deisctl二进制文件。 然后,通过使用以下命令下载并运行安装脚本来安装Deis Control Utility(将版本替换为用户数据中找到的编号):

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

这将安装deisctl到当前目录,并刷新DEIS单元文件。

让我们将其链接到/usr/local/bin ,所以这将是我们的PATH

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

现在你可以使用deisctl命令。

安装Deis客户端

Deis客户端(也称为Deis命令行界面)允许您与Deis控制器单元交互。

更改到你想安装的目录deis二进制文件。 通过使用以下命令下载并运行安装脚本来安装Deis客户端(将版本替换为用户数据中找到的编号):

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

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

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

安装了Deis客户端。 现在你可以使用deis命令。

提供Deis平台

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

确保您的SSH代理正在运行(并选择与添加到您的CoreOS Droplet的SSH密钥对应的私钥):

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

接下来,我们必须导出DEISCTL_TUNNEL指向我们DEIS一体机,通过名称或公网IP地址。 如果您设置了“便利”DNS记录,您可以使用其中的一个作为隧道。 例如:

export DEISCTL_TUNNEL=deis-1.example.com

这是deisctl将尝试与群集通信。 可以测试,它是通过运行正常工作deisctl list 如果看到单行输出,则控制实用程序正在与指定的CoreOS计算机通信。

置备平台之前,我们需要添加一个SSH密钥到DEIS,所以它可以在连接到远程主机deis run

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

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

deisctl config platform set domain=example.com

运行先前的配置命令后,使用此命令配置Deis平台:

deisctl install platform

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

● ▴ ■
■ ● ▴ Installing Deis...
▴ ■ ●
Storage subsystem...
deis-store-metadata.service: loaded
...
Done.

Please run `deisctl start platform` to boot up Deis.

运行此命令启动Deis平台:

deisctl start platform

一旦你看到“Deis started。”,你的Deis平台就在集群上运行了!

你可以验证所有DEIS单元由运行以下命令加载积极的:

deisctl list

所有单位应该是活动的。

安装Deis-store-admin(可选)

您可能需要安装deis-store-admin在移动之前的组成部分。 在诊断存储问题时通常很有帮助。

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

deisctl install store-admin
deisctl start store-admin

现在您已经完成了集群的配置,请注册一个Deis admin用户以开始使用该平台!

注册Deis用户

现在,DEIS平台运行时,我们必须注册的用户deis命令。 deis命令经由路由器装置,它是在可访问的DEIS控制器通信deis.example.com在我们的例子:

deis register http://deis.example.com

系统将提示您输入用户名密码电子邮件地址 提供这些项目后,您将自动登录到Deis平台。

接下来,正确的SSH密钥添加到deis 输入以下命令:

deis keys:add

系统将提示您从可用密钥中选择SSH密钥。 选择要添加的密钥。

登录Deis

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

deis login http://deis.example.com

系统将提示您输入先前创建的登录信息。

部署示例应用程序(可选)

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

  1. Heroku Buildpacks
  2. Dockerfiles
  3. Docker镜像

我们将演示如何使用Heroku的Buildpack工作流程,通过部署一个应用例子,Ruby-辛纳屈 ,这是由DEIS提供。

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

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

所述deis create命令可以用于创建DEIS控制器上的应用程序。 立即运行:

deis create

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

Creating application... done, created dapper-yachting
Git remote deis added

在这种情况下,应用程序的名称是dapper-yachting

现在,部署应用程序,使用git push deis master 现在做:

git push deis master

运行命令部署后,您将看到许多行输出。 一旦完成,输出将说明应用程序已部署,它会告诉您它的自动生成的名称,以及它可以访问的地方:

...
-----> Launching...
       done, dapper-yachting:v2 deployed to Deis

       http://dapper-yachting.example.com

       To learn more, use `deis help` or visit http://deis.io

To ssh://git@deis.example.com:2222/dapper-yachting.git
 * [new branch]      master -> master

在本实施例中,URL是http://dapper-yachting.dev.example.com ,这是应用程序名与群集名称相结合。

您可以通过在Web浏览器中转到应用程序URL或使用以下curl命令(在您自己的URL中替换)来测试它的工作原理:

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

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

Powered by Deis! Running on container ID a0d35733aad8

示例应用程序查找运行的容器ID,并输出它。 恭喜! 您的Deis平台工作!

结论

现在您有一个有效的Deis设置,尝试使用其他两个工作流部署Deis应用程序。 dockerfile工作流程是相似的Heroku Buildpack流,因为它也使用git push来部署,而搬运工图像的工作流程使用deis pull来部署。 此外,DEIS提供了比在这里覆盖了更多的功能-检查他们的文档以了解更多!