如何在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 集群所需的 etcd2
和 fleet
服务。
这是一个基本的 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-01、coreos-02 和 coreos-03:
最后,单击 Create 按钮以创建将形成您的 CoreOS 集群的 Droplet。
要了解有关使用 DigitalOcean 控制面板的 Droplet 创建过程的更多信息,请参阅 本指南 。
数字海洋 API
如果您使用 DigitalOcean API 创建您的 CoreOS Droplets,您可以通过在您的 Droplet 创建 POST 请求中的 user_data
参数指定您的 cloud-config
- 只需将整个脚本粘贴到那里。
假设我们要在 NYC3 中创建三个 1 GB 的 Droplet,名为 coreos-01、coreos-02 和 coreos-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 容器和服务发现。