实战Packer创建chef server镜像

简介: Packer简介 Packer是一个从单一配置文件为多平台创建一致镜像的轻量级的开源工具。能够运行在主流的操作系统上,并行高效的创建多平台的虚拟机镜像,它为代码即基础结构提供了坚实的基础,通过packer较大的降低了了创建用户自定义镜像的难度,并且将创建镜像的过程从人工的随机过程变成可以配置管理代码,可测试的过程,从而减少了用户应用上云的障碍之一。

Packer简介

Packer是一个从单一配置文件为多平台创建一致镜像的轻量级的开源工具。能够运行在主流的操作系统上,并行高效的创建多平台的虚拟机镜像,它为代码即基础结构提供了坚实的基础,通过packer较大的降低了了创建用户自定义镜像的难度,并且将创建镜像的过程从人工的随机过程变成可以配置管理代码,可测试的过程,从而减少了用户应用上云的障碍之一。下面就从实战的角度来构建一个chef server镜像来学习packer的使用。

Packer的安装

首先从Packer官网下载对应操作系统的安装包,本文以Mac OS X x64为例,点击如下图的官网链接下载packer安装包screenshot
然后打开终端,导航到下载目录下,执行如下命令,如果得到如下图的输出,packer就安装好了:

#unzip packer_0.12.3_darwin_amd64.zip
#sudo mv packer /usr/local/bin/
#packer
usage: packer [--version] [--help] <command> [<args>]

Available commands are:
    build       build image(s) from template
    fix         fixes templates from old versions of packer
    inspect     see components of a template
    push        push a template and supporting files to a Packer build service
    validate    check that a template is valid
    version     Prints the Packer version

由于阿里云的packer插件提交还在流程中,所以还需要从阿里云的开源站点下载阿里云的packer插件,然后执行如下命令,如果输出如下,插件就安装好了:

#tar -xvf  packer-builder-alicloud-ecs_darwin-amd64.tgz
#sudo mv bin/packer-builder-alicloud-ecs /usr/local/bin/
# ls /usr/local/bin | grep packer

packer                                  packer-builder-alicloud-ecs

创建chef server

从阿里云的packer插件代码站点下载样例文件alicloud.jsonchef.shuser_data.sh到同一目录,打开alicloud.json文件内容如下:

{
  "variables": {
    "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
    "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
  },
  "builders": [{
    "type":"alicloud-ecs",
    "access_key":"{{user `access_key`}}",
    "secret_key":"{{user `secret_key`}}",
    "region":"cn-beijing",
    "image_name":"packer_chef2",
    "source_image":"ubuntu_14_0405_64_40G_base_20170222.vhd",
    "ssh_username":"root",
    "instance_type":"ecs.n1.medium",
    "io_optimized":"true",
    "image_force_delete":"true",
    "ssh_password":"Test1234",
    "user_data_file":"examples/alicloud/chef/user_data.sh"
  }],
  "provisioners": [{
    "type": "file",
    "source": "examples/alicloud/chef/chef.sh",
    "destination": "/root/"    
   },{
    "type": "shell",
    "inline": [
    "cd /root/",
    "chmod 755 chef.sh",
    "./chef.sh",
    "chef-server-ctl  reconfigure"
    ]
  }]
}

将其中的"variable"部分的"access_key"和"secret_key"的值替换为你自已的access key和secret key,或者在终端中执行

#export ALICLOUD_ACCESS_KEY="<你的access_key>"
#export ALICLOUD_SECRET_KEY="<你的secret_key>"

你可以从阿里云控制台获取访问的AK,打开控制台登录后,点击页面右上角的登录名,出现如下图菜单,在菜单中选择accesskeys按钮
screenshot
然后在Access key管理页面点击右上角的"创建Access Key"按钮,创建新的Access Key ID和Access Key Secret,将值替换模板中或者设置如上的环境变量。
然后修改如下两行的值

"user_data_file":"examples/alicloud/chef/user_data.sh"
"source": "examples/alicloud/chef/chef.sh",

"user_data_file":"user_data.sh"
"source": "chef.sh",

在文件所在的目录执行

#packer build alicloud.json

alicloud-ecs output will be in this color.

==> alicloud-ecs: Force delete flag found, skipping prevalidating alicloud image name
    alicloud-ecs: Found image ID: ubuntu_14_0405_64_40G_base_20170222.vhd
