制作openstack系统镜像

本文详细介绍了如何在CentOS7环境下搭建KVM+QEMU虚拟化环境,包括环境准备、KVM模块加载、QEMU-IMG使用、云镜像系统盘创建、虚拟机克隆及管理、镜像文件处理等步骤,适用于希望掌握虚拟化技术的读者。
摘要由CSDN通过智能技术生成

1. 环境介绍 

采用环境如下:

主机:CENTOS 7

工具:QEMU+KVM

镜像类型:CentOS7

工具:VNC-Client、系统镜像ISO或者IMG格式等,我这里是CentOS-7-x86_64-Minimal-1810.iso

2. 制作环境前准备工作

               1> 虚拟化环境准备

                     查看是否执行硬件虚拟化,有输出代表支持硬件虚拟化Inter VT-x\ AMD-V,若无输出请关闭主机并打开CPU虚拟化选项

[root@MiWiFi-R3P-srv virtual]# cat /proc/version

Linux version 3.10.0-957.21.3.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Tue Jun 18 16:35:19 UTC 2019

[root@MiWiFi-R3P-srv virtual]#  # cat /proc/cpuinfo | egrep 'vmx|svm'

[root@MiWiFi-R3P-srv virtual]# cat /proc/cpuinfo | egrep 'vmx|svm'  

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 art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu 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 ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear spec_ctrl intel_stibp flush_l1d

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 art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg

               2> 安装KVM+QEMU虚拟化环境

                    安装QEMU+KVM 已经Virt系列工具

# yum install qemu-kvm libvirt-bin kvm qemu virt-manager bridge-utils

//加载kvm相关的模块

# modprobe kvm

# modprobe kvm_intel

# modprobe kvm_amd

//检测各模块是否正常

# kvm-ok  

# lsmod | grep kvm  #显示KVM模块是否加载

# virsh -c qemu:///system list

# adduser root kvm   #添加用户到KVM组

# service libvirtd restart  //启动服务

3. 使用QEMU-IMG生成云镜像的系统盘

使用QEMU-IMG生成云镜像的系统盘,这里选用QCOW2格式的磁盘,给定大小10G

[root@MiWiFi-R3P-srv virtual]# qemu-img create -f qcow2 khcat_call-1.0.0_image.qcow2 10G

Formatting 'khcat_call-1.0.0_image.qcow2'fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off

[root@MiWiFi-R3P-srv virtual]# virt-install --name khcat_call-1.0.0_image \

>    --virt-type kvm \

>    --memory 2048 \

>    --vcpus=2 \

>    --network network=default \

>    --graphics vnc,listen=0.0.0.0 --noautoconsole \

>    --disk khcat_call-1.0.0_image.qcow2,format=qcow2 \

>    --cdrom=CentOS-7-x86_64-Minimal-1810.iso

Starting install...

Domain installation still in progress. You can reconnect to

the console to complete the installation process.

4. 查看镜像文件是否undefine

[root@MiWiFi-R3P-srv virtual]# virsh list

 Id    Name                           State

----------------------------------------------------

 1     khcat_call-1.0.0_image         running

[root@MiWiFi-R3P-srv virtual]#

5. 通过vnc工具查看镜像

[root@MiWiFi-R3P-srv virtual]# virsh vncdisplay khcat_call-1.0.0_image

:0

[root@MiWiFi-R3P-srv virtual]#

6.拷贝镜像(如有需要)

[root@MiWiFi-R3P-srv virtual]# virsh destroy khcat_call-1.0.0_image

Domain khcat_call-1.0.0_image destroyed

[root@MiWiFi-R3P-srv virtual]# virt-clone -o khcat_call-1.0.0_image -n khcat_call-1.0.1_image -f khcat_call-1.0.1_image.qcow2

Allocating 'khcat_call-1.0.1_image.qcow2' | 10 GB 00:00:03

Clone 'khcat_call-1.0.1_image' created successfully.

