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
CentOS7镜像¶
*以下为创建CentOS7镜像的流程:*
1.下载一个ISO镜像文件
2.创建虚拟机磁盘
3.virt-install安装虚拟机
(1)不使用swap分区
(2)只分一个根分区
(3)不使用LVM动态分区
(4)设置镜像的网卡模式为
4.安装完毕后,对系统进行初始化
(1)关闭selinux,iptables
(2)修改网卡配置,去掉UUID MAC等
(3)安装系统必备的软件与工具如:zabbix-agent
*如果你使用的qcow2的虚拟硬盘创建虚拟机需要注意的地方:*
创建一个qcow2的虚拟磁盘
创建虚拟机的方式
*如果你创建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
5.进入系统安装界面,开始安装系统,选择英文语言
6.选择系统分区的模块,开始进行系统分区
7.按照要求不划分swap分区
8.开始进行安装
9.将root密码设置为123456即可
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连接虚拟机
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工具连接查看是否还原状态
(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
------------------------------------------------------------