本月我们宣布了一个非常令人兴奋的 与 Canonical 的合作伙伴关系,Ubuntu 的缔造者。最重要的是,这次合作的核心要素是在 CloudSigma 云和 Ubuntu 之间引入了完整的 CloudInit 支持。
CloudInit 简介
如果您不熟悉 CloudInit,它是引导云服务器的行业标准。具体来说,如果您使用的是简单的 DSL 在首次启动时轻松执行任务是完全可行的。同样值得指出的是,CloudInit 并不局限于 Ubuntu。如今,您会在大多数现代 Linux 发行版中发现对 CloudInit 的支持(但支持的云会有所不同)。
在开始使用 CloudInit 之前,了解 CloudInit 在配置生态系统中的位置非常重要。虽然可以将 CloudInit 作为独立的配置系统运行,但更常见的是将其与另一个配置系统(如 Ansible、Chef、Puppet 或 Salt)结合使用。在这种情况下,您只需使用 CloudInit 将新服务器引导至配置系统可以接管的状态。就我个人而言,我经常将 CloudInit 与 Ansible 结合使用。
在 CloudSigma 上使用 CloudInit
在 CloudSigma 上使用 CloudInit 非常简单直观。
要在 Ubuntu 14.04 服务器上使用 CloudInit,请执行以下步骤:
-
- 克隆驱动器 来自应用市场的 “Ubuntu 14.04 Cloud Image”(目前唯一完全支持 CloudInit 的驱动器)。请确保将克隆的驱动器调整为所需的大小,它将在首次启动时自动扩展文件系统。
- 创建一台新服务器。
- 创建服务器后,您将在服务器状态下方看到一个 CloudInit 按钮。

-
- 单击此按钮时,将出现以下对话框。

- 只需在此处粘贴您的 CloudInit 数据,然后按 ‘Activate’。
- 您可以启动服务器,脚本将在首次启动时运行。
使用 CloudInit 安装 SSH 密钥
现在您已经知道 如何 在我们的云上使用 CloudInit,让我们通过使用它来安装两个 SSH 密钥,将这些新学到的知识付诸实践。我们将要使用的两个虚构的公钥 SSH 密钥是 ‘ssh-rsa AAA[…] user1@host‘ 和 ‘ssh-rsa AAA[…] user2@host‘。(要了解有关生成 SSH 密钥的更多信息,请查看 Github 上的 此页面 。)
在 Ubuntu Cloud Images 上,默认用户名是 ‘ubuntu’。因此,密钥将被安装到该用户帐户中。
为此,CloudInit 配置如下所示:
[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
[/ruby]
请注意 空格非常重要。在 ‘-‘ 之前有两个空格。如果您只放一个,服务器可能无法读取。
保存 CloudInit 配置并启动服务器后,您应该能够使用 ‘ubuntu’ 用户通过 SSH 登录服务器:
[bash light="true"]
$ ssh ubuntu@aaa.bbb.ccc.ddd
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-36-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Sun Oct 19 21:51:54 UTC 2014
System load: 0.0 Users logged in: 0
Usage of /: 77.4% of 39.34GB IP address for eth0: aaa.bbb.ccc.ddd
Memory usage: 26%
Swap usage: 0%
Processes: 113
Graph this data and manage this system at:
https://landscape.canonical.com/
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
[...]
ubuntu@myserver:~$
[/bash]
使用 CloudInit 安装系统更新
您可以使用 CloudInit 轻松完成的另一件非常实用的事情是在首次启动时运行系统更新。虽然我们经常刷新磁盘映像,但采取额外的预防措施以确保您的系统是最新的仍然是一个好主意。
要在首次启动时安装系统更新,请添加以下内容:
[ruby]
#cloud-config
apt_update: true
apt_upgrade: true
[/ruby]
您可能还会注意到,有一个名为 ‘package_update’ 的类似选项,它是 Ubuntu 上 ‘apt_update’ 的分发无关别名。
此外,如果设置了 ‘packages’(见下文),‘apt_update’ 默认会被设置为 true,但我已在上面添加了它,以使其更加明确。
使用 CloudInit 安装软件包
引导系统的一个基本部分是能够在启动时安装软件包。幸运的是,CloudInit 也让这一切变得简单。我们只需要在 ‘packages’ 下指定我们想要安装的软件包列表。例如,如果我们想安装 ‘python-pip’、‘fail2ban’ 和 ‘vim’,它看起来会像下面这样:
[ruby]
#cloud-config
packages:
- python-pip
- fail2ban
- vim
[/ruby]
再次请注意 空格很重要。在 ‘-‘ 之前有两个空格。
使用 CloudInit 设置主机名
当您配置新服务器时,您可能还想为其设置主机名。
[ruby]
#cloud-config
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
[/ruby]
使用 CloudInit 在首次启动时运行命令
假设您正在对服务器进行更复杂的操作,您很可能有一些需要在首次启动时运行的命令。
这就是 ‘runcmd’ 和 ‘bootcmd’ 发挥作用的地方。这两者都允许您在首次启动时运行命令。区别在于 ‘bootcmd’ 在启动过程中的执行时间比 ‘runcmd’ 更早。
要使用其中任何一个命令,请将以下内容添加到您的 CloudInit 中:
[ruby]
#cloud-config
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]
将 CloudInit 与配置管理器配合使用
最后,如果您是更高级的云用户,您很可能正在使用某种配置管理器。幸运的是,CloudInit 对此已经做好了准备。然而,鉴于变量众多,这是一个相当复杂的话题。
因此,这里有一些示例,应该能够为您指明正确的方向:
如何将多个元素结合在一起
对于那些不熟悉 YAML 样式文件的人来说,如何将多个 CloudInit 元素链接在一起可能并不显而易见。然而,这其实很简单。在第一行,您需要 ‘#cloud-config‘。之后,您只需添加您的配置。
例如,将上述所有示例组合到一个配置中,如下所示:
[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
apt_update: true
apt_upgrade: true
packages:
- python-pip
- fail2ban
- vim
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]
其他资源
在本文中,我们真的只是触及了 CloudInit 功能的皮毛。您还可以通过学习做很多其他事情,例如 创建用户和组, 将文件写入磁盘 和 完成后调用 URL (用于通知其他系统)。
如果您想了解更多关于 CloudInit 的信息,我推荐以下资源:
- CloudInit 官方文档
- Ubuntu 的 CloudInit 指南
- RedHat 的 CloudInit 文档
- Ubuntu 的 CloudInit 示例库
评论
暂无评论。发表第一条评论吧。