[root@MiWiFi-R3P-srv virtual]#

7. 启动镜像

[root@MiWiFi-R3P-srv virtual]# virsh start khcat_call-1.0.1_image

Domain khcat_call-1.0.1_image started

[root@MiWiFi-R3P-srv virtual]# virsh list

 Id    Name                           State

----------------------------------------------------

 5     khcat_call-1.0.1_image         running

[root@MiWiFi-R3P-srv virtual]#

8. 通过vnc工具进入镜像,安装所需软件

1. 关闭防火墙  配置网络-DHCP

2. 安装cloud-init

3. 配置JDK 配置环境变量

4. 安装keepalievd

5. 安装mysql 初始密码******

6. 安装nginx

7. 安装ftp

8. 安装watchdog

9. 安装tcpdump

10.安装sipp

11. 部署服务 添加为系统服务/开机启动

9. 关闭虚拟主机, 清除虚拟机内部的MAC地址信息

[root@localhost virtual]# virsh shutdown khsecp-1.1.7_image

Domain khsecp-1.1.7_image is being shutdown

[root@localhost virtual]# virt-sysprep -d khsecp-1.1.7_image

[   0.0] Examining the guest ...

[   2.6] Performing "abrt-data" ...

[   2.6] Performing "backup-files" ...

[   3.6] Performing "bash-history" ...

[   3.6] Performing "blkid-tab" ...

[   3.7] Performing "crash-data" ...

[   3.7] Performing "cron-spool" ...

[   3.7] Performing "dhcp-client-state" ...

[   3.7] Performing "dhcp-server-state" ...

[   3.7] Performing "dovecot-data" ...

[   3.7] Performing "logfiles" ...

[   3.7] Performing "machine-id" ...

[   3.7] Performing "mail-spool" ...

[   3.7] Performing "net-hostname" ...

[   3.7] Performing "net-hwaddr" ...

[   3.7] Performing "pacct-log" ...

[   3.8] Performing "package-manager-cache" ...

[   3.8] Performing "pam-data" ...

[   3.8] Performing "passwd-backups" ...

[   3.8] Performing "puppet-data-log" ...

[   3.8] Performing "rh-subscription-manager" ...

[   3.8] Performing "rhn-systemid" ...

[   3.8] Performing "rpm-db" ...

[   3.8] Performing "samba-db-log" ...

[   3.8] Performing "script" ...

[   3.8] Performing "smolt-uuid" ...

[   3.8] Performing "ssh-hostkeys" ...

[   3.8] Performing "ssh-userdir" ...

[   3.8] Performing "sssd-db-log" ...

[   3.8] Performing "tmp-files" ...

[   3.9] Performing "udev-persistent-net" ...

[   3.9] Performing "utmp" ...

[   3.9] Performing "yum-uuid" ...

[   3.9] Performing "customize" ...

[   3.9] Setting a random seed

[   3.9] Setting the machine ID in /etc/machine-id

[   4.0] Performing "lvm-uuids" ...

10. 虚拟主机脱离libvirt管理

[root@localhost virtual]# virsh undefine khsecp-1.1.7_image

Domain khsecp-1.1.7_image has been undefined

11. 消除映像空洞,    指定临时目录保证剩余空间50G以上

[root@localhost virtual]# export TEMP=/home/tmp

[root@localhost virtual]# export TMPDIR=/home/tmp

[root@localhost virtual]# virt-sparsify -x khsecp-1.1.7_image.qcow2 --convert qcow2 khsecp-1.1.7_image.tmp

libguestfs: trace: disk_virtual_size "/home/virtual/khsecp-1.1.6_image.qcow2"

libguestfs: trace: disk_virtual_size = 53687091200

[   0.0] Create overlay file in /home/tmp to protect source disk

libguestfs: trace: disk_create "/home/tmp/sparsify5122af.qcow2" "qcow2" -1 "backingfile:/home/virtual/khsecp-1.1.6_image.qcow2" "compat:1.1"