==> alicloud-ecs: Not using temporary keypair
==> alicloud-ecs: Start create alicloud vpc
==> alicloud-ecs: Start creating vswitch...
==> alicloud-ecs: Start creating security groups...
==> alicloud-ecs: Start creating alicloud instance
.............

运行正常结束后,你就可以登录控制台镜像列表查看到刚才创建的镜像了。
screenshot


然后基于这个自定义的镜像创建ECS实例,我的结果如下图,(注:如果创建的ECS实例是经典网络,需要登录到ECS实例上手动执行user_data.sh脚本)
screenshot
然后在浏览器中输入如下地址:https://123.56.16.159/
你就可以看到chef的web界面了。(注:注意更改成你自已实例的IP地地址)
screenshot

展望

诚然,引入新的机制,会引入相应的学习曲线,对于packer来说,编写可用的镜像模板文件不是一件简单的事情,但是随着开源的盛行,很多常用的的模板都能够从github上找到,例如如下资源库中就包含大量的模板,当然,由于阿里云的packer插件支持才刚刚起步,所以也欢迎大家以阿里云官方packer插件资源库来贡献一份力量。

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
运维 Cloud Native 测试技术
极氪汽车云原生架构落地实践
随着极氪数字业务的飞速发展,背后的 IT 技术也在不断更新迭代。极氪极为重视客户对服务的体验,并将系统稳定性、业务功能的迭代效率、问题的快速定位和解决视为构建核心竞争力的基石。
|
缓存 资源调度 编译器
原来是这样啊!浅谈webpack4和webpack5的区别
相对于webpack4,webpack5内置了很多plugin插件,比如、打包、压缩、缓存
939 1
|
存储 物联网 网络性能优化
|
6月前
|
SQL 人工智能 搜索推荐
通义灵码 Rules 来了:个性化代码生成,对抗模型幻觉
通义灵码又上新外挂啦,Project Rules来了。当模型生成代码不精准,试下通义灵码 Rules,对抗模型幻觉,硬控 AI 根据你的代码风格和偏好生成代码和回复。
1280 7
|
jenkins 持续交付 开发工具
阿里云容器服务Kubernetes之Jenkins X(1)-安装部署实践篇
"Jenkins X is a CI/CD solution for modern cloud applications on Kubernetes." 这是Jenkins社区对于Jenkins X 的官方总结和定义。
7013 0
|
4月前
|
人工智能 自然语言处理 搜索推荐
AI 零成本搭建个人网站,小白 3 步搞定!通义灵码智能体+MCP 新玩法
通过AI技术,即使不编写代码也能高效开发项目。从生成诗朗诵网页到3D游戏创建,这些令人惊叹的操作如今触手可及。经过摸索,我利用AI成功上线了个人站点:https://koi0101-max.github.io/web。无需一行代码,借助强大的工具即可实现创意,让开发变得简单快捷!
1493 71
|
11月前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible实战应用
【9月更文挑战第33天】本文将带你深入理解Ansible,一个强大的自动化运维工具。我们将从基础概念开始,逐步探索其配置管理、任务调度等功能,并通过实际案例演示其在自动化部署和批量操作中的应用。文章旨在通过浅显易懂的语言和实例,为读者揭开Ansible的神秘面纱,展示其在简化运维工作中的强大能力。
349 64
|
10月前
|
前端开发 API UED
React 懒加载图片 Lazy Image
懒加载是一种优化技术,通过延迟加载不在视口内的图片,减少初始页面加载时间,提升用户体验。本文从基础概念入手,逐步探讨 React 中实现图片懒加载的常见问题、易错点及解决方案,并通过代码案例详细解释。
400 3
|
11月前
|
存储 关系型数据库 MySQL
如何在MySQL中进行索引的创建和管理?
【10月更文挑战第16天】如何在MySQL中进行索引的创建和管理?
463 1
|
10月前
|
运维 Kubernetes 网络协议
运维之道:从新手到专家的成长之路
【10月更文挑战第21天】 本文旨在探讨运维领域的成长路径,通过分享个人经历和行业见解,为读者提供一条从入门到精通的清晰路线图。我们将从基础技能的学习开始,逐步深入到高级技巧的应用,最终达到专业水平的提升。文章强调了持续学习和实践的重要性,并鼓励读者在面对挑战时保持积极态度,不断探索未知领域。
263 6

热门文章

最新文章