packer的基本使用
Posted hackcrack
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了packer的基本使用相关的知识,希望对你有一定的参考价值。
工具的产生,一定是为了解决某些痛点,那么痛点是?
你们在工作中是不是经常用到各种云?aliyun, aws, digitalOcean and so on?
你们的规模不大不小,经常去云平台上点一点,创建一台实例?
创建完实例以后,运行初始化脚本,安装必须的软件,再做其它操作?
初始化脚本运行慢不说,还特么都是bug?
大哥你心累吗?
有更好的办法,packer了解一下?
在说packer之前,先说啥是基础设施即代码(Infrastracture as Code),传统情况下,搬服务器,插网线这些事儿怎么着也和代码不沾边儿
但这是云的时代了,你上控制台上点一点,实例就生成了,点是你还要点啊,如果你把这些点的动作写成代码,直接运行,一切都完成了。
是不是很爽?
packer就是这么个工具,你在代码里定义基础镜像,规定里面装哪些软件,然后生成一个镜像,然后你就可以直接用这个镜像起动实例了,
实例启动后,该有的都有了,不用去执行什么初始化脚本,你写的代码可以在多个云平台上使用,当然有些云还不支持此工具,毕竟它还很
年轻。
下面我们做个简单的例子,实操一下
用packer生成安装有所需工具的镜像
我使用的云平台是aws,阿里云可能需要装个小插件,请自行阿里一下。
我一会要用packer安装的工具有:
jq:json处理工具
boto3:aws的s3命令行依赖这个
supervisor: 进程管理工具
dotnet: 微软的.net在linux跑的也不错奥
至于这为什么要装这些东西,肯定是我要用啊,你想装其它的都行。
packer这货是用go写的编译好的binary,直接放到/usr/local/bin/下就可以了
下面就写packer的配置文件了呗, 我这里放个demo,详细的见官网
[[email protected] packer_workspace]# cat blast_base.json { "variables": { "aws_access_key": "", "aws_secret_key": "", "aws_region": "us-west-2" }, "provisioners": [ { "type": "ansible", "user": "ec2-user", "ansible_env_vars": [ "ANSIBLE_HOST_KEY_CHECKING=False", "ANSIBLE_SSH_ARGS=‘-o ForwardAgent=yes -o ControlMaster=auto -o ControlPersist=60s‘", "ANSIBLE_NOCOLOR=True", "ANSIBLE_ROLES_PATH=../ansible_workspace/roles", "AWS_ACCESS_KEY_ID={{user `aws_access_key`}}", "AWS_SECRET_ACCESS_KEY={{user `aws_secret_key`}}" ], "extra_arguments": [ "--extra-vars", "aws_region={{user `aws_region`}}" ], "playbook_file": "./books/initall.yml" } ], "builders": [ { "type": "amazon-ebs", "access_key": "{{user `aws_access_key`}}", "secret_key": "{{user `aws_secret_key`}}", "region": "{{user `aws_region` }}", "source_ami_filter": { "filters": { "image-id": "ami-d874e0a0" } }, "instance_type": "t2.micro", "ssh_username": "ec2-user", "ami_name": "Blast_base {{timestamp}}" } ] }
上面配置文件的意思大概是说我要生成一个镜像,在这个过程中我调用ansible脚本,去安装我想安装的东西
当然你可以不调用ansible,而直接运行shell命令或脚本,但是当安装的东西太多时,那样也不优雅。。。
配置文件写完了,校验一下写的有没有语法问题:
packer validate blast_base.json Template validated successfully.
没有语法错误,那就构建吧:
packer build blast_base.json
稍等一小下,aws镜像已经生了,可以愉快的使用了,其实生成实例也有相关工具,叫terraform,就不介绍了
感觉趣可以自己查官网,这里说的比较简单,就是想起一个抛砖引石的作用,具体用法请看官网。
以上是关于packer的基本使用的主要内容,如果未能解决你的问题,请参考以下文章
“java.lang.NoSuchFieldError: DEFAULT_PACKER_CONFIG”代码在实例化 ably-java 时
Packer 错误消息:找不到名为 'packer-virtualbox-iso-# 的注册机器