libguestfs: trace: disk_create = 0

[   0.0] Examine source disk

libguestfs: trace: add_drive "/home/tmp/sparsify5122af.qcow2" "readonly:false" "format:qcow2" "cachemode:unsafe"

libguestfs: trace: add_drive = 0

libguestfs: trace: launch

libguestfs: trace: max_disks

libguestfs: trace: max_disks = 255

libguestfs: trace: get_tmpdir

libguestfs: trace: get_tmpdir = "/home/tmp"

libguestfs: trace: get_backend_setting "force_tcg"

libguestfs: trace: get_backend_setting = NULL (error)

libguestfs: trace: get_backend_setting "internal_libvirt_label"

libguestfs: trace: get_backend_setting = NULL (error)

libguestfs: trace: get_backend_setting "internal_libvirt_imagelabel"

libguestfs: trace: get_backend_setting = NULL (error)

libguestfs: trace: get_backend_setting "internal_libvirt_norelabel_disks"

libguestfs: trace: get_backend_setting = NULL (error)

libguestfs: trace: get_cachedir

libguestfs: trace: get_cachedir = "/home/tmp"

libguestfs: trace: disk_create "/home/tmp/libguestfsHLN3zr/overlay1.qcow2" "qcow2" -1 "backingfile:/home/tmp/.guestfs-0/appliance.d/root" "backingformat:raw"

libguestfs: trace: disk_create = 0

libguestfs: trace: get_sockdir

libguestfs: trace: get_sockdir = "/tmp"

libguestfs: trace: get_cachedir

libguestfs: trace: get_cachedir = "/home/tmp"

libguestfs: trace: launch = 0

libguestfs: trace: c_pointer

libguestfs: trace: c_pointer = 19508848

libguestfs: trace: list_partitions

libguestfs: trace: list_partitions = ["/dev/sda1""/dev/sda2"]

libguestfs: trace: vfs_type "/dev/sda1"

libguestfs: trace: vfs_type = "xfs"

libguestfs: trace: vfs_type "/dev/sda2"

libguestfs: trace: vfs_type = "LVM2_member"

libguestfs: trace: list_filesystems

libguestfs: trace: list_filesystems = ["/dev/sda1""xfs""/dev/bel/root""ext4""/dev/bel/swap""swap"]

libguestfs: trace: lvs_full

libguestfs: trace: lvs_full = <struct guestfs_lvm_lv_list(2) = [0]{lv_name: root, lv_uuid: IO7SNlury4VRr6MSk3ntbvvc3qqXwRhV, lv_attr: -wi-a-----, lv_major: -1, lv_minor: -1, lv_kernel_major: 252, lv_kernel_minor: 0, lv_size: 50457477120, seg_count: 1, origin: , snap_percent: , copy_percent: , move_pv: , lv_tags: , mirror_log: , modules: , } [1]{lv_name: swap, lv_uuid: e5NG6S7iM67AR6KLzI6jknonZnTIpFjA, lv_attr: -wi-a-----, lv_major: -1, lv_minor: -1, lv_kernel_major: 252, lv_kernel_minor: 1, lv_size: 2147483648, seg_count: 1, origin: , snap_percent: , copy_percent: , move_pv: , lv_tags: , mirror_log: , modules: , }>

libguestfs: trace: canonical_device_name "/dev/bel/root"

libguestfs: trace: canonical_device_name = "/dev/bel/root"

libguestfs: trace: is_lv "/dev/bel/root"

libguestfs: trace: is_lv = 1

libguestfs: trace: lvuuid "/dev/bel/root"

libguestfs: trace: lvuuid = "IO7SNl-ury4-VRr6-MSk3-ntbv-vc3q-qXwRhV"

libguestfs: trace: mount "/dev/bel/root" "/"

libguestfs: trace: mount = 0

libguestfs: trace: statvfs "/"

