Packer:在Google Cloud上构建映像

作者 : IT 大叔 本文共2072个字,预计阅读时间需要6分钟 发布时间: 2020-09-8

安装运行网站或工具所需的软件可能需要一些时间才能完成。当我们的部署对时间敏感时(例如,当我们需要扩展Web服务器池以处理对您最新的花式袜子的突然关注时),这不是理想的选择。

我们可以通过预安装所需的软件并设置配置选项来解决此问题,然后我们可以将其转换为可以反复部署的映像。

为了使整个过程更快,可重复,并且我们可以轻松地进行模板制作-我们将使用打包程序

什么是Packer?

Packer是一种Hashicorp工具,可用于简化在云平台​​上或其他本地工具(如Vagrant(另一种Hashicorp工具)),Docker和VirtualBox上的系统映像的创建。

如何在Google Cloud Platform上使用它?

您需要在打包程序文件中创建“生成器”配置。
这是一个基本示例:

{
  "builders": [
    {
      "type": "googlecompute",
      "project_id": "my project",
      "zone": "us-central1-a",
      "source_image_family": "debian-10",
      "ssh_username": "packer",
      "image_name": "packer-{{timestamp}}",
      "image_family": "socks-web"
    }
  ]
}

我们上面设置的选项执行以下操作:

type
是我们正在使用的构建器的类型。这是googlecompute因为我们正在与GCP交谈

project_id
是将要存储最终图像的项目

zone
将是我们建立形象的区域

source_image_family
这是一组图像,将从中获取基本图像

ssh_username
ssh用户名,我们将用于与将创建映像的实例进行对话

image_name
我们将创建的图像的名称。
图像名称在我们的项目中必须唯一,因此我们使用packer变量timestamp来做到这一点。

image_family
我们的图像家族的名称。这是可选的,但以后会很有用。

这是什么image_family东西?

可以将图像存储在称为图像族的组中。在构建实例时,我们可以要求GCP从我们的家庭那里获取我们的映像,该映像将返回添加到其中的最新映像。

如果发现新映像有问题,我们可以将其标记为已弃用,并且该系列将在下次部署实例时提供以前的版本。

有关图片系列的更多信息,请参见GCP文档

如何在我的映像中安装该Web服务器?

你需要添加一个供应者或两个,你的封隔器配置文件

预配置程序通常是shell脚本或文件上传,但可以是be,ansible,salt或Chef操作。

这是我们打包程序文件的完整示例,其中包括新的预配程序:

{
  "builders": [
    {
      "type": "googlecompute",
      "project_id": "my project",
      "zone": "us-central1-a",
      "source_image_family": "debian-10",
      "ssh_username": "packer",
      "image_name": "packer-{{timestamp}}",
      "image_family": "socks-web"
    }
  ],
  "provisioners": [                                                           
      {                                                                         
      "type": "file",                                                           
      "source": "./index.html",                                           
      "destination": "/tmp/index.html"                                            
      },
      {                                                                         
        "type": "shell",                                                        
        "inline": [                                                             
            "sudo apt-get update -qq",
            "sudo apt-get upgrade -qq",                                     
            "sudo apt-get install -qq apache2",
            "sudo cp /tmp/index.html /var/www/html/index.html",
         ]                                                                      
    }]
}

在这里,我们将index.html文件复制到/tmp,更新apt的缓存,执行系统升级以确保已安装所有更新,然后安装apache并最终将索引页复制到位。

我如何建立那个形象?

现在,您可以从保存打包程序文件的目录中运行以下命令:

packer build example.json

Packer现在将消失并为您构建该图像,并将结果图像存储为packer-xxxxxxxxx(其中xxxxxxxxx是带时间戳的值)。结果图像将链接到图像系列socks-web,然后您就可以在项目的terraform模板中引用该图像系列。

还有其他事情要知道吗?

是的,有两件事:

联网

上面的示例假定您正在使用的项目包含默认的网络设置,并且所选区域中有可用的子网。如果这些都不可用,则构建过程将失败,并且您需要在构建器配置中添加一个networkOR subnetwork选项,该选项与您选择的区域对齐。

它还假定默认防火墙规则已经到位,以便打包程序可以将其SSH到它创建的实例。
如果您没有所需的防火墙规则来允许访问,则构建过程将在等待连接时超时。

machine_type 已从示例中省略

它将默认设置为,n1-standard-1但是您可能需要根据自己的操作来增加其大小。较大的计算机类型将帮助其更快地运行。

免责声明:
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » Packer:在Google Cloud上构建映像

常见问题FAQ

没有金币/金币不足 怎么办?
本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
所有资源普通会员都能下载吗?
本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。

发表评论