跳转至

03-kvm镜像管理

03-kvm镜像管理

KVM虚拟机镜像管理

虚拟磁盘及镜像

由于在一开始创建了虚拟磁盘,并命名为CentOS-7.1-x86_64.raw,这就是虚拟机的镜像喽。

[root@chuck ~]# cd /opt/
[root@chuck opt]# ls
CentOS-7.1-x86_64.iso  CentOS-7.1-x86_64.raw  rh

虚拟机镜像制作

CentOS6镜像

一:镜像制作原则:

1.分区的时候,只分一个/根分区,并不需要swap分区,由于虚拟机的磁盘性能就不好,如果设置了swap分区,当swap工作的时候,性能会更差。例如阿里云主机,就没有交换分区。

2.关闭selinux,关闭iptables

3.安装基础软件的包:net-tools lrzsz screen tree vim wget

二:镜像制作步骤:

(1)镜像制作需要删除网卡(eth0)中的UUID,如果有udev(/etc/udev/rules.d/70-persistent-ipoib.rules)的规则也要删除

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
UUID=d027ee0c-bc78-457b-b983-e94cf65a863e
HWADDR=52:54:00:15:12:b2
[root@localhost ~]# > /etc/udev/rules.d/70-persistent-net.rules

(2)首先为虚拟机做快照并关闭虚拟机

[root@m01 ~]# virsh shutdown CentOS-6-x86_64
Domain CentOS-6-x86_64 is being shutdown
[root@m01 ~]# virsh list

(3)导出虚拟机的配置文件

[root@m01 ~]# virsh dumpxml CentOS-6-x86_64 >CentOS-6-x86_64-new.xml
[root@m01 ~]# ll CentOS-6-x86_64-new.xml

(4)将虚拟机的虚拟硬盘拷贝一份

[root@m01 ~]# cp /opt/CentOS-6.7-x86_64.raw /opt/CentOS-6.7-x86_64-new.raw
[root@m01 opt]# ll -h
-rw-r--r-- 1 root root 10G Aug 14 19:01 CentOS-6.7-x86_64-new.raw
-rw-r--r-- 1 root root 10G Aug 14 18:54 CentOS-6.7-x86_64.raw

(5)修改导出的虚拟机的配置文件

[root@m01 ~]# cp CentOS-6-x86_64-new.xml CentOS-6-x86_64-new.xml.bak
[root@m01 ~]# vim CentOS-6-x86_64-new.xml
[root@m01 ~]# diff CentOS-6-x86_64-new.xml CentOS-6-x86_64-new.xml.bak 
3c3
<   <uuid>4f279d6c-0bb4-0067-728a-547325b7226d</uuid>
---
>   <uuid>4f279d6c-0bb4-0066-728a-547325b7226d</uuid>
24c24
<       <source file='/opt/CentOS-6.7-x86_64-new.raw'/>
---
>       <source file='/opt/CentOS-6.7-x86_64.raw'/>
53c53
<       <mac address='52:54:0a:15:12:b2'/>
---
>       <mac address='52:54:00:15:12:b2'/>

(6)将虚拟机配置文件导入虚拟机

[root@m01 ~]# virsh define CentOS-6-x86_64-new.xml

image-20211031174109533

CentOS7镜像

*以下为创建CentOS7镜像的流程:*

1.下载一个ISO镜像文件

2.创建虚拟机磁盘

3.virt-install安装虚拟机

(1)不使用swap分区

(2)只分一个根分区

(3)不使用LVM动态分区

(4)设置镜像的网卡模式为

img

4.安装完毕后,对系统进行初始化

(1)关闭selinux,iptables

(2)修改网卡配置,去掉UUID MAC等

(3)安装系统必备的软件与工具如:zabbix-agent

*如果你使用的qcow2的虚拟硬盘创建虚拟机需要注意的地方:*

创建一个qcow2的虚拟磁盘

image-20211031174129720

创建虚拟机的方式

img

*如果你创建windows镜像的时候需要注意的内容*

OpenStack手动制作CentOS 7 KVM镜像

https://www.unixhot.com/article/71

virtIO驱动官网地址:http://fedoraproject.org/wiki/Windows_Virtio_Drivers

virtIO驱动下载地址:https://fedorapeople.org/groups/virt/virtio-win/direct

1.首先需要将iso镜像上传到/tmp目录下,如下图所示

[root@linux-node1 tmp]# ll
-rw-r--r-- 1 root root 666894336 Dec 13 21:11 CentOS-7-x86_64-Minimal-1503-01.iso

