通过 KVM 安装虚 Centos 和 Windwos 2008 R2_x86_64 操作系统步骤并将磁盘文件作为镜像上传到 openstack glance,作为批量创建虚拟机的镜像文件,其中 windowsn 2008 安装 virtio 半虚拟化驱动,以实现网络 IO 和磁盘 IO 的半虚拟化提升速度,Centos 7 默认即支持半虚拟化,不需要安装驱动,Virtio 最初由澳大利亚的一个天才级程序员 Rusty Russell 编写,是一个在 hypervisor 之上的抽象 API 接口,让客户机知道自己运行在虚拟化环境中,从而与hypervisor 根据 virtio 标准协作,从而在客户机中达到更好的性能(特别是 I/O 性能),目前,有不少虚拟机都采用了 virtio 半虚拟化驱动来提高性能。具体过程如下:

1、网络环境准备:

#因镜像虚拟机需要连接外网安装 rpm 包,需要网络桥接,因此将 bondX 桥接到 brX:
[root@linux-image ~]# hostname
linux-image.exmaple.com
[root@linux-host5 ~]# yum install bridge-utils –y #安装网卡桥接工具
#1:bond0 配置: [root@linux-image ~]# cd /etc/sysconfig/network-scripts/
[root@linux-image network-scripts]# vim ifcfg-bond0
BOOTPROTO=static
NAME=bond0
DEVICE=bond0
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=100" #指定绑定类型为 1 及链路状态监测间隔时间
BRIDGE=br0 #桥接到 br0

#2:br0 配置: [root@linux-image network-scripts]# cat /opt/ifcfg-br0 
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.10.50
NETMASK=255.255.255.0
GATEWAY=192.168.10.2
DNS1=202.106.0.20

#3:bond1 配置: 
[root@linux-image network-scripts]# cat ifcfg-bond1 
BOOTPROTO=static
NAME=bond1
DEVICE=bond1
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=100" #指定绑定类型为 1 及链路状态监测间隔时间
BRIDGE=br1

#4:br1 配置: 
[root@linux-image network-scripts]# cat ifcfg-br1
TYPE=Bridge
BOOTPROTO=static
NAME=br1
DEVICE=br1
ONBOOT=yes
IPADDR=192.168.20.50
NETMASK=255.255.255.0

#5:网卡状态:
#6:验证内外网:

#7:安装图形桌面支持:
#后期会调用图形配置镜像网卡等。
[root@linux-image ~]# yum groupinstall "GNOME Desktop" –y

#8:重启系统:
#重启之后确保以上各网卡通信正常,然后才进行下一步镜像制作。

2、Centos 7.2 镜像制作:

做镜像就是在宿主机最小化安装系统并配置优化,做完配置之后将虚拟机关机,然后将虚拟机磁盘文件上传至 glance 即可启动虚拟机。

