使用 Packer 创建本地 linux 镜像并导入到金山云

最近更新时间:2020-06-04 10:38:58

Packer工具

Packer 是一个跨平台的镜像定义工具,简单好用,可以运行在目前主流的操作系统上(如Linux、Windows和MacOS)。

Packer 是 HashiCorp 推出的一款镜像工具,通过简易的方式自动化构建镜像。更多详情,请访问 Packer 官网。

背景

本文举例描述您通过使用 Packer 如何制作本地镜像,并上传导入本地镜像到您的金山云账号成为自定义镜像。

本文示例步骤使用了如下版本平台。

服务器操作系统: Ubuntu 18.04 待制作的镜像: CentOS 6.10

前提条件

已创建 AccessKey。 已经开通 KS3 权限。开通ks3权限 已授权 KEC 官方服务账号可以访问您的 ks3 的权限。

使用示例

1.确认是否支持 KVM。

执行 egrep "(svm|vmx)" /proc/cpuinfo 命令,查看您的正在使用的本地服务器是否支持 KVM。 返回如下信息时,表示当前服务器支持 KVM。

flags:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx 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 cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts md_clear flush_l1d

2.配置本地服务器安装 KVM

如果您的本地服务器支持KVM,依次执行以下命令安装 KVM。

sudo apt-get install qemu-kvm qemu libvirt-bin bridge-utils virt-manager virt-viewer  #安装 KVM、libvirt,bridge等相关控件

如果可以通过 GUI 工具 virt-manager 创建出虚拟机,表示您已经成功安装 KVM。

3.获取 Packer。

参考 Packer 创建自定义镜像 步骤一:安装Packer。

4.定义 Packer 镜像模板。

①创建目录

mkdir -p http/centos-6.10  #创建目录

②编写 CentOS kickstart 文件 http/centos-6.10/anaconda-ks.cfg。

以下提供一个参考示例

zerombr
install
cdrom
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --hostname=localhost.localdomain
rootpw  --iscrypted $6$t/7TPCm/ZZFTCETi$LqgPgDk7C4bC39ceC0la1o92BAIoBMlhYhJxvfO1ttr8S3uiqLnRF8.EAcO48p3QVlZ1mssLN3lLufHvgVJ7Z1  # 密码 kingsoft
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=vda --append="crashkernel=auto console=ttyS0 console=tty0"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
#clearpart --linux --drives=vda

#part / --fstype=ext4 --grow --asprimary --size=200

#repo --name="CentOS"  --baseurl=cdrom:sr0 --cost=100

# Partition clearing information
clearpart --none --initlabel
# Disk partitioning information
part / --fstype="ext4" --ondisk=vda --size=20479  #系统盘 20G

%packages
@base
@core
@development
@server-policy
@workstation-policy
wget
telnet
sysstat
procps
unzip
tar
iptraf
acpid
vim
lvm2
nfs-utils
%end

#
echo "S0:12345:respawn:/sbin/agetty ttyS0 115200" >> /etc/inittab

chkconfig --level 2345 iptables off
chkconfig --level 2345 ip6tables off

cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=dhcp
EOF

#
echo "ttyS0" >> /etc/securetty

rm /etc/udev/rules.d/70-persistent-net.rules
rm /lib/udev/rules.d/75-persistent-net-generator.rules

sed -i 's/start/\#start/g' /etc/init/control-alt-delete.conf

%end

reboot

③编辑 Packer 模板 CentOS-6.10-x86_64-iso.json。

以下提供一个参考示例

{
  "variables": {
    "ks_path": "centos-6.10/anaconda-ks.cfg"
  },
  "builders":
  [
    {
      "type": "qemu",
      "qemu_binary": "/usr/bin/qemu-system-x86_64",
      "iso_url": "CentOS-6.10-x86_64-bin-DVD1.iso",
      "iso_checksum": "8ffcc065c3110e6fa0144cb85e4bb4bc",
      "iso_checksum_type": "md5",
      "vnc_bind_address": "0.0.0.0",
      "ssh_username": "root",
      "ssh_password": "kingsoft",
      "ssh_timeout": "8m",
      "output_directory": "output_image",
      "vm_name": "centos_6.10_x86_64.img.org",
      "disk_size": "20480",
      "format": "qcow2",
      "accelerator": "kvm",
      "http_directory": "http",
      "boot_wait": "10s",
      "boot_command": [
        "<tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/{{user `ks_path`}}<enter><wait>"
      ],
      "net_device": "virtio-net",
      "qemuargs": [
        ["-m", "8192"],
        ["-smp", "8"]
      ]
    }
  ],
  "post-processors":[
    {
      "type": "kscloud-import",
      "access_key": "xxxx",
      "secret_key": "xxxx",
      "ks3_region": "BEIJING",
      "ks3_endpoint": "ks3-cn-beijing.ksyun.com",
      "ks3_bucket_name": "helloworld-test-ks3sdk",
      "ks3_key_name": "hello_test_image",
      "upload_file_path": "output_image/centos_6.10_x86_64.img.org",
      "kec_region": "cn-beijing-6",
      "image_name": "test-import-image",
      "image_architecture": "x86_64",
      "image_platform": "centos-6",
      "image_format": "qcow2"
    }
  ]
}

5.制作镜像

执行如下命令即可创建并导入本地镜像。

packer build CentOS-6.10-x86_64-iso.json

运行中的程序会显示信息

qemu output will be in this color.
==> qemu: Retrieving ISO
==> qemu: Trying CentOS-6.10-x86_64-bin-DVD1.iso
.................
==> qemu: Converting hard drive...
==> qemu: Running post-processor: kscloud-import
==> qemu (kscloud-import): Image file output_image/centos_6.10_x86_64.img.org has been uploaded to KS3
==> qemu (kscloud-import): Create kec image success
==> qemu (kscloud-import): Region: cn-beijing-6, ImageId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
==> qemu (kscloud-import): KEC RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
Build 'qemu' finished.

示例讲解

以上实例中使用到了配置器中 Post-Processor 模块,该模块可以自动化上传导入本地镜像到 KEC 平台。

Post-Processor 模块用到的参数,具体说明如下: 字段 类型 概念(作用) 必要性
access_key string https://docs.ksyun.com/documents/1377 必要
secret_key string https://docs.ksyun.com/documents/1377 必要
ks3_region string 文件上传的目的 ks3 地区 (https://docs.ksyun.com/documents/6761 必要
ks3_endpoint string 文件上传的目的ks3的访问域名(https://docs.ksyun.com/documents/6761 必要
ks3_bucket_name string 文件上传的目的 ks3 bucket 地址 必要
ks3_key_name string 文件上传后保存的文件名 非必要(支持随机生成)
upload_file_path string 要上传的文件(镜像文件) 非必要(支持自动获取生成镜像的目录中后缀为 raw、qcow、qcow2、vmdk文件)
kec_region string 镜像要导入的地区(https://docs.ksyun.com/documents/5510 好像没有人维护这个) 必要
image_name string 导入镜像任务成功后,镜像名 必要
image_architecture string 系统架构(有效值:i386,x86_64) 必要
image_platform string 操作系统版本 (有效值:https://docs.ksyun.com/documents/5490 Platform部分) 必要
image_format string 镜像类型(有效值:raw、vhd、qcow2、vmdk) 必要

金山云,开启您的云计算之旅

免费注册