2.然后在/tmp目录下创建一个qcow2格式的虚拟磁盘

qemu-img create -f qcow2 /tmp/CentOS-7.1-x86_64.qcow2 20G

3.开始创建虚拟机

virt-install --virt-type kvm --name CentOS-7.1-x86_64 \
--ram 2048 --disk /tmp/CentOS-7.1-x86_64.qcow2 \
--network network=default \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--os-type=linux --os-variant=rhel7 \
--cdrom=/tmp/CentOS-7-x86_64-Minimal-1503-01.iso

4.使用VNC客户端连接,开始安装系统

点击 Tab,打开 kernel 启动选项,增加 net.ifnames=0 biosdevname=0 回车即可安装

安装CentOS7,在启动前修改内核让网卡为eth0,如图1-2

img

5.进入系统安装界面,开始安装系统,选择英文语言

img

6.选择系统分区的模块,开始进行系统分区

img

7.按照要求不划分swap分区

img

8.开始进行安装

img

9.将root密码设置为123456即可

img

10.安装系统完毕以后,重启系统,然后重新启动虚拟机

virsh start CentOS-7.1-x86_64

11.以下为快速部署脚本:建议所有系统安装如下教程进行基础系统的优化

[root@node1 ~]# vi system_clear.sh
#-------------------------------------------------------------------
systemctl disable firewalld && systemctl stop firewalld
systemctl disable NetworkManager && systemctl stop NetworkManager
systemctl stop iptables && systemctl enable iptables
#-------------------------------------------------------------------
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config && grep 'SELINUX=disabled' /etc/selinux/config
setenforce 0
getenforce
#-------------------------------------------------------------------
\cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime       
echo '#Time synchronization system-Chris-2016-12-6' >>/var/spool/cron/root
echo '*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com >/dev/null 2>&1' >>/var/spool/cron/root
#-------------------------------------------------------------------
ulimit -HSn 65535
echo " ulimit -HSn 65535" >>/etc/rc.local
#-------------------------------------------------------------------
yum -y install wget
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install -y net-tools vim lrzsz tree screen lsof tcpdump
#-------------------------------------------------------------------

12.镜像制作需要删除网卡(eth0)中的UUID,如果有udev(/etc/udev/rules.d/70-persistent-ipoib.rules)的规则也要删除

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
UUID=d027ee0c-bc78-457b-b983-e94cf65a863e
HWADDR=52:54:00:15:12:b2
[root@localhost ~]# > /etc/udev/rules.d/70-persistent-net.rules

13.安装 ACPI 服务启动后,你可能需要手动配置你的虚拟机的网络。为了让虚拟化层能重启和关闭虚拟机,必须在虚拟机内安装并运行 acpid 服务。在 CentOS虚拟机内运行以下命令安装 ACPI 服务并配置为系统启动时自动启动。

yum install -y acpid
systemctl enable acpid

14.配置获取metadata虚拟机在启动的时候需要和元数据服务交互以便完成几个任务,例如,虚拟机必须获取ssh公钥以及运行用户数据脚本。确保虚拟机能完成这些任务,使用以下几个方法之一:安装从 Ubuntu cloud-init 移植过来的cloud-init RPM包,这也是推荐的方法。

修改 /etc/rc.local 文件从元数据服务获取信息。使用 cloud-init 获取公钥cloud-init 包自动从元数据服务获取公钥并保存到账户,你可以在 CentOS虚拟机添加 EPEL 安装源来安装 cloud-init 包。

rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
yum install -y cloud-init

其它标准化操作:可以把所有虚拟机都需要进行的设置在镜像这一级全部设置完毕。例如:比如关闭SElinux、firewalld、postfix。以及设置内网DNS,安装相关的Agent等。收尾工作最后,你可以关闭虚拟机了,如果以后不在需要该虚拟机也可以直接删除。建议是保留,方便后期进行虚拟机镜像的定制。

15.首先为虚拟机做快照并关闭虚拟机

[root@m01 ~]# virsh shutdown CentOS-7.1-x86_64
Domain CentOS-6-x86_64 is being shutdown
[root@m01 ~]# virsh list --all

16.然后将虚拟磁盘复制出来

sz -y /tmp/CentOS-7.1-x86_64.qcow2

17.上传镜像到Glance

[root@10-0-192-13 tmp]# source /root/admin-openrc.sh 
[root@10-0-192-13 tmp]# glance image-list
glance image-create --name "CentOS-7.1-x86_64" --disk-format qcow2 --container-format bare --file /tmp/CentOS-7.1-x86_64.qcow2 --visibility public --progress

