如何在DigitalOcean上设置Deis集群

来自菜鸟教程
跳转至:导航、​搜索

介绍

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

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

注意:本教程基于Deis v1.9.0版本。


先决条件

要完成本指南,您必须具备以下条件:

  • 能够创建至少 3 个具有至少 4GB 内存40GB 磁盘空间 的液滴。 这些将是安装 Deis 平台的 CoreOS 机器
  • 添加到 Droplet 的 SSH 密钥,用于在使用 deisctl 工具时进行身份验证
  • SSH 密钥对 Deis 的构建器进行身份验证
  • 指向集群机器的域——本教程将使用 example.com 作为其域。 另一种方法是使用 xip

本教程主要基于 How To Set Up a CoreOS Cluster on DigitalOcean。 如果您在执行本教程中与创建 CoreOS 集群相关的步骤时遇到问题,请查看它。

我们还将在本地 Mac OS X 计算机上安装 Deis Control UtilitydeisctlDeis 客户端deis,但您可以如果您愿意,可以将它们安装在其他地方,例如 Ubuntu 14.04 Droplet。 与用于创建 CoreOS Droplets 的 SSH 公钥对应的 SSH 私钥必须存在于安装了 deisctl 的计算机上。

生成新的发现 URL

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

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

任何一种方法都将返回一个独特且新鲜的发现 URL,如下所示(突出显示的部分将是一个唯一令牌):

https://discovery.etcd.io/f8d48be35b794da45e249bb149729a27

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

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

Deis 用户数据

为了创建一个将在我们的 Deis 集群中使用的 CoreOS 机器集群,我们将使用由 Deis 的维护者提供的一个特殊的 cloud-config 文件。 此文件可在 Deis GitHub 存储库中找到:

Deis 用户数据

在文本编辑器中打开提供的用户数据,找到定义 discovery 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 Droplet

现在我们有了将要使用的 用户数据 ,现在让我们创建 CoreOS 机器。 如果您不熟悉如何在创建Droplet时通过用户数据提供cloud-config文件,请参考我们CoreOS集群的如何提供Cloud-Config部分教程。

在同一区域中创建至少三个Droplet,,规格如下:

  • 至少4GB内存40GB磁盘空间
  • 私有网络 已启用(如果可用)。 如果您选择的区域没有专用网络,请编辑用户数据并将每次出现的 $private_ipv4 替换为 $public_ipv4
  • 启用用户数据并输入上一步的用户数据
  • 选择 CoreOS Stable channel 作为 Linux 发行版
  • 从列表中选择您的 SSH 密钥

如果您希望使用 docl 便利工具来配置您的 Droplets,请按照 此处 的说明进行操作。

一旦你至少创建了三台这样的机器,你应该有一个可以安装 Deis 平台的 CoreOS 集群。 让我们继续设置 DNS。

配置 DNS

Deis 需要通配符 DNS 记录才能正常运行。 如果您使用的顶级域 (TLD) 是 example.com,则您的应用程序将存在于 *.example.com 级别。 例如,可以通过 app.example.com 访问名为“app”的应用程序。

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

  • 顶级域中的通配符 CNAME 记录,即 以 * 作为名称,以 @ 作为规范主机名的 CNAME 记录
  • 对于创建的每台 CoreOS 机器,指向 TLD 的 A 记录,即 一个名为 @ 的 A 记录,带有 Droplet 的公共 IP 地址

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

DNS Records 1 of 2*   CNAME   @
@   IN A    104.131.93.162
@   IN A    104.131.47.125
@   IN A    104.131.113.138

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

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

DNS Records 2 of 2deis-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 机器正在运行带有 deisctl listdeis-router@1.service 单元——我们将在下一节中安装 deisctl。 然后确定该机器的公共 IP 地址。 如果是104.131.47.125,可以使用如下域到达Deis路由器:

xip.io exampledeis.104.131.47.125.xip.io

应用安全组设置

DigitalOcean Droplets默认没有开启防火墙,所以我们应该添加一些iptables规则来保证我们的组件不被外人访问。 Deis 存储库提供了一个脚本,可以在 here 找到它可以做到这一点。

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 控制实用程序和客户端。 您应该在要控制 Deis 集群的计算机上安装这些工具。 我们将演示在单独的 Ubuntu 14.04 Droplet 上安装它们,但您可以将它们安装在您希望的任何位置。

安装 Deis 控制实用程序

Deis Control Utility 允许您与 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 Droplets 的 SSH 密钥相对应的私钥):

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

接下来,我们必须导出 DEISCTL_TUNNEL 以通过名称或公共 IP 地址指向我们的一台 Deis 机器。 如果您设置“便利”DNS 记录,您可以将其中之一用于隧道。 例如:

export DEISCTL_TUNNEL=deis-1.example.com

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

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

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

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

deisctl config platform set domain=example.com

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

deisctl install platform

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

Install Output:● ▴ ■
■ ● ▴ 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 管理员用户以开始使用该平台!

注册 Deis 用户

现在 Deis 平台正在运行,我们必须使用 deis 命令注册一个用户。 deis 命令通过 router 单元与 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 构建包
  2. Dockerfiles
  3. 泊坞窗图像

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

切换到要将示例应用程序下载到的目录。 到达所需位置后,运行以下命令克隆 git 存储库:

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

deis create 命令可用于在 Deis 控制器上创建应用程序。 现在运行它:

deis create

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

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

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

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

git push deis master

运行命令部署后,您将看到多行输出。 完成后,输出将显示应用程序已部署,它会告诉您其自动生成的名称以及可以访问的位置:

git push deis master output:...
-----> 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

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

App output:Powered by Deis! Running on container ID a0d35733aad8

示例应用程序查找其运行位置的容器 ID,并将其输出。 恭喜! 您的 Deis 平台有效!

结论

现在您已经有了一个可以工作的 Deis 设置,请尝试使用其他两个工作流来部署 Deis 应用程序。 dockerfile 工作流程类似于 Heroku Buildpack 流程,因为它也使用 git push 来部署,而 docker image 工作流程使用 deis pull 来部署部署。 此外,Deis 提供的功能比这里介绍的要多得多——查看 他们的文档 了解更多信息!