Packer创建阿里云本地镜像

Packer创建阿里云本地镜像

通过手工创建在本地镜像,并且上传到云环境是一个复杂而易错的过程,而packer的出现极大的降低了这种复杂度,本文详细了讲解了如何在ubuntu(16.04或者更高版本)系统基于packer创建centos 6.8的镜像并上传到阿里云自定义镜像的全过程。

1.准备

1.1安装kvm

  • 首先查看cpu是否支持kvm,执行如下命令,如果有类似下面的输出,就是支持kvm:
# egrep "(svm|vmx)" /proc/cpuinfo

pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
  • 打开终端然后执行如下命令安装kvm :
sudo apt-get install qemu-kvm qemu virt-manager virt-viewer  libvirt-bin bridge-utils
  • 安装结束后,可以执行如下命令,会出现virt-manager的界面,如果通过通过GUI创建虚拟机,那么kvm就安装完了
 sudo virt-manager

1.2申请工单

由于阿里云的镜像导入功能默认并不是开放的,所以在运行本示例前需要通过工单申请开通镜像上传功能,可以登录阿里云控制台,导航到镜像列表栏目,如果右部的”刷新“按钮旁边象下图一样没有”导入镜像“按钮,就需要“点击顶部的“工单”按钮,然后在工单管理页面通过如下步骤提交工单:

”提交工单“->"云服务器 ECS”->点击“提问”按钮->"镜像咨询“->"4. 如何把本地物理镜像导入到 ECS 中使用?"

在低部选择”提交工单”按钮。

在"问题描述:“文本框中输入如下内容,然后填写其它必要信息,提交工单,等候工作人员批准。

在访问ECS镜像复制和镜像上传功能时没有权限。
CopyImage/CancelCopyImage/ImportImage/AliyunECSImageImportDefaultRole/AliyunECSImageImportRolePolicy

如果理由合理,一般一天左右,工单就会被批准,这些镜像列表栏目的右上部就会出现如下图的”导入镜像“按钮

1.3开通OSS

由于阿里云镜像上传功能需要通过OSS中转,所以如果还没有开通OSS,可以通过点击如下OSS控制台按照开通向导,一步一步的输入必要信息来开通OSS,由于过程并不复杂,本文就不赘述了。

2.安装packer和阿云插件

首先从Packer官网下载对应操作系统的安装包,点击如下图的官网链接下载packer安装包

然后打开终端,导航到下载目录下,执行如下命令,如果得到如下图的输出,packer就安装好了:

#unzip packer_0.12.3_linux_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_linux-amd64.tgz
#sudo mv bin/* /usr/local/bin/
# ls /usr/local/bin | grep packer

packer                                  packer-builder-alicloud-ecs               packer-post-processor-alicloud-import

3.本地镜像的制作

从阿里云的官方插件站点下载 centos.jsonks.cfg,cetnos.json的内容如下,

{"variables": {
    "box_basename": "centos-6.8",
    "build_timestamp": "{{isotime \"20060102150405\"}}",
    "cpus": "1",
    "disk_size": "4096",
    "git_revision": "__unknown_git_revision__",
    "headless": "",
    "http_proxy": "{{env `http_proxy`}}",
    "https_proxy": "{{env `https_proxy`}}",
    "iso_checksum": "0ca12fe5f28c2ceed4f4084b41ff8a0b",
    "iso_checksum_type": "md5",
    "iso_name": "CentOS-6.8-x86_64-minimal.iso",
    "ks_path": "centos-6.8/ks.cfg",
    "memory": "512",
    "metadata": "floppy/dummy_metadata.json",
    "mirror": "http://mirrors.aliyun.com/centos",
    "mirror_directory": "6.8/isos/x86_64",
    "name": "centos-6.8",
    "no_proxy": "{{env `no_proxy`}}",
    "template": "centos-6.8-x86_64",
    "version": "2.1.TIMESTAMP"
  },
  "builders":[
    {
      "boot_command": [
        "<tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/{{user `ks_path`}}<enter><wait>"
      ],
      "boot_wait": "10s",
      "disk_size": "{{user `disk_size`}}",
      "headless": "{{ user `headless` }}",
      "http_directory": "http",
      "iso_checksum": "{{user `iso_checksum`}}",
      "iso_checksum_type": "{{user `iso_checksum_type`}}",
      "iso_url": "{{user `mirror`}}/{{user `mirror_directory`}}/{{user `iso_name`}}",
      "output_directory": "packer-{{user `template`}}-qemu",
      "shutdown_command": "echo 'vagrant'|sudo -S /sbin/halt -h -p",
      "ssh_password": "vagrant",
      "ssh_port": 22,
      "ssh_username": "root",
      "ssh_wait_timeout": "10000s",
      "type": "qemu",
      "vm_name": "{{ user `template` }}.raw",
      "net_device": "virtio-net",
      "disk_interface": "virtio",
      "format": "raw"
    }
  ],
"post-processors":[
    {
      "type":"alicloud-import",
      "oss_bucket_name": "packer",
      "image_name": "packer_import",
      "image_os_type": "linux",
      "image_platform": "CentOS",
      "image_architecture": "x86_64",
      "image_system_size": "40",
      "region":"cn-beijing"
    }
  ]
}

