使用Packer创建快照

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com

什么是Packer?

封隔器 是由HashiCorp开发的服务器映像工具。服务器映像;或者,不变的基础设施;是运行时配置工具(例如Ansible或Puppet)的流行替代方法。它基于这样的思想,即一旦部署了服务器,您就永远不会对其进行更改;因此,请参见“服务器配置”。取而代之的是,您使用所做的更改部署一台新服务器,然后拆除旧服务器。这使服务器维护更加容易,并允许您更有效地在大量计算机上进行扩展。

尽管Packer不支持开箱即用,但有一个 插入 增加了支持。可以在插件的自述文件中找到有关安装具有Vultr支持的Packer的说明。本文的其余部分假定您已安装Packer以及Vultr插件。

怎么运行的

Packer的目的是生成服务器映像,或可用于完全像在成像时那样创建新服务器的工件。对于Vultr,这些工件称为快照。该插件的工作原理是部署一个新的VPS,在其上运行定义的供应商,为其创建快照,然后拆除该VPS。当您要通过映像创建新服务器时,只需调用Vultr的API即可部署具有所需快照作为其操作系统的新VPS。

使用打包机

Packer接受一个JSON文件,该文件定义应作为输入运行的内部版本。这是定义Vultr构建的示例文件:

{
  "variables": {
    "vultr_api_key": "{{env `VULTR_API_KEY`}}"
  },
  "builders": [
    {
      "type": "vultr",
      "api_key": "{{user `vultr_api_key`}}",
      "description": "My Awesome App",
      "region_name": "Chicago",
      "plan_name": "1024 MB RAM,25 GB SSD,1.00 TB BW",
      "os_name": "CentOS 7 x64",
      "ssh_username": "root"
    }
  ]
}

该文件有两个顶级密钥, variablesbuilders。的 variables 键用于定义自定义变量,在这种情况下,用于合并 VULTR_API_KEY 环境变量,以便以后使用。的 builders 键包含要运行的内部版本列表,在这种情况下,仅包含我们的Vultr内部版本。让我们分解一下:

type:这定义了实际使用的构建器,对于Vultr构建,应始终为 vultr
api_key:为了运行构建,您需要一个在此定义的API密钥。本示例将其定义为 vultr_api_key 用户变量,该变量进一步设置为 VULTR_API_KEY 环境变量。
description:生成的快照的描述。
region_name:将VPS部署到的区域。这不会影响最终快照,只会影响从中创建快照的服务器。
plan_name:用于VPS的计划。对该快照的将来使用必须定义一个至少这么大的计划。
os_name:快照所基于的操作系统。
ssh_username:SSH进入服务器进行配置时将使用的用户名。对于Linux服务器,通常是 root

要使用它,请使用以下名称保存该文件 server.json,然后运行命令 packer build server.json。您将看到一些指示构建状态的输出,这将需要几分钟。

运行此构建时,将有一个名为 Snapshotting: My Awesome App 将被创建,快照并销毁。没有定义供应者,这就是所有发生的事情。有关定义预配器的更多信息,请参阅 打包机的文档

构建完成后,Packer将输出结果快照的ID。

定义区域,计划和操作系统

每个Vultr构建都需要这三个值,但是可以通过以下几种方法之一进行定义。对于每一个,您都应该确切指定其变体之一,以避免产生歧义:

区域

可以通过API查询区域信息:https://www.vultr.com/api/#regions_region_list

region_id:区域的ID,例如 2
region_name:区域名称,例如 Chicago
region_code:区域代码,例如 ORD

计划

可以通过以下API查询计划信息:https://www.vultr.com/api/#plans_plan_list

plan_id:方案的ID,例如 201
plan_name:方案名称,例如 1024 MB RAM,25 GB SSD,1.00 TB BW

操作系统

可以通过以下API查询操作系统信息:https://www.vultr.com/api/#os_os_list

os_id:操作系统的ID,例如 167
os_name:方案名称,例如 CentOS 7 x64

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com