删除镜像的方法:

glance image-delete 71031812-b161-477a-ad41-99c1b92ac71e

虚拟磁盘格式转换

(1)QEMU 使用的镜像文件:qcow2 与 raw

http://www.ibm.com/developerworks/cn/linux/1409_qiaoly_qemuimgages/index.html

(2)qcow2、raw、vmdk等镜像格式

http://www.cnblogs.com/feisky/archive/2012/07/03/2575167.html

(1)转换虚拟机虚拟硬盘的格式,因为qcow2格式的虚拟磁盘格式比raw的小

[root@m01 ~]# cd /opt/
[root@m01 opt]# qemu-img convert -c -f raw -O qcow2 CentOS-6.7-x86_64.raw CentOS-6.7-x86_64.qcow2
[root@m01 opt]# ll -h CentOS-6.7-x86_64.qcow2
-rw-r--r-- 1 root root 686M Aug 14 19:14 CentOS-6.7-x86_64.qcow2

(2)需要修改虚拟机的配置文件

[root@m01 ~]# virsh edit CentOS-6-x86_64
    23       <driver name='qemu' type='qcow2' cache='none'/>
     24       <source file='/opt/CentOS-6.7-x86_64.qcow2'/> 

(3)当我们修改完成以后启动虚拟机测试

[root@m01 ~]# virsh start CentOS-6-x86_64
[root@m01 ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 3     CentOS-6-x86_64                running

(4)使用vnc连接虚拟机

img

KVM虚拟机快照

1.现在我们就可以给虚拟机做快照啦

[root@m01 ~]# source /etc/sysconfig/i18n        #调账字符集
[root@m01 ~]# virsh snapshot-create-as CentOS-6-x86_64 CentOS-6-x86_64_shot1        
#为虚拟机创建一个快照(CentOS6)
[root@m01 ~]# virsh snapshot-create-as CentOS-7.1-x86_64 CentOS-7.1-x86_64_shot1        
#为虚拟机创建一个快照(CentOS7)

2.查看虚拟机创建的快照

[root@m01 ~]# virsh snapshot-list CentOS-7.1-x86_64 #查看虚拟机创建的快照
 Name                 Creation Time             State
------------------------------------------------------------
 CentOS-6-x86_64_shot1 2016-08-14 19:21:33 +0800 running
[root@m01 ~]# virsh snapshot-info CentOS-6-x86_64 CentOS-6-x86_64_shot1 
#查看快照的详细信息  (CentOS6)
[root@linux-node1 tmp]# virsh snapshot-info CentOS-7.1-x86_64 CentOS-7.1-x86_64_shot1
#查看快照的详细信息  (CentOS7)
Name:           CentOS-6-x86_64_shot1
Domain:         CentOS-6-x86_64
Current:        yes
State:          running
Location:       internal
Parent:         -
Children:       0
Descendants:    0
Metadata:       yes

3.现在我们来做个测试,将虚拟机的状态破坏,首先启动虚拟机

virsh start CentOS-6-x86_64
virsh start CentOS-7.1-x86_64   #CentOS7

4.进入系统执行

rm -fr /*           #破坏系统文件

5.现在停止虚拟机

[root@m01 ~]# virsh shutdown CentOS-7.1-x86_64      #关闭虚拟机命令
[root@m01 ~]# virsh destroy CentOS-7.1-x86_64       #强制关闭虚拟机命令
Domain CentOS-6-x86_64 destroyed
[root@m01 ~]# virsh list --all                          #查看虚拟机是否关闭       
 Id    Name                           State
----------------------------------------------------
 -     CentOS-6-x86_64                shut off

(6)还原虚拟机快照的方法

[root@m01 ~]# virsh snapshot-revert CentOS-6-x86_64 CentOS-6-x86_64_shot1

现在开启虚拟机进入系统查看是否还原状态

[root@m01 ~]# virsh start CentOS-6-x86_64
error: Domain is already active
[root@m01 ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 4     CentOS-6-x86_64                running

使用vnc工具连接查看是否还原状态

image-20211031174624090

(7)删除快照的方法

[root@m01 ~]# virsh snapshot-delete CentOS-6-x86_64 CentOS-6-x86_64_shot1
Domain snapshot CentOS-6-x86_64_shot1 deleted 
[root@m01 ~]# virsh snapshot-list CentOS-6-x86_64   
Name                 Creation Time             State
------------------------------------------------------------