在终端中执行如下命令设置阿里云访问的AK

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

你可以从阿里云控制台获取访问的AK,打开控制台登录后,点击页面右上角的登录名,出现如下图菜单,在菜单中选择accesskeys按钮

然后在Access key管理页面点击右上角的"创建Access Key"按钮,创建新的Access Key ID和Access Key Secret,将值替换模板中或者设置如上的环境变量。
在终端中,导航到centos.json文件所在的目录,执行

#mkdir -p http/centos-6.8
#mv ks.cfg http/centos-6.8/
#packer build alicloud.json

qemu output will be in this color.

==> qemu: Downloading or copying ISO
    qemu: Downloading or copying: http://mirrors.aliyun.com/centos/6.8/isos/x86_64/CentOS-6.8-x86_64-minimal.iso
==> qemu: Creating hard drive...
==> qemu: Starting HTTP server on port 8665
................................................

==> qemu: Running post-processor: alicloud-import
    qemu (alicloud-import): Deleting import source https://oss-cn-beijing.aliyuncs.com/packer/centos_x86_64
Build 'qemu' finished.

==> Builds finished. The artifacts of successful builds are:
--> qemu: Alicloud images were created:

cn-beijing: m-2zecept2coytitjjixyc

由于镜像有4G的大小,上传到OSS会是一个漫长的过程,如果中间没有出错,当看到成功提示的结果,你就可以如下图在镜像列表中看到创建的自定义镜像。

4.展望

从上面的过程看,即使有了packer的帮助,制作一个本地的自定的镜像也不是一件容易的事情,但是随着开源社区的发展,对于常用的镜像模板,会非常容易的从社区获得,而且packer本身也比较年轻,随着功能的不断完善,镜像的制作一定会变得越来越容易。也希望大家能够为packer的完善贡献自己的力量。

packer的资源库

阿里云开源插件工具资源库

时间: 2024-11-02 01:15:50

Packer创建阿里云本地镜像的相关文章

如何使用Packer创建阿里云自定义镜像

阿里云中的每个ECS实例都由包含不同操作系统分发和版本的镜像创建. 镜像可包括预安装的应用程序和配置. 阿里云市场为最常见的操作系统和应用程序环境提供许多第一和第三方镜像,或者也可创建满足自身需求的自定义镜像. 本文详细介绍了如何使用开源工具 Packer 在阿里云中定义和生成自定义镜像. 1. 安装Packer 安装 从Packer官方站点的下载页面选择与你操作系统对应的版本,下载后解压缩到任何目录,安装就完成了,为了方便你在命令行使用,你可以将packer命令移动到位于环境变量PATH中定义

阿里云上线镜像平台 小白用户轻松上云

本文讲的是阿里云上线镜像平台 小白用户轻松上云,5月6日,阿里云计算镜像平台正式上线,面向用户提供一键式的云服务器配置服务,帮助"小白用户"轻松上云.该平台将大大降低用户入云门槛,提供云服务器(ECS)的易用性. 在阿里云镜像平台上,服务商可以向用户提供基于云计算产品的工具.镜像和运维服务.镜像是指云服务器(ECS)实例可选择的运行环境模板,一般包括操作系统和预装的软件.镜像能够解决"小白用户"的技术问题,节省繁琐的配置时间,轻松上云. 对许多云计算用户而言,一旦系

