介绍
如果您计划在基础架构中使用CoreOS,那么您首先需要设置的是CoreOS集群。 为了CoreOS机以形成簇,其etcd2
实例必须连接。 在本教程中,我们将给出分步说明,以便在DigitalOcean上快速创建一个3节点CoreOS集群。
先决条件
如果你不熟悉与CoreOS是建立在(Docker,etcd2,和车队)的组件,强烈建议您阅读到CoreOS系统组件介绍 。 您将要特别注意覆盖部分etcd2
,因为这部分是集群发现过程是至关重要的。
SSH密钥
您创建的每个CoreOS服务器在其创建过程中都需要至少安装一个SSH公钥。 关键(S)将被安装到core
用户的授权密钥文件中,您将需要相应的私钥(S)登录到您的CoreOS服务器。
:如果您还没有与DigitalOcean帐户关联的SSH密钥,通过下面的步骤本教程的1-3,现在这样做如何使用DigitalOceanDropletSSH密钥 。 然后,您将要通过运行以下命令将您的私钥添加到客户端计算机上的SSH代理:
ssh-add
欲了解更多有关此步骤,请参阅 。
DigitalOcean个人访问令牌
如果您在使用DigitalOcean API来创建你CoreOS机计划,请参阅本教程 ,了解如何生成和使用个人访问令牌有写权限的信息。
现在你已经有了前提条件,让我们开始构建我们的CoreOS集群!
生成新的发现URL
设置新的CoreOS集群的第一步是生成一个新的发现URL,一个存储对等CoreOS地址和元数据的唯一地址。 要做到这一点,最简单的方法是使用https://discovery.etcd.io
,免费的搜索服务。 新发现的URL可以通过访问生成https://discovery.etcd.io/new在Web浏览器或通过运行以下curl
的命令:
curl -w "\n" "https://discovery.etcd.io/new?size=3"
任一方法将返回一个新的,唯一的发现URL,看起来像下面(突出部分将是一个独特的令牌):
https://discovery.etcd.io/5c1574906b3502aa9d8dc43c1b185775
您将使用生成的发现URL创建新的CoreOS集群。 同样发现URL必须在指定etcd2
要添加到特定CoreOS集群的各服务器的云配置的部分。
现在,我们有一个发现URL,让我们来看看如何创建cloud-config
使用它的文件。
写一个Cloud-Config文件
CoreOS使用了一个名为cloud-config
,它允许你声明定制的网络配置,systemd单位和其他操作系统级的项目。 此文件是以YAML格式编写的,它使用缩进来表示数据层次结构。 在cloud-config
时,机器启动文件处理,并提供了一种与配置的机器etcd2
设置,将允许他们发现,他们应该加入集群。
我们将介绍如何编写一个最小的cloud-config
让工作CoreOS集群启动和运行。 对于项目的完整列表,可以与云配置进行配置,检查出的官方文档 。 他们还提供了一个有用的工具,它可以检查你的云-config文件的语法, 云配置验证 。
最小云配置
如前所述,集群中每个CoreOS计算机的对等地址与发现URL一起存储。 因此,集群中的每台机器必须使用相同的URL发现并在其自己的IP地址,通过它在哪里etcd2
服务即可到达。 这些将在指定的cloud-config
下etcd2
部,并在下面的代码块被示出。
您还需要指定一个units
部分,这将启动etcd2
和fleet
所必需的工作CoreOS集群服务。
这是一个基本的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
是必需的线条。 在$private_ipv4
和$public_ipv4
替代变量在云的配置完全支持DigitalOcean -这些变量将与您的新VPS的实际相应的IP地址替换。 此外, fleet
,如果你不打算使用部分不需要fleetctl ssh
命令。
这种cloud-config
脚本可用于建立可用于测试目的的基本CoreOS; 不幸的是,它不是很安全。 :对于较严重的设置,应按照本教程建立一个安全CoreOS集群如何使用TLS / SSL和防火墙规则保护您的CoreOS集群 。
创建CoreOS集群
现在,你知道你的cloud-config
在新CoreOS集群对每一台机器的文件将包括,让我们创建CoreOS集群。 因为Droplets可以通过DigitalOcean控制面板或API创建,我们将向您展示如何使用这两种方法创建您的CoreOS集群。
数字海洋控制面板
首先,访问DigitalOcean控制面板 ,然后点击创建按钮Droplet 。
接下来,选择CoreOS作为您的Linux发行版,然后选择要使用的通道(稳定,测试或Alpha)。
然后选择所需的Droplet大小。 如果你做基本测试,更小的尺寸是好的。
接下来,选择首选的数据中心区域。
在选择附加头选项 ,请选择专用网络和用户数据 。 复制和粘贴的cloud-config
脚本到用户数据文本字段。 它应该看起来像这样:
接下来,选择至少一个要用于登录到Droplet的SSH密钥。
根据完成并创建部分, 创建至少三Droplet并指定其主机名。 在我们的例子中,我们会打电话给他们coreos-01,coreos-02,和coreos-03:
最后,点击创建按钮创建将成为您CoreOS集群的Droplet。
要了解更多关于Droplet创建过程中,使用DigitalOcean控制面板,请参阅本指南 。
数字海洋API
如果使用DigitalOcean API来创建你的CoreOSDroplet,你可以指定你的cloud-config
通过user_data
在Droplet创作POST请求的参数-只需粘贴在那里整个脚本。
让我们假设,我们要创建三个1 GBDroplet命名coreos-01,coreos-02,而且,coreos-03与专用网络,在NYC3数据中心使用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创建请求,增加的例子的cloud-config
通过传递user_data
参数。
您必须替换为你的SSH密钥ID(S)或指纹(S) <SSH Key ID(s)>
,并确保$TOKEN
设置为你读一个/写DigitalOcean个人的访问令牌。
使用适当的替换运行此命令后,将创建您的3节点CoreOS集群。
有关使用API的更多信息,请参见本教程 。
验证群集
要验证我们的3机器集群是否正确形成,我们必须SSH到其中一个集群成员。
登录到coreos-01机为core
通过SSH用户,并使用-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计算机。 供生产使用,你应该认真考虑以下的步骤本指南,以确保一个CoreOS集群TLS / SSL证书和防火墙规则 。
添加新计算机
如果您想新机添加到现有CoreOS集群,简单地创建使用相同的一个新的Dropletcloud-config
(和发现URL)。 您的新CoreOS机器将自动加入现有群集。
如果您忘记了您使用的发现URL,您可以在集群的其中一个成员上查找。 使用下面grep
在现有的一台机器的命令:
grep DISCOVERY /run/systemd/system/etcd2.service.d/20-cloudinit.conf
您将看到一行包含原始发现网址,如下所示:
Environment="ETCD_DISCOVERY=https://discovery.etcd.io/575302f03f4fb2db82e81ea2abca55e9"
结论
您的基本CoreOS集群已设置,现在您可以继续使用它进行测试! 如果您正在寻求建立一个安全的CoreOS群集,请按照本教程: 如何使用TLS / SSL和防火墙规则保护您的CoreOS集群 。
本系列的其余教程将向您展示有关CoreOS的更多信息,以及如何使用Docker容器和服务发现与您的CoreOS集群。