如何在DigitalOcean上设置CoreOS集群

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

状态: 过期

这篇文章不再是最新的。 如果您有兴趣为本文编写更新,请参阅DigitalOcean 想要发布您的技术教程

原因: 2016年12月22日,CoreOS宣布不再维护fleet。 CoreOS 建议使用 Kubernetes 来满足所有集群需求。

请参阅: 有关在没有队列的情况下在 CoreOS 上使用 Kubernetes 的指导,请参阅 CoreOS 上的 Kubernetes 文档


介绍

如果您计划在您的基础架构中使用 CoreOS,那么您首先要设置的是 CoreOS 集群。 为了让 CoreOS 机器形成一个集群,它们的 etcd2 实例必须被连接。 在本教程中,我们将逐步说明如何在 DigitalOcean 上快速创建 3 节点 CoreOS 集群。

先决条件

如果您不熟悉构建 CoreOS 的组件(docker、etcd2 和fleet),强烈建议您阅读CoreOS 系统组件简介。 您需要特别注意涵盖 etcd2 的部分,因为该组件对于集群发现过程至关重要。

SSH 密钥

您创建的每台 CoreOS 服务器都需要在其创建过程中安装至少一个 SSH 公钥。 密钥将安装到 core 用户的授权密钥文件中,您需要相应的私钥才能登录您的 CoreOS 服务器。

如果您还没有任何与您的 DigitalOcean 帐户关联的 SSH 密钥,请立即按照本教程的步骤 1-3 进行操作:如何将 SSH 密钥与 DigitalOcean Droplets 一起使用。 然后,您需要通过运行以下命令将您的私钥添加到客户端计算机上的 SSH 代理:

ssh-add

有关此步骤的更多信息,请参阅这篇文章

DigitalOcean 个人访问令牌

如果您计划使用 DigitalOcean API 创建您的 CoreOS 机器,请参阅 本教程 以获取有关如何生成和使用具有写入权限的个人访问令牌的信息。

现在您已经具备了先决条件,让我们开始构建我们的 CoreOS 集群!

生成新的发现 URL

建立新 CoreOS 集群的第一步是生成一个新的发现 URL,这是一个存储对等 CoreOS 地址和元数据的唯一地址。 最简单的方法是使用免费的发现服务 https://discovery.etcd.io。 可以通过在 Web 浏览器中访问 https://discovery.etcd.io/new 或运行以下 curl 命令来生成新的发现 URL:

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

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

https://discovery.etcd.io/5c1574906b3502aa9d8dc43c1b185775

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

现在我们有了一个发现 URL,让我们看看如何创建使用它的 cloud-config 文件。

编写云配置文件

CoreOS 使用一个名为 cloud-config 的文件,它允许您以声明方式自定义网络配置、systemd 单元和其他操作系统级别的项目。 该文件以 YAML 格式编写,使用缩进表示数据层次结构。 cloud-config 文件在机器启动时进行处理,并提供了一种使用 etcd2 设置配置机器的方法,允许它们发现应该加入的集群。

我们将介绍如何编写一个最小的 cloud-config 来启动并运行一个正常工作的 CoreOS 集群。 有关可以使用 cloud-config 配置的项目的完整列表,请查看 官方文档 。 它们还提供了一个有用的工具,可以检查您的 cloud-config 文件的语法,Cloud-Config Validator

最小的云配置

如前所述,集群中每台 CoreOS 机器的对等地址与发现 URL 一起存储。 因此,集群中的每台机器都必须使用相同的发现 URL,并传入自己的 IP 地址,以便访问其 etcd2 服务。 这些在 etcd2 部分下的 cloud-config 中指定,并显示在下面的代码块中。

您还需要指定 units 部分,这将启动正常工作的 CoreOS 集群所需的 etcd2fleet 服务。

这是一个基本的 cloud-config 文件,可用于您的 CoreOS 机器以创建新集群(将 discovery 的值替换为您之前生成的发现 URL):

#cloud-config

coreos:
  etcd2:
    # generate a new token for each unique cluster from https://discovery.etcd.io/new:
    discovery: https://discovery.etcd.io/<$><discovery_token><$>
    # multi-region deployments, multi-cloud deployments, and Droplets without
    # private networking need to use $public_ipv4:
    advertise-client-urls: http://$private_ipv4:2379,http://$private_ipv4:4001
    initial-advertise-peer-urls: http://$private_ipv4:2380
    # listen on the official ports 2379, 2380 and one legacy port 4001:
    listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001
    listen-peer-urls: http://$private_ipv4:2380
  fleet:
    public-ip: $private_ipv4   # used for fleetctl ssh command
  units:
    - name: etcd2.service
      command: start
    - name: fleet.service
      command: start

注: #cloud-config行是必填。 DigitalOcean 上的 cloud-config 完全支持 $private_ipv4$public_ipv4 替换变量——这些变量将替换为新 VPS 的实际相应 IP 地址。 此外,如果您不打算使用 fleetctl ssh 命令,则不需要 fleet 部分。


这个 cloud-config 脚本可用于设置可用于测试目的的基本 CoreOS; 不幸的是,它不是很安全。 对于更严格的设置,您应该按照以下教程设置安全的 CoreOS 集群:如何使用 TLS/SSL 和防火墙规则保护您的 CoreOS 集群

创建 CoreOS 集群

现在您知道了新 CoreOS 集群中每台机器的 cloud-config 文件将包含什么,让我们创建您的 CoreOS 集群。 因为可以通过 DigitalOcean 控制面板或 API 创建 Droplet,所以我们将向您展示如何使用这两种方法创建您的 CoreOS 集群。

DigitalOcean 控制面板

首先,访问DigitalOcean控制面板然后点击Create Droplet按钮。

接下来,选择 CoreOS 作为您的 Linux 发行版,然后选择您要使用的通道(Stable、Beta 或 Alpha)。

然后选择所需的液滴大小。 如果您正在进行基本测试,则较小的尺寸就可以了。

接下来,选择您喜欢的数据中心区域。

选择附加选项标题下,选择私有网络用户数据。 将您的 cloud-config 脚本复制并粘贴到用户数据文本字段中。 它应该看起来像这样:

接下来,选择至少一个要用于登录 Droplet 的 SSH 密钥。

Finalize and create 部分下,创建 至少三个 Droplet 并指定它们的主机名。 在我们的示例中,我们将它们称为 coreos-01coreos-02coreos-03

最后,单击 Create 按钮以创建将形成您的 CoreOS 集群的 Droplet。

要了解有关使用 DigitalOcean 控制面板的 Droplet 创建过程的更多信息,请参阅 本指南

数字海洋 API

如果您使用 DigitalOcean API 创建您的 CoreOS Droplets,您可以通过在您的 Droplet 创建 POST 请求中的 user_data 参数指定您的 cloud-config - 只需将整个脚本粘贴到那里。

假设我们要在 NYC3 中创建三个 1 GB 的 Droplet,名为 coreos-01coreos-02coreos-03数据中心,使用 CoreOS 稳定通道映像和前面显示的 cloud-config 文件。 下面是一个 curl 命令示例,您可以运行它来使用 DigitalOcean API 创建它:

curl -X POST "https://api.digitalocean.com/v2/droplets" \
      -d'{"names":["coreos-01","coreos-02","coreos-03"],"region":"nyc3","size":"1GB","private_networking":true,"image":"coreos-stable","user_data":
"#cloud-config

coreos:
  etcd2:
    # generate a new token for each unique cluster from https://discovery.etcd.io/new:
    discovery: https://discovery.etcd.io/<$><discovery_token><$>
    # multi-region deployments, multi-cloud deployments, and Droplets without
    # private networking need to use $public_ipv4:
    advertise-client-urls: http://$private_ipv4:2379,http://$private_ipv4:4001
    initial-advertise-peer-urls: http://$private_ipv4:2380
    # listen on the official ports 2379, 2380 and one legacy port 4001:
    listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001
    listen-peer-urls: http://$private_ipv4:2380
  fleet:
    public-ip: $private_ipv4   # used for fleetctl ssh command
  units:
    - name: etcd2.service
      command: start
    - name: fleet.service
      command: start",
      "ssh_keys":[ <SSH Key ID(s)> ]}' \
      -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type: application/json"

注意:这就像一个普通的多Droplet创建请求,增加了通过user_data参数传递的示例cloud-config


您必须用您的 SSH 密钥 ID 或指纹替换 <SSH Key ID(s)>,并确保将 $TOKEN 设置为您的读/写 DigitalOcean 个人访问令牌之一。

使用适当的替换运行此命令后,将创建您的 3 节点 CoreOS 集群。

更多API使用方法请参考【X58X】本教程【X75X】。

验证集群

要验证我们的 3 机集群是否已正确形成,我们必须通过 SSH 连接到集群成员之一。

通过 SSH 以 core 用户身份登录 coreos-01 机器,并使用 -A 选项转发您的 SSH 代理。 请记住替换公共 IP 地址:

ssh -A core@coreos-01_public_IP

在命令提示符下,输入此 fleetctl 命令以显示集群的所有成员:

fleetctl list-machines

您应该会看到集群中所有在线机器的列表,可以通过它们各自的 peer-addr IP 地址来识别。 以下是输出示例:

MACHINE      IP      METADATA
59b2fffd... 10.131.29.141   -
853b0df3... 10.131.63.121   -
cd64a2e3... 10.131.63.120   -

如果您看到您创建的所有机器,它们都通过 etcd2 相互了解,并且您的集群已经正确形成!

警告: 确保设置 IPTables 以限制 CoreOS 集群内机器对端口 4001 的访问,在集群设置完成后。 这将防止外部未经授权的用户控制您的 CoreOS 机器。 对于生产用途,您应该强烈考虑按照 本指南中的步骤使用 TLS/SSL 证书和防火墙规则 保护 CoreOS 集群。


添加新机器

如果您想将新机器添加到现有的 CoreOS 集群,只需使用相同的 cloud-config(和发现 URL)创建一个新的 Droplet。 您的新 CoreOS 机器将自动加入现有集群。

如果您忘记了您使用的发现 URL,您可以在集群的其中一个成员上查找它。 在您现有的一台机器上使用以下 grep 命令:

grep DISCOVERY /run/systemd/system/etcd2.service.d/20-cloudinit.conf

您将看到一行包含原始发现 URL,如下所示:

Environment="ETCD_DISCOVERY=https://discovery.etcd.io/575302f03f4fb2db82e81ea2abca55e9"

结论

您的基本 CoreOS 集群已设置完毕,现在您可以继续使用它进行测试了! 如果您希望建立一个安全的 CoreOS 集群,请遵循本教程:如何使用 TLS/SSL 和防火墙规则保护您的 CoreOS 集群

本系列的其余教程将向您展示有关 CoreOS 的更多信息,以及如何在您的 CoreOS 集群中使用 docker 容器和服务发现。