四个问题读懂阿里云的镜像仓库,如何为镜像进行全生命周期管理?

一句话介绍镜像仓库 阿里云容器镜像服务提供了安全的镜像托管能力,稳定的国内外镜像构建服务.便捷的团队组织协作功能等,方便用户进行镜像的全生命周期管理. 下面是阿里云容器镜像服务的相关数字: 经过阿里集团双十一验证,支撑10万镜像.2亿下载.近万并发 为什么推出镜像仓库? 容器的使用离不开镜像.以Docker为代表的容器技术,可以将应用打包成标准格式的镜像,并且应用会以容器的方式再度启用运行. 在真正的生产环境中,你会需要大量的镜像,第三方或者是自建的:大量镜像伴随而来的是需要保存.分发使用等管控

阿里云本地FTP怎么连接?通用win7,win8,win8.1,win10

 

阿里云迁云方式大汇总

前不久,阿里云发布了一款迁云神器,即 阿里云迁云工具,使用该迁云神器您可以方便快捷地将服务器迁移至阿里云. 其实,除了迁云神器之外,还有其他迁移服务器至阿里云的途径. 以下分别从迁云方式和服务器来源维度,分析可能的迁云途径. 相信总有一款适合您! 迁云方式维度 迁云方式 适用场景 特点 限制条件 阿里云迁云工具 适用于迁移所有类型的服务器,包括物理服务器.虚拟服务器.其他云平台的云主机等. 免安装 操作简单 全托管 支持数据盘 待迁移服务器必须能访问公网 镜像导入 已经将需要迁移的服务器在线下制

应用迁云之镜像迁移-(4)迁移到阿里云实施流程和实践方法

镜像迁移到阿里云实施流程   1.       镜像迁移可行性评估 当我们选择镜像迁移前需要对被迁移的服务器主机详细信息进行调研按照镜像迁移可行性评估小节中描述的要求及限制进行评估评估是否可行.及是否需要采用镜像迁移的方式来进行迁移. 如果被迁移服务器主机数量规模大.并且大多都带系统盘.网络条件不好的情况建议不要使用镜像迁移方式因为往往镜像文件都比较大在此条件下进行镜像迁移反而会加大迁移的时间及人力成本. 如果被迁移服务器主机中应用配置比较复杂.无人维护.网络条件好我们建议使用镜像迁

云服务器 ECS 镜像迁移:应用迁云之镜像迁移-(4)迁移流程和实践方法

应用迁云之镜像迁移-(4)迁移流程和实践方法 迁移流程 1.镜像迁移可行性评估 当您选择镜像迁移前,需要对被迁移的服务器主机详细信息进行调研,并按照镜像迁移可行性评估小节中描述的要求及限制进行评估.评估是否可行及是否需要采用镜像迁移的方式来进行迁移. 如果被迁移服务器主机数量规模大.并且大多都带系统盘.网络条件不好,建议不要使用镜像迁移的方式.因为镜像文件都比较大,在此条件下进行镜像迁移反而会加大迁移的时间及人力成本. 如果被迁移服务器主机中应用配置比较复杂.无人维护.网络条件好,建议您使用镜像

使用Docker Machine管理阿里云ECS

Docker Machine是一个docker管理工具,它解决了docker的两个问题: docker只能运行在Linux上 docker只能管理运行本机的docker镜像. 本质上docker-machine是一个虚拟机管理工具,它通过创建一个安装好docker的虚拟机(支持VirtualBox,DigitalOcean,EC2等),并设置对应的环境变量(DOCKER_HOST,DOCKER_MACHINE_NAME等),使得本地的docker工具获得透明远程操作虚拟机的能力.从而使本身不支持

Python应用容器化(二)----使用阿里云容器服务部署应用

前言 我们曾经在Python程序容器化(一)中介绍了如何将一个克隆版Twitter程序(retwit-py)容器化,并使用docker-compose运行于宿主机上.对于经典的Web程序,处理前端请求的Web服务通常都是可扩展伸缩的.生产环境中,随着访问量的不断增长,需要部署多个Web服务实例,并通过负载均衡统一对外进行服务.本文将会介绍如何使用阿里云容器服务将retwit-py改造为贴近生产环境的系统并部署. 阿里云容器服务 容器服务是一项高性能可扩展的容器管理服务,支持在一组阿里云云服务器上