libguestfs: trace: statvfs = <struct guestfs_statvfs = bsize: 4096, frsize: 4096, blocks: 12092597, bfree: 11104745, bavail: 10484713, files: 3080192, ffree: 2995470, favail: 2995470, fsid: -3830096993133741901, flag: 4096, namemax: 255, >

[   1.6] Fill free space in /dev/bel/root with zero

libguestfs: trace: zero_free_space "/"

 100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00

libguestfs: trace: zero_free_space = 0

libguestfs: trace: umount_all

libguestfs: trace: umount_all = 0

libguestfs: trace: canonical_device_name "/dev/bel/swap"

libguestfs: trace: canonical_device_name = "/dev/bel/swap"

libguestfs: trace: is_lv "/dev/bel/swap"

libguestfs: trace: is_lv = 1

libguestfs: trace: lvuuid "/dev/bel/swap"

libguestfs: trace: lvuuid = "e5NG6S-7iM6-7AR6-KLzI-6jkn-onZn-TIpFjA"

libguestfs: trace: mount "/dev/bel/swap" "/"

libguestfs: trace: mount = -1 (error)

libguestfs: trace: pread_device "/dev/bel/swap" 10 4086

libguestfs: trace: pread_device = "SWAPSPACE2"

[ 153.0] Clearing Linux swap on /dev/bel/swap

libguestfs: trace: pread_device "/dev/bel/swap" 4096 0

libguestfs: trace: pread_device = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"<truncated, original size 4096 bytes>

libguestfs: trace: zero_device "/dev/bel/swap"

libguestfs: trace: zero_device = 0

libguestfs: trace: pwrite_device "/dev/bel/swap" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"<truncated, original size 4096 bytes> 0

libguestfs: trace: pwrite_device = 4096

libguestfs: trace: umount_all

libguestfs: trace: umount_all = 0

libguestfs: trace: canonical_device_name "/dev/sda1"

libguestfs: trace: canonical_device_name = "/dev/sda1"

libguestfs: trace: is_lv "/dev/sda1"

libguestfs: trace: is_lv = 0

libguestfs: trace: mount "/dev/sda1" "/"

libguestfs: trace: mount = 0

libguestfs: trace: statvfs "/"

libguestfs: trace: statvfs = <struct guestfs_statvfs = bsize: 4096, frsize: 4096, blocks: 259584, bfree: 201438, bavail: 201438, files: 524288, ffree: 523949, favail: 523949, fsid: 2049, flag: 4096, namemax: 255, >

[ 154.5] Fill free space in /dev/sda1 with zero

libguestfs: trace: zero_free_space "/"

 100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ --:--

libguestfs: trace: zero_free_space = 0

libguestfs: trace: umount_all

libguestfs: trace: umount_all = 0

libguestfs: trace: vgs

libguestfs: trace: vgs = ["bel"]

libguestfs: trace: lvcreate_free "qrpje35o" "bel" 100

libguestfs: trace: lvcreate_free = 0

[ 157.5] Fill free space in volgroup bel with zero

libguestfs: trace: zero_device "/dev/bel/qrpje35o"

libguestfs: trace: zero_device = 0

libguestfs: trace: sync

libguestfs: trace: sync = 0

libguestfs: trace: lvremove "/dev/bel/qrpje35o"

libguestfs: trace: lvremove = 0

libguestfs: trace: shutdown

libguestfs: trace: internal_autosync

libguestfs: trace: internal_autosync = 0

libguestfs: trace: shutdown = 0

libguestfs: trace: close

[ 158.2] Copy to destination and make sparse

[ 304.7] Sparsify operation completed with no errors.

virt-sparsify: Before deleting the old disk, carefully check that the

target disk boots and works correctly.

libguestfs: trace: close

libguestfs: trace: close

12. 压缩映像

[root@localhost virtual]# qemu-img convert -c -O qcow2 khsecp-1.1.6_image.tmp khsecp-1.1.6_image.img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值