• virtualization 资源管理
– x个物理资源 --> y个逻辑资源
– 实现程度:完全、部分、硬件辅助(CPU)
• 虚拟化主要厂商及产品
1. 虚拟化服务器软件
• qemu-kvm
– 为 kvm 提供底层仿真支持
• libvirt-daemon
– libvirtd 守护进程,管理虚拟机
• libvirt-client
– 用户端软件,提供客户端管理命令
• libvirt-daemon-driver-qemu
– libvirtd 连接 qemu 的驱动 // libvirtd可以管理各种虚拟化技术
• 可选功能
– virt-install # 系统安装工具
– virt-manager # 图形管理工具
– virt-v2v # 虚拟机迁移工具
– virt-p2v # 物理机迁移工具
• 虚拟化平台的安装
yum install -y qemu-kvm \
libvirt-daemon \
libvirt-client \
libvirt-daemon-driver-qemu
systemctl start libvirtd //启动虚拟机管理服务
• 虚拟机的组成
– 内核虚拟化模块(KVM)
– 系统设备仿真(QEMU)
– 虚拟机管理程序(LIBVIRT)
KVM提供CPU硬件的虚拟化,QEMU提供除CPU以外的辅助硬件虚拟化,LIVIRTD提供管理虚拟机的命令
1.KVM是linux内核的模块,它需要CPU的支持,采用硬
件辅劣虚拟化技术 Intel-VT,AMD-V,内存的相关如
Intel的 EPT 和 AMD 的 RVI 技术
2. QEMU 是一个虚拟化的仿真工具,通过 ioctl 与内核
kvm 交互完成对硬件的虚拟化支持
3. Libvirt 是一个对虚拟化管理的接口和工具,提供用户
端程序 virsh ,virt-install, virt-manager, virt-view 与用户交互
– 一个 XML 文件(虚拟机配置声明文件) 【告诉虚拟机,你有几个网卡,几个cpu,多大的磁盘】
– 位置 /etc/libvirt/qemu/
– 一个磁盘镜像文件(虚拟机的硬盘) 【虚拟机存放数据的地方】
– 位置 /var/lib/libvirt/images/
1.virsh命令工具介绍
提供管理各虚拟机的命令接口
– 支持交互模式,查看/创建/停止/关闭 .. ..
– 格式:virsh 控制指令 [虚拟机名称] [参数]
[root@nova01 ~]# virsh
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh #
2.查看虚拟化信息
2.1 查看KVM节点(服务器)信息【物理机】
– virsh nodeinfo
2.2 列出虚拟机
– virsh list [--all]
2.3 列出虚拟网络
– virsh net-list [--all]
2.4 查看指定虚拟机的信息
– virsh dominfo 虚拟机名称
3.开关机操作
3.1 运行|重启|关闭指定的虚拟机
– virsh start|reboot|shutdown 虚拟机名称
3.2 强制关闭指定的虚拟机
– virsh destroy 虚拟机名称
3.3 将指定的虚拟机设为开机自动运行【随着libvirtd启动】
– virsh autostart [--disable] 虚拟机名称
1.常用镜像盘类型
• 虚拟机的磁盘镜像文件格式
qcow2的IO性能比RAW稍低,但是QCOW2文件格式占用的空间小,支持压缩、快照盘复用
1.qemu-img命令简介
• qemu-img 是虚拟机的磁盘管理命令
• qemu-img 支持非常多的磁盘格式,例如 raw、qcow2、vdi、vmdk 等等
2.qemu-img 命令格式
– qemu-img 命令 参数 块文件名称 大小
qemu-img create [-b 后端盘] -f qcow2 块文件名称 [大小] //这个大小定的是最大能存多大的数据
– 常用的命令有
– create 创建一个磁盘
– convert 转换磁盘格式
– info 查看磁盘信息
– snapshot 管理磁盘快照
3.创建新的镜像盘文件
– qemu-img create -f 格式 磁盘路径 大小
– qemu-img create -f qcow2 disk.img 50G
4.查询镜像盘文件的信息
– qemu-img info 磁盘路径
– qemu-img info disk.img
5.-b 使用后端模板文件【以后端文件拷贝一个镜像文件,化整为零的拷贝】
– qemu-img create -b disk.img -f qcow2 disk1.img
• Copy On Write,写时复制
– 直接映射原始盘的数据内容
– 当对前端盘进行数据修改时,如果没有数据,会在修改之前从后端盘复制一份到前端盘
– 对前端盘的修改不回写到原始盘
• 使用 virsh 客户端工具
1.连接本地
– virsh
– virsh# connect qemu:///system (默认选项)
2.连接远程
– virsh# connect
qemu+ssh://[email protected]:port/system
• 使用 virt-manager 客户端工具
– virt-manager 也可以通过 add connection 管理其它
机器上的虚拟机,一般通过"remote tunnel over ssh"
就可以了
– 需要注意的是 virt-manager 需要使用 ssh 免密码登录
如果没有免密码登录需要单独安装 python 的 ssh 相
关模块,这里我们可以使用部署 key 的方法解决
• libvirtd 网络接口
– 原理:调用 dnsmasq 提供DNS、DHCP等功能
– 创建配置文件 /etc/libvirt/qemu/networks/vbr.xml
vbr
• virsh 管理虚拟网络
– net-list 查看虚拟网络
– net-define vbr.xml 创建虚拟网络
– net-undefine vbr 初除虚拟网络
– net-start vbr 启劢虚拟网络
– net-destroy vbr 停止虚拟网络
– net-edit vbr 修改 vbr 网络的配置
– net-autostart vbr 设置 vbr 虚拟网络开机自启动
3.1.1 xml配置文件
– 定义了一个虚拟机的名称、CPU、内存、虚拟磁盘、网卡等各种参数设置
– 默认位于 /etc/libvirt/qemu/虚拟机名.xml
• 导出xml配置文件
– 查看:virsh dumpxml 虚拟机名
– 备份:virsh dumpxml 虚拟机名 > 虚拟机名.xml
– 编辑:virsh edit 虚拟机名
– 若修改 name、memory、disk、network,可自劢保
存为新虚拟机配置
[root@kvmsvr ~]# virsh edit v1
.. ..
.. ..
– virsh define XML描述文件
定义域 CentOS7_node1.xml
~]# virsh define /etc/libvirt/qemu/CentOS7_node1.xml
– 查看域主机
[root@kvmsvr ~]# virsh list --all
– 比如虚拟机改名的情况
– 避免出现多个虚拟机的磁盘戒MAC地址冲突
– virsh undefine 虚拟机名
[root@kvmsvr ~]# virsh undefine node1 //node1对应的xml配置文件会从/etc/libvirt/qemu目录下删除
1.快速配置网络 yum 源
– 配置ftp
yum install vsftp
– 修改配置文件 /etc/vsftpd/vsftpd.conf
– listen=YES
– listen_ipv6=NO
– systemctl enable vsftpd
– systemctl start vsftpd
– vsftp 默认根目录为 /var/ftp
– 在 ftp 跟目录创建文件夹 centos7
– 把 CentOS7 的光盘挂载到刚刚创建的目录上
mount –t iso9660 –o loop,ro /xx/xx.iso /var/ftp/centos7
– 在客户机里面配置 /etc/yum.repos.d/xxx.repo
[Centos_repo]
name= CentOS packet
baseurl=ftp://xx.xx.xx.xx/centos7
enabled=1
gpgcheck=0
– yum repolist
1.启劢 virt-manager 软件,选择新建虚拟机
2.选择网络安装源
3.在/var/lib/libvirt/images目录下创建node.qcow2
– qemu-img create -f qcow2 node.qcow2 16G
4.网络选择自定义的 vbr,这张网卡的模式是nat模式
5.语言选择英语English (United States)
6.软件选择 minimal 、关闭 KDUMP、选择手工分区
6.手动分区,点击左上角的DONE
7.使用标准分区格式,只分一个根分区
8.点击New CentOS7 Instatllation下面的小加号,选择跟挂载点,选择Add mount point
9.选取一个根分区,开启安装系统
SELINUX=disabled
~] # vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0" //网卡设备名称
ONBOOT="yes“ //开机自动启动
NM_CONTROLLED="no" //不让NetWorkManger控制网络服务
TYPE="Ethernet" //网卡类型是Ethernet
BOOTPROTO ="dhcp" //网卡启动协议是dhcp
~] # systemctl stop firewalld
~] # systemctl stop NetworkManager
~] # yum remove -y NetworkManager-* firewalld-* python-firewall
配置正确会重新给接在vbr网桥上的eth0分配ip地址
[root@centos7temp ~]# ip a ls dev eth0
eth0:
....
inet 192.168.5.154/24 brd 192.168.5.255 scope global dynamic eth0
yum.repos.d]# vim CentOS7.repo
[local_repo]
name=CentOS-$releasever - Base
baseurl="ftp://192.168.5.254/CentOS7-Base"
enabled=1
gpgcheck=0
1.安装必须的软件包
yum provides 命令
yum install 包名
1. 下载 RPM-GPG-KEY-CentOS-7
[root@room9pc01 CentOS7-Base]# scp RPM-GPG-KEY-CentOS-7 192.168.5.112:/root/
2. 导入 rpm --import RPM-GPG-KEY-CentOS-7
[root@centos7_temp ~]# rpm --import RPM-GPG-KEY-CentOS-7
3.修改CentOS7.repo 配置文件
[root@centos7_temp ~]# vim /etc/yum.repos.d/CentOS7.repo
local.repo gpgcheck=1
4.使用 yum install lftp lrzsz briges-utils 验证,不报错就证明签名文件导入成功
[root@centos7_temp ~]# yum -y install lftp
lftp sftp://192.168.5.254/ -u root //通过lftp直接下载对方主机文件
1. 修改配置文件 /etc/sysconfig/network
]# vim /etc/sysconfig/network
NOZEROCONF="yes"
[root@centos7_temp ~]# systemctl restart network
]# ip r s //查看空路由的命令 -r, -resolve -s, -stats
1.配置文件 /etc/default/grub
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0
console=ttyS0,115200n8"
GRUB_DISABLE_LINUX_UUID="true"
GRUB_ENABLE_LINUX_LABEL="true"
2.修改完成之后创建grub.cfg引导文件
grub2-mkconfig -o /boot/grub2/grub.cfg
1. 不同磁盘的UUID不同,需要指定设备路径
[root@centos7_temp ~]# blkid
/dev/vda1: UUID="c4b11f39-6a67-471f-865f-a88a5e589712" TYPE="xfs"
[root@centos7_temp ~]# vim /etc/fstab
修改 UUID=xxxxxx 为 /dev/vda1
1.设置语言为英文 LANG=en_US.UTF-8
2.安装分区软件
~] # yum install -y cloud-utils-growpart
3.扩展磁盘分区空间(让 /dev/vda1 变大)
~]#/usr/bin/growpart /dev/vda 1 (1代表vda磁盘的第一个分区)
4.扩展文件系统识别空间(让 df -h 可使用空间变大)
~]#/usr/sbin/xfs_growfs /
1.设置语言为英文 LANG=en_US.UTF-8
2.关闭虚拟机
[root@room9pc01 ~] # virsh destroy CentOS7_TEMP[虚拟机名称]
3.清理虚拟机
[root@room9pc01 ~] # virt-sysprep -d 虚拟机名称
[ 0.0] Examining the guest ...
[ 38.5] Performing "abrt-data" ...
[ 38.5] Performing "backup-files" ...
[ 39.9] Performing "bash-history" ...
[ 39.9] Performing "blkid-tab" ...
[ 39.9] Performing "crash-data" ...
[ 39.9] Performing "cron-spool" ...
....
1.取消虚拟机定义,会删除CentOS7_TEMP.xml配置文件
~] # virsh undefine CentOS7_TEMP
例如创建虚拟机 node1
1.创建磁盘文件
cd /var/lib/libvirt/images
images]# qemu-img create -b node.img -f qcow2 node1.img 32G
2.创建虚拟机配置文件,定义虚拟机
qemu]# sed 's/node/CentOS7_node1/' node.xml >/etc/libvirt/qemu/CentOS7_node1.xml
virsh define /etc/libvirt/qemu/node1.xml
3.启动虚拟机
~] # virsh start CentOS7_node1
4.连接查看虚拟机
~] # virsh console CentOS7_node1
1.保存 node 虚拟机配置文件
virsh dumpxml node >demo.xml
2.内存设置,以KB为单位
– memory unit 虚拟机最大使用内存,可以手动调整
– currentmemory 创建虚拟机使用内存
3.cpu 设置,可以调整
1.磁盘配置
//使用的磁盘镜像
//总线地址,再添加一块磁盘这行可以删除
2.网卡设置
//网卡的名称
//总线地址,再添加一块磁盘这行可以删除
1. xml 文件配置
把我们的 xml 模板文件进行复制
修改名称及磁盘文件
sed 's/node/CentOS7_node1/' node.xml >/etc/libvirt/qemu/CentOS7_node1.xml
2. img 文件创建
以我们刚刚装系统的模板为后端文件创建虚拟机
qemu-img create –b CentOS7_TEMP.img -f qcow2 CentOS7_node1.img
3.完成虚拟机注册及启动虚拟机
– virsh define CentOS7_node1.xml
– virst start CentOS7_node1
– virsh console CentOS7_node1
1. 使用 guestmount 工具
– 支持离线挂载 raw、qcow2 格式虚拟机磁盘
– 可以在虚拟机关机的情冴下,直接修改磁盘中的文档
– 方便对虚拟机定制、修复、脚本维护
!!! 需要注意 SELinux 机制的影响
2. 基本用法
guestmount -a 虚拟机磁盘路径 -i /挂载点
[root@kvmsvr ~]# mkdir /mnt/kdisk
[root@kvmsvr ~]# guestmount -a CentOS7_node1.img -i /mnt/kdisk
[root@kvmsvr ~]# ls /mnt/kdisk
1.禁用 selinux , 配置文件 /etc/selinux/config
SELINUX=disabled
2.禁用 firewalld
systemctl stop firewalld
systemctl (un)mask firewalld
1.光盘作为 yum 源 CentOS7-1708.iso (共9591包),把这个镜像挂载到/var/www/html目录下,这样可以让虚拟机访问到磁盘镜像
有 repodata 目录的才可以作为 yum 源
2.自定义 yum 源 [这一步是扩展操作,可以跳过]
创建一个 repodata
createrepo .
更新
createrepo --update .
1.装bind,bind-chroot软件包~] # yum install bind bind-chroot
2.编辑配置文件 named.conf
listen-on port 53 { 192.168.5.254; };
allow-query { any; };
forwarders { 8.8.8.8; }; //缓存服务器的的关键配置
dnssec-enable no;
dnssec-validation no;
3.重启服务测试
~ ] # nslookup www.baidu.com 192.168.5.254
1.服务端安装chrony
yum install -y chrony
2.服务端配置[服务端是阿里云时间服务器的客户端,是其他同步时间虚拟机的服务端]
server:配置 /etc/chrony.conf
server ntp1.aliyun.com iburst
bindacqaddress 0.0.0.0
allow 0/0
3.客户端
client:配置 /etc/chrony.conf
server 192.168.5.254 iburst
检查状态
chronyc sources -v
* 同步成功,+ 备胎 , ? 同步失败
附:openstack准备环境文档 cloud.txt