如何在DigitalOcean上设置一套CoreOS集群

来源:互联网 发布:淘宝店铺招牌怎么设置 编辑:程序博客网 时间:2024/05/18 22:42

提供:ZStack云计算

系列教程

本教程为CoreOS上手指南九篇中的第二篇。

内容介绍

如果大家打算在基础设施当中使用CoreOS,那么首先需要设置一套CoreOS集群。为了让各CoreOS设备构建成这样一套集群,则必须接入etcd2实例。在本教程中,我们将以分步方式探讨如何快速在DigitalOcean上创建起一套三节点CoreOS集群。

先决条件

如果大家不太熟悉COreOS的构成组件(docker、etcd2以及fleet),则请首先参阅CoreOS系统组件介绍一文。另外,大家需要认真关注其中的etcd2部分,因为该组件正是集群发现流程中的核心所在。

SSH密钥

每一套CoreOS服务器都需要至少安装有一份SSH公钥。该密钥将被安装在核心用户的授权密钥文件当中,负责与私钥匹配以登录至CoreOS服务器。

如果大家还不具备与DigitalOcean账户相关的SSH密钥,则请参阅如何在DigitalOcean Droplets中使用SSH密钥教程中的第一至第三步。在此之后,大家还需要将自己的私钥添加至客户设备上的SSH代理中,命令如下:

ssh-add

欲了解更多相关信息,请参阅此篇教程。

DigitalOcean个人访问令牌

如果大家打算利用DigitalOcean API创建自己的CoreOS设备,则请参阅此篇教程,其中介绍了如何利用write权限生成并使用个人访问令牌。

现在大家已经做好了充分的准备,接下来开始构建我们的CoreOS集群!

生成一条新的发现URL

第一步就是生成一条新的发现URL,其作为惟一地址保存有各CoreOS地址与元数据。最简便的实现方式是使用https://discovery.etcd.io,一项免费发现服务。浏览器中访问https://discovery.etcd.io/new或者使用下命令即可生成新的发现URL:

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

无论采取哪种方式,其都会返回下面这条刚刚生成的惟一发现URL:

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

大家可以使用生成的发现URL来创建自己的新CoreOS集群。同一发现URL必须在各服务器cloud-config中的etcd2部分内指定。

现在我们已经拥有了发现URL,接下来创建cloud-config文件。

编写Cloud-Config文件

CoreOS使用cloud-config文件以允许我们声明定制化网络配置、systemd单元以及其它操作系统级项目。此文件为YAML格式,其使用缩进来表示数据层次结构。当设备引导时会同时处理cloud-config文件,我们也可以利用该文件发现应当加入的集群。

我们这里只介绍如何编写一套精简cloud-config实现CoreOS集群构建与运行。要了解更多细节信息,请参阅官方说明文档。其中还提供一款理想的工具用于检查cloud-config文件语法,即Cloud-Config Validator。

精简Cloud-Config

如上所述,集群内各成员CoreOS设备被存储在发现URL当中。因此,每台设备都必须使用同样的发现URL并提交可供etcd2服务访问的自身IP地址。这些内容在cloud-config文件中的etcd2部分内指定,具体如以下代码所示。

另外,大家还需要指定units部分,其以etcd2与fleet服务开头,同样属于CoreOS集群的必要组成部分。

以下列出的是一个基础cloud-config文件:

#cloud-configcoreos:  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:4001initial-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:4001listen-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行必须存在。其中privateipv4public_ipv4两个替代变量受到DigitalOcean的全面支持——这些变量需要被替换为大家VPS的实际IP地址。另外,如果大家不打算使用fleetctl ssh命令,则fleet部分并非必要。

此cloud-config脚本可被用于设置一套基本CoreOS。遗憾的是,其安全性仍然不够理想。在严肃用途的设置中,大家应当参阅如何利用TLS/SSL与防火墙规则保护CoreOS集群安全一文提升其安全水平。

创建CoreOS集群

现在大家已经了解了各设备上cloud-config文件的构成方式,下面创建CoreOS集群。由于Droplets可通过DigitalOcean控制面板或者API进行创建,因此我们将演示如何使用这两种方式完成创建工作。

DigitalOcean控制面板

首先,前往DigitalOcean控制面板,而后点击Create Droplet按钮。

接下来,选择CoreOS作为Linux发行版,而后选择所要使用的具体版本(稳定版、Beta或者Alpha测试版)。

而后选定所需要的Droplet配置。由于这里只进行基本测试,所以较低配置即可。

接下来选定合适的数据中心服务区。

在Select additional options处,选择Private Networking与User Data。将我们的cloud-config脚本复制到User Data字段内。具体如下所示:

接下来,选定至少一条SSH密钥。

在Finalize and create部分,创建至少三套Droplets并指定其主机多吃我。在本示例中,我们将其命名为coreos-01、coreos-02与coreos-03:

最后,点击Create按钮以创建各Droplets。

要了解更多与Droplet创建流程相关的内容,请参阅此教程。

DigitalOcean API

如果大家使用DigitalOcean API来创建自己的CoreOS Droplets,则可通过Droplet创建POST请求中的user_data参数指定cloud-config——直接粘贴完整脚本即可。

这里我们假定需要让三套Droplets至少拥有1 GB内存,配备专有网络,选定NYC3数据中心,使用CoreOS稳定版本,那么可使用以下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-configcoreos:  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:4001initial-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:4001listen-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 Key ID(s)>替换为实际SSH密钥ID或指纹,同时确保$TOKEN被设定为读取/写入DigitalOcean个人访问令牌之一。

在调整完成后,运行此命令即可完成三节点CoreOS集群的创建。

要了解更多与使用该API相关的信息,请参阅此教程。

验证集群

要验证这套集群是否创建正确,我们需要使用SSH接入各集群成员。

首先作为core user通过SSH登录coreos-01设备,同时使用-A选项以转发至SSH代理。请注意替换其中的public IP address部分:

ssh -A core@coreos-01_public_IP

在此命令提示符中,输入fleetctl命令以显示集群中的全部成员:

fleetctl list-machines

此时输出结果如下,各节点通过其peer-addr IP地址实现识别:

MACHINE     IP      METADATA59b2fffd... 10.131.29.141   -853b0df3... 10.131.63.121   -cd64a2e3... 10.131.63.120   -

如果大家看到全部创建完成的设备,且通过etcd2完成识别,则证明集群构建成功!

注意:确保设置IPTables以限制对端口4001的访问。这样一来,来自外部网络的未授权用户将受到各CoreOS设备的控制。在生产环境下,大家还可参阅此教程以利用TLS/SSL证书与防火墙规则保护CoreOS集群。

添加新设备

如果大家希望向现有CoreOS集群中添加更多新设备,则可使用同样的cloud-config(及发现URL)实现。大家的新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容器与服务发现机制。

本文来源自DigitalOcean Community。英文原文:How To Set Up a CoreOS Cluster on DigitalOcean By Mitchell Anicas

翻译:diradw

0 0
原创粉丝点击