#1:安装基础环境:
[root@linux-host1 ~]# yum install -y qemu-kvm qemu-kvm-tools libvirt virt-manager virt-install
#2:创建磁盘:类型为 qcow2,跟使用量动态增长,也可以是 raw 格式,openstack 支持很多类型的磁盘格
式。
[root@linux-image ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/CentOS-7-x86_64.qcow2 10G 

#3:验证磁盘文件:
[root@linux-image ~]# file /var/lib/libvirt/images/CentOS-7-x86_64.qcow2 
/var/lib/libvirt/images/CentOS-7-x86_64.qcow2: QEMU QCOW Image (v3), 10737418240 bytes
[root@linux-image ~]# ll -h /var/lib/libvirt/images/CentOS-7-x86_64.qcow2 
-rw-r--r-- 1 root root 193K Sep 28 09:21 /var/lib/libvirt/images/CentOS-7-x86_64.qcow2

#4:下载 ISO 镜像并安装:
[root@linux-image ~]# virt-install --virt-type kvm --name CentOS7-x86_64 --ram 1024 --cdrom=/opt/CentOS-7-x86_64-Minimal-1511.iso --disk path=/var/lib/libvirt/images/CentOS7-x86_64.qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

#5:验证端口:
#6:使用 VNC 客户端连接虚拟机端口:
#7:连接后状态如下:
#8:传递内核参数重命名网卡:
#9:语言选择:
#10:磁盘分区:
#11:时区及语言等:
#12:安装过程中:

#13:添加一个网卡:虚拟机安装完成系统重启之后给虚拟机新添加一块网卡,最终实现镜像虚拟机有两块网卡以实现内外双网通信。
#13.1:打开控制台: 
[root@linux-image images]# virt-manager
#13.2:进入虚拟机控制界面: 
#13.3:点击添加硬件: 
#13.4:添加网卡: 
#13.5:最终状态: 

#14:配置虚拟机网络:
#eth0 配置和验证: 
#eth1 配置和验证:

#15:更改 yum 源:
[root@bogon ~]# yum install wget –y #配置 yum 源
[root@bogon ~]# cd /etc/yum.repos.d/
[root@bogon yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@bogon yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#安装常用命令
[root@bogon yum.repos.d]# yum install -y net-tools vim lrzsz tree screen lsof ntpdate telnet acpid
#关闭防火墙及 selinux
[root@bogon yum.repos.d]# systemctl disable NetworkManager
[root@bogon yum.repos.d]# systemctl disable firewalld
[root@bogon yum.repos.d]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' 
/etc/selinux/config
#更改主机名:
[root@bogon yum.repos.d]# cat /etc/hostname 
bj-test.com
#更改 ssh 端口:
[root@bogon yum.repos.d]# sed -i 's/\#Port 22/Port 2021/g' /etc/ssh/sshd_config
#免密钥登录,控制端的公钥,注意空格和换行符,最好在文本编辑器里面验证一下然后再
#配置在镜像虚拟机:
[root@bogon ~]# ssh-keygen
[root@bogon .ssh]# vim ~/.ssh/authorized_keys
ssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAABAQCuQT3Vph7zxxAAzWSOzc0PAAgDpMCci7300NPYXwLXeF
U39jMtlt1AsgQQqdUDV/Q/Ii0+z6Mgh29uNXWlfEIRiR1/44M2WUGGrydn2/skHTbLO4Gz/orr8ZoD
+5jY3eelBSsf2xdc4a0kVZdWi5WprfhXwgrsVXQF7kVFB0WmYu+I5i4nWvesXtIHyqeGe3Xb4F7mrFY
XyKlmWXoceBNPB69cWUJ6BqWmbF2Q70kRa0sK2kUPTllZBJF4WTUGXcW30sG9xMdAF17AxlaXy
h4imw+8nfKC3XP8UUC8I7cCVJMawY2PdOBQEC+tegJWiuVE9/rXl4mecBj1bKAePTd7 root@linux-host1.exmaple.com
[root@bogon .ssh]# chmod 600 authorized_keys

#16:重启并验证:

#17:关机然后复制镜像至控制端:
[root@linux-image ~]# cd /var/lib/libvirt/images/
[root@linux-image images]# scp -P2021 CentOS-7-x86_64.qcow2 192.168.10.201:/root/

#18:控制端上传镜像并验证:
#18.1:上传镜像至 glance: 
[root@linux-host1 ~]# source admin-ocata.sh
[root@linux-host1 ~]# openstack image create "CentOS-7-x86_64-template" --file /root/CentOS-7-x86_64.qcow2 --disk-format qcow2 --container-format bare --public
#18.2:验证镜像: 

#19:通过镜像创建虚拟机:
#19.1:新增实例类型: 
#19.2:验证实例类型: 

#20:创建实例:
#20.1:镜像选择: 
#20.2:实例类型: 
#20.2:网络选择: 
#20.3:安全组及创建实例: 
#20.4:实例运行中: 
#20.5:登录实例: #修改实例 IP 为 openstack 自动分配的 IP
#20.6:验证内网通信: #必须重启 network 服务,或者重启虚拟机

#21:浮动 IP 分配: #浮动 IP 用于关联到每个实例,实现浮动 IP 与自服务 IP 的一一对应,且可以通过浮动 IP 映 射打通从外网访问虚拟机的目的。
#21.1:分配浮动 IP: #网络-浮动 IP-分配 IP 给项目:
#21.2:管理至实例: 
#21.3:关联后的浮动 IP 状态: 
#21.4:ssh 到实例: 
#21.5:无法连接: 
#21.6:查看网卡 mtu 参数: #当前 mtu 值:
#21.7:查看 cirros 镜像的默认 mtu 值: 
#21.8:修改自制镜像的 mtu 值: 
#21.9:再次 ssh 到自制镜像虚拟机: #因为之前已经做过免秘钥登录,因此本次登录不需要输入密码。
#21.10:配置 mtu 参数启动生效并验证: 
[root@bj-test ~]# vim /etc/rc.d/rc.local
ifconfig eth0 mtu 1450
ifconfig eth1 mtu 1450
[root@bj-test ~]# chmod a+x /etc/rc.d/rc.local
#重启服务器后重新 ssh 测试

#22:安装 httpd 测试访问:
#22.1:安装 httpd: 
[root@bj-test ~]# yum install httpd
[root@bj-test ~]# echo "test page" > /var/www/html/index.html
[root@bj-test ~]# systemctl start httpd
#22.2:编辑安全组: 
#22.3:访问 web 页面测试:

3、Centos 6.9 镜像制作:

官方教程:https://docs.openstack.org/image-guide/centos-image.html

#1:基础环境准备:
[root@linux-host5 ~]# yum install lrzsz net-tools acpi qemu-kvm qemu-kvm-tools libvirt virt-manager virt-install -y
[root@linux-host5 ~]# yum groupinstall "GNOME Desktop" y
[root@linux-host5 ~]# reboot

#2:创建系统磁盘:
[root@linux-image ~]# mkdir /os/{iso,images} -pv
mkdir: created directory ‘/os’
mkdir: created directory ‘/os/iso’
mkdir: created directory ‘/os/images’
[root@linux-image ~]# qemu-img create -f qcow2 /os/images/CentOS-6.9-x86_64.qcow2 
40G

#3:使用 centos 6.9 镜像开始安装:
#ISO 镜像文件不能放在/root 目录下
#3.1:使用命令安装 Centos-6.9: 
[root@linux-image ~]# virt-install --virt-type kvm --name CentOS-6.9-x86_64 --ram 1024 --
cdrom=/os/iso/CentOS-6.9-x86_64-minimal.iso --di
sk path=/os/images/CentOS-6.9-x86_64.qcow2 --network bridge=br0 --graphics 
vnc,listen=0.0.0.0 --noautoconsole
#3.2:验证端口: 
#3.3:使用 VNC 客户端连接端口: 
#3.4:进入安装界面: 
#3.5:测试 ISO 镜像: 
#3.6:选择安装语言: 
#3.7:选择安装介质: 
#3.8:删除所有数据: 
#3.9:设置主机名及 IP: 
#3.10:时区选择: 
#3.11:设置 root 密码: 
#3.12:选择自定义分区: #3.13:详细分区信息: 
#3.14:格式化并写入数据: 
#3.15:确认写入磁盘: 
#3.16:安装过程中: 
#3.17:安装完成后重启系统: 
#3.18:使用命令启动虚拟机: 
[root@linux-host5 ~]# virsh start CentOS-6.9-x86_64
Domain CentOS-6.9-x86_64 started
#3.19:验证虚拟机主机名和 IP: 

#4:虚拟机基础配置:
#4.1:更改 yum 源: 
[root@image ~]# mv /etc/yum.repos.d/* /tmp/
[root@image ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
[root@image ~]#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
#4.2:安装常用命令: 
[root@image ~]# yum install -y net-tools vim lrzsz tree screen lsof tcpdump wget iotop gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel unzip
#4.3: 关闭防火墙和 selinux: 
[root@image ~]# chkconfig iptables off
[root@image ~]# vim /etc/selinux/config
SELINUX=disabled
#4.4:更改 ssh 端口: 
[root@image ~]# vim /etc/ssh/sshd_config
17 Port 2017

#5:配置双网卡:
#5.1:打开宿主机控制台: #然后双击打开某个虚拟机的管理界面
#5.2:进入详情界面: 
#5.3:点击添加硬件: 
#5.4:添加网卡: #第二块网卡桥接到 br1,即与第一块网卡做区分,实现连接内外网络的功能

#6:配置分区自动拉伸: #git 下载地址 https://github.com/flegmatik/linux-rootfs-resize
[root@image ~]# cd /usr/local/src/
[root@image src]# yum install parted cloud-utils
[root@image src]#unzip /usr/local/src/linux-rootfs-resize-master.zip
[root@image src]# unzip linux-rootfs-resize-master.zip
[root@image src]# cd linux-rootfs-resize-master
[root@image linux-rootfs-resize-master]# ./install 

#7:配置免秘钥登录:
#7.1:保存公钥: 
[root@image ~]# ssh-keygen
[root@image ~]# cat .ssh/authorized_keys 
#预先放置了 openstack 控制端和镜像服务器的公钥,注意复制公钥时候的空格
ssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAABAQDGaqCn2NyDs3NRdr9dqeVedxSaHabDsvbG4PpahrMO6
OFr59yFHoi52bFSjZYJf/yIfTuVVDrmWgBaGbnPZg33qD+kkMP6e4vCnHt3l6i
Aq8h1SRmTLf4nfMCMHlw4JRQj7nRM80E9itd7BSx118JcsWE7oEg/kwJHRnrsV1cIGKI6wApZrPnYA
uy3nEhf9VBhZ84gYeKzdHJuT9/c5GevAMrQIYRJgmjcFZCEcgHED9LuSWu/jpPrvt
o4OVmQK0RVOHrgbveBEGkIhoS7YlboY7L0wBhdsE1vvnxmmq4EbgUoZ/Kub7cp52aj6I3OUJclYstg
GhxoPkKKUCaYE+K7 root@linux-host1.exmaple.comssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAABAQDmcI/Dw49tAls+dv+PzpOXN0kSuwcWdh0HAR0jlfg+neL
NCKmRlpP0mWpFsPdmd9L2l1M9YM15bV7L1fcPjHlbUS7tNLY3zy9mzgV+/Vb
PAWuPw6o3MUnOOOel3qqEE9CFM/sEOO7LJzLNe4i9klsxottdjbF4JhIKbw0M6BqVSsOp85sN5XroZ
UUcbFgwkl6k6T7u2w5GAbRPjhL/MbaKNe6twMaFh/66YzwTWf97n4+gRKgDM64GmQ
Ig7rwX9sohUeVRqxOJogflF/cRpnKKbFGW3LYyJr5gKsWgUfw6Nj8LE+FayT41A8ihmWZmy6rTBFTiPv
wbRbNiwUAp+lQz root@linux-image.exmaple.com
#7.2:更改文件权限: 
[root@image ~]# chmod 600 ~/.ssh/authorized_keys
#7.3:验证 ssh 免秘钥登录: 
#镜像服务器验证:
#openstack 控制端验证:

#8:修改网卡配置文件:
#8.1:eth0 网卡配置文件: 
[root@image ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=dhcp
#8.2:eth1 网卡配置文件: 
[root@image ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
NAME=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=dhcp

#9:重启镜像虚拟机验证端口:

#10:上传镜像:
#10.1:将磁盘文件 scp 至 openstack 控制端: 
[root@linux-image ~]# scp -P2017 /os/images/CentOS-6.9-x86_64.qcow2 
192.168.10.21:/root/

4、Windows Server 2008 R2 镜像制作:

以 windows 2008 R2 为例:

#1:创建系统磁盘:
[root@linux-image ~]# qemu-img create -f qcow2 /os/images/Windows-2008-r2-
x86_64.qcow2 20G

#2:使用 windows 镜像开始安装:
#2.1:使用命令安装 windows 2008: 
[root@linux-image ~]# virt-install --virt-type kvm --name Windows-2008_R2-x86_64 --ram 1024 --cdrom=/os/iso/windows_server_2008_r2.iso --disk path=/os/images/Windows-2008-r2-x86_64.qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
#2.2:验证端口: 
#2.3:开始加载中: 
#2.4:安装界面: 
#2.5:开始安装: 
#2.6:选择安装版本: 
#2.7:创建分区: 
#2.8:安装过程中: 
#2.9:安装完成: #首次登陆提示必须更改密码:
#2.10:登陆成功界面: 
#2.11:新添加网卡: #建议先把虚拟机关机再添加网卡
#2.12:验证网络通信: 
#2.13:开启远程连接: 
#2.14:关闭防火墙: 
#2.15:重新封装虚拟机: 
# 系统自带封装工具:
#2.16:开始封装: 

#2.17:将磁盘镜像 scp 至 openstack 控制端: 
[root@linux-image ~]# scp -P2017 /os/images/Windows-2008-r2-x86_64.qcow2 
192.168.10.21:/root/

5、基于官方 GenericCloud 7.2.1511 镜像制作:

镜像下载地址:http://cloud.centos.org/centos/7/images/

#1:下载官方镜像:
[root@linux-image iso]# wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-
GenericCloud-1511.qcow2.xz
[root@linux-image iso]# xz -d CentOS-7-x86_64-GenericCloud-1511.qcow2.xz
[root@linux-image iso]# mv CentOS-7-x86_64-GenericCloud-1511.qcow2 /os/images/

#2:从镜像开始安装系统:
#2.1:使用命令安装: 
[root@linux-image iso]# virt-install --virt-type kvm --name CentOS-GenericCloud-7.2--x86_64 --ram 1024 --cdrom=/os/iso/CentOS-7-x86_64-Minimal-1511.iso --disk path=/os/images/CentOS-7-x86_64-GenericCloud-1511.qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
#2.2:控制台打开控制端: 
#2.3:强制关机再启动: 
#2.4:重设密码: 
[root@linux-image iso]# yum install libguestfs-tools
[root@linux-image iso]# virt-customize -a /os/images/CentOS-7-x86_64-GenericCloud-1511.qcow2 --root-password password:123456
[ 0.0] Examining the guest ...
[ 30.5] Setting a random seed
[ 30.5] Setting passwords
[ 31.8] Finishing off
#2.5:确认终端可以使用 root 登录: 
#2.6:使用 root 远程 ssh 登录:

#3:虚拟机基础配置:
#3.1:更改 yum: 
[root@localhost ~]# yum install wget –y
[root@localhost ~]# mv /etc/yum.repos.d/* /tmp/
[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#3.2:安装常用命令: 
[root@localhost ~]# yum install vim wget tcpdump net-tools lrzsz gcc gcc-c++ pcre pcre-devel zip zip-devel unzip openssl openssl-devel tree
#3.3:关闭防护墙和 selinux: 
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# vim /etc/selinux/config
SELINUX=disabled
#3.4:更改 ssh 端口: 
[root@image ~]# vim /etc/ssh/sshd_config
17 Port 2017

#4:配置双网卡:
#4.1:打开宿主机控制台: 
#4.2:进入详情界面: 
#4.3:点击添加硬件: 
#4.4:添加网卡: 

#5:配置免秘钥登录:
#5.1:保存公钥: 
[root@localhost ~]# ssh-keygen
[root@localhost ~]# cat /root/.ssh/authorized_keys 
ssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAABAQDGaqCn2NyDs3NRdr9dqeVedxSaHabDsvbG4PpahrMO6
OFr59yFHoi52bFSjZYJf/yIfTuVVDrmWgBaGbnPZg33qD+kkMP6e4vCnHt3l6i
Aq8h1SRmTLf4nfMCMHlw4JRQj7nRM80E9itd7BSx118JcsWE7oEg/kwJHRnrsV1cIGKI6wApZrPnYA
uy3nEhf9VBhZ84gYeKzdHJuT9/c5GevAMrQIYRJgmjcFZCEcgHED9LuSWu/jpPrvto4OVmQK0RVOHr
gbveBEGkIhoS7YlboY7L0wBhdsE1vvnxmmq4EbgUoZ/Kub7cp52aj6I3OUJclYstgGhxoPkKKUCaYE+K
7 root@linux-host1.exmaple.comssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAABAQDREycFJknM6pLSnsa/hSif7XwO+QfKLHDKuWpXqgUXvYT
orZ9g3rc6PGI9q1zRMr2Cre7HwEWT4U2tkSgCy0tYvwgb+WuH70VA9bl/2UD
S3Xx8o99yaLFia3eFIyqhzpmEWlZcmkcUjwH/FiA6Xe1MWUXV493LqJJKrf+gwY6WkZ7oTIx+48dsDq
aMBImXdIiACN/kOOb+rfew+ht0RzaqXyk3NV1dOXfgA9pVrTEWMX1xJyNu60eAfcCZzG3K0dkL8lBcL
tG+mZCsZpIuncNG53bhn1W/rXItLgvJCCyOfkBiTvne5DzAz8sDzE0bTw3VNniF4frxjIM/YkrhA0hz 
root@linux-image.exmaple.com
#5.2:更改文件权限: 
[root@localhost ~]# chmod 600 /root/.ssh/authorized_keys
#5.3: 验证 ssh 免秘钥登录: 
#镜像服务器
#openstack 控制端:

#6:修改网卡配置文件:
#6.1:eth0 配置: 
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0
NAME=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=dhcp
#6.2:eth1 配置: 
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
NAME=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=dhcp

#7:重启虚拟机验证端口:
#镜像服务器: #openstack 控制端: