1.真机配置yum源
mkdir /var/ftp/centos7
vim /etc/fstab
mount -a
yum repolist
2.真机开启路由转发
cd /etc/sysctl.d/
vim 99-sysctl.conf
net.ipv4.ip_forward = 1
3.真机删除当前的配置文件
cd /etc/libvirt/qemu/networks/
ls
cd autostart/
rm -rf ./*
ls
4.真机selinux改成disable
vim /etc/selinux/config
5.真机删除firewalld、NetworkManager
systemctl stop firewalld
systemctl disable firewalld------开机不自启
systemctl mask firewalld--------开机不自启且不会被别的服务调用而开启(绝对不会开启)
systemctl stop NetworkManager
rpm -qa | grep -P "firewalld|NetworkManager"
yum remove firewalld-*
yum remove NetworkManager-*
yum remove python-firewalld
6.真机创建一个新的网桥xml配置文件
cd /etc/libvirt/qemu/networks 网桥配置文件目录
vim vbr.xml
virsh net-define vbr.xml --------------创建虚拟网桥
virsh net-start vbr ------------------启动虚拟网桥
Ifconfig
virsh net-autostart vbr ----------------- 设置虚拟网桥开机自启
7.创建虚拟磁盘
cd /var/lib/libvirt/images/ -------------------虚拟磁盘目录
qemu-img create -f qcow2 node.qcow2 16G
8.装虚拟机
网络安装——>提供URL地质http|ftp|nfs://176.233.4.241/centos7 选择根据安装介质自动侦测操作系统——>2G 内存+2个CPU——>选择创建自定义存储——>选择自己创建的qcow2——>起名 选择在安装前自定义配置,选择网络——>完成
装机配置
选择英语环境——>选择最小安装——>选择手动配置磁盘——>选择标准分区,添加根分区——>去选kdump——>开始安装
配置系统:
cd /etc/yum.repos.d/
rm -rf *
vi dvd.repo //配置yum源
yum provides ifconfig
yum -y install net-tools //tcp/ip网络工具
yum provides vim
yum -y install vim-enhanced //vim
yum provides ip
yum -y install iproute //ip路由
yum -y install bash-completion //table键补全
Yum -y install psmisc //pstree
添加默认网关
配DNS
Vim /etc/resolve.conf
Nameserver 176.233.0.227
禁用空路由
Vim /etc/sysconfig/network
NOZEROCONF=”yes”
虚拟机上配置virsh下的cosole连接:
vim /etc/sysconfig/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200"
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0 console=ttyS0,115200n8"
GRUB_DISABLE_RECOVERY="true"
GRUB_DISABLE_LINUX_UUID="true"
GRUB_ENABLE_LINUX_LABEL="true"
[root@room9pc01 nsd1804]# md5sum grub
cf3397e0ac0eeb1e99becd03b7805802 grub
修改完后虚拟机输入下面命令:
grub2-mkconfig -o /boot/grub2/grub.cfg -------添加启动项
reboot--------重起
9.测试console
virsh console centos7.0 //虚拟机名称
10.在虚拟机上修改或创建虚拟机的网卡配置文件
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
# Generated by dracut initrd
DEVICE="eth0"-----------设备名eth0,就是通过ip a 查看到的
HWADDR="52:54:00:da:3c:f2"
ONBOOT=yes-----------------开机自启
NM_CONTROLLED="no"-------不允许使用NetworkManager工具
UUID="5c12db5a-3adf-4e3a-a0d7-75ef8d50e7fb"
IPV6INIT=yes
BOOTPROTO="dhcp"---------ip获取方式为DHCP
TYPE="Ethernet"------设备类型为网卡
11、将uuid修改为/dev/vda1
[root@localhost ~]# blkid
/dev/vda1: UUID="fc60d80c-51da-4d30-854b-108c19ecfdb6" TYPE="xfs"
[root@localhost ~]# vim /etc/fstab
/dev/vda1 / xfs defaults 0 0--------将uuid修改为/dev/vda1,目的是避免以后模版机的uuid不同而无法挂载
12、安装分区扩展软件
[root@localhost ~]# yum -y install cloud-utils-growpart.noarch
扩展磁盘分区空间(让 /dev/vda1 变大)
/usr/bin/growpart /dev/vda 1(此处一定要有空格)
扩展文件系统识别空间(让 df -h 可使用空间变大)
/usr/sbin/xfs_growfs / 或者
/usr/sbin/xfs_growfs /dev/vda1
13、关闭虚拟机,清理信息(真机)
[root@room9pc01 ~]# LANG=en_US.UTF-8------------设置语言为英文
[root@room9pc01 ~]# virsh list --all
Id Name State
----------------------------------------------------
3 win10 running
- centos7.0 shut off
- classroom shut off
- desktop shut off
- rh7_node02 shut off
- server shut off
- win2008 shut off
yum -y install virt-sysprep
[root@room9pc01 ~]# virt-sysprep -d centos7.0-----清理模版虚拟机
[ 0.0] Examining the guest ...
[ 22.2] Performing "abrt-data" ...
[ 22.2] Performing "backup-files" ...
[ 22.9] Performing "bash-history" ...
[ 22.9] Performing "blkid-tab" ...
[ 22.9] Performing "crash-data" ...
[ 22.9] Performing "cron-spool" ...
[ 22.9] Performing "dhcp-client-state" ...
[ 22.9] Performing "dhcp-server-state" ...
[ 22.9] Performing "dovecot-data" ...
[ 22.9] Performing "logfiles" ...
[ 23.0] Performing "machine-id" ...
[ 23.0] Performing "mail-spool" ...
[ 23.0] Performing "net-hostname" ...
[ 23.0] Performing "net-hwaddr" ...
[ 23.0] Performing "pacct-log" ...
[ 23.0] Performing "package-manager-cache" ...
[ 23.1] Performing "pam-data" ...
[ 23.1] Performing "passwd-backups" ...
[ 23.1] Performing "puppet-data-log" ...
[ 23.1] Performing "rh-subscription-manager" ...
[ 23.1] Performing "rhn-systemid" ...
[ 23.1] Performing "rpm-db" ...
[ 23.1] Performing "samba-db-log" ...
[ 23.1] Performing "script" ...
[ 23.1] Performing "smolt-uuid" ...
[ 23.1] Performing "ssh-hostkeys" ...
[ 23.1] Performing "ssh-userdir" ...
[ 23.1] Performing "sssd-db-log" ...
[ 23.1] Performing "tmp-files" ...
[ 23.1] Performing "udev-persistent-net" ...
[ 23.1] Performing "utmp" ...
[ 23.1] Performing "yum-uuid" ...
[ 23.1] Performing "customize" ...
[ 23.1] Setting a random seed
[ 23.6] Performing "lvm-uuids" ...
[root@room9pc01 ~]#
14、删除虚拟机定义
[root@room9pc01 ~]# virsh undefine centos7.0
Domain centos7.0 has been undefined
15、以之前创建的模版虚拟机新建虚拟机
[root@room9pc01 ~]# cd /var/lib/libvirt/images/
[root@room9pc01 images]# ls
lost+found rh254-classroom-vda.ovl rh254-server-vda.ovl rh7_node02.qcow2
node10.img rh254-desktop-vda.ovl rh254-server-vdb.ovl win10.qcow2
node.img rh254-desktop-vdb.ovl rh7_node02.img win.img
[root@room9pc01 images]# qemu-img create -b node.img -f qcow2 node1.img 32G
Formatting 'node1.img', fmt=qcow2 size=34359738368 backing_file='node.img' encryption=off cluster_size=65536 lazy_refcounts=off
[root@room9pc01 nsd1804]# ls
cloud.txt grub ifcfg-eth0 node.xml NSD_CLOUD_01.pdf ok.txt vbr.xml
[root@room9pc01 ~]# sed 's/node/node1/' node.xml > /etc/libvirt/qemu/node1.xml
vimdiff node.xml /etc/libvirt/qemu/node1.xml---------可以自行比对查看一下
[root@room9pc01 ~]# cd /etc/libvirt/qemu/
[root@room9pc01 qemu]# ls
classroom.xml networks rh7_node02.xml win10.xml
desktop.xml node1.xml server.xml win2008.xml
[root@room9pc01 qemu]# virsh define node1.xml
Domain node1 defined from node1.xml
[root@room9pc01 qemu]# virsh list --all
Id Name State
----------------------------------------------------root
3 win10 running
- classroom shut off
- desktop shut off
- node1 shut off
- rh7_node02 shut off
- server shut off
- win2008 shut off
[root@room9pc01 qemu]# virsh start node1
Domain node1 started
yum install bind bind-chroot
编辑配置文件 named.conf
listen-on port 53 { 192.168.1.254; };
allow-query { any; };
forwarders { 202.106.196.115; };
dnssec-enable no;
dnssec-validation no;
yum install -y chrony
server:配置 /etc/chrony.conf
server ntp1.aliyun.com iburst
bindacqaddress 0.0.0.0
allow 0/0
虚拟机:配置 /etc/chrony.conf
server 192.168.1.254 iburst
检查状态
chronyc sources -v
* 同步成功,+ 备胎 , ? 同步失败
lftp ftp://176.233.3.8------------------可以直接连接到对方的ftp,类似于firefox ftp://176.233.3.8
lftp sftp://176.233.3.8 -u root-------可以加密连接到对方的主机,可以查看和修改及下载(get)任何文件。
xml配置文件 /etc/libvirt/qemu
/etc/libvirt/qemu/networks
/etc/libvirt/qemu/networks/autostart
磁盘镜像文件 /var/lib/libvirt/images
快速建立系统的要点
1.准备一台模板虚拟机
2.基于磁盘复用技术快建新虚拟机的磁盘
3.通过调整模板机的配置快建新虚拟机的xml配置文件
4.导入新虚拟机
COW技术原理(copy on write,写时复制)
直接映射原始盘的数据内容
当原始盘的旧数据有修改时,在修改之前自动将旧数据存入前端盘
对前端盘的修改不回写到原始盘(后端盘)
批量创建虚拟机
启动虚拟机并测试
Virsh工具两种操作:交互(直接virsh)和virsh 控制指令 虚拟机名称 参数
[root@room9pc01 ~]# virsh domiflist desktop-----查看虚拟机虚拟网卡
接口 类型 源 型号 MAC
-------------------------------------------------------
vnet1 network rhce virtio 52:54:00:00:00:0a
vnet2 network rhce virtio 52:54:00:93:8a:de
vnet3 network rhce virtio 52:54:00:0b:0a:7b
virsh
xml配置文件(定义虚拟机的名称、CPU、内存、虚拟磁盘、网卡等各种参数设置)
/etc/libvirt/qemu/虚拟机名.xml------------- 默认位置
virsh dumpxml 虚拟机名 -----------查看 xml配置文件
virsh dumpxml 虚拟机名 > 虚拟机名.xml -----------导出备份 xml配置文件
virsh edit 虚拟机名-------------修改name、memory、disk、 network,可保存为新虚拟机配置
virsh define XML描述文件路径 -----------根据修改后的独立xml文件定义新虚拟机
virsh undefine 虚拟机名 ------------去除多余的xml配置
创建虚拟机磁盘镜像
• 创建新的镜像盘文件
– qemu-img create -f 格式 磁盘路径 大小
• 查询镜像盘文件的信息
– qemu-img info 磁盘路径
[root@kvmsvr ~]# qemu-img create -f qcow2 disk1.qcow2
20G
.. ..
[root@kvmsvr ~]# qemu-img info disk1.qcow2
image: disk1.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes) //虚拟大小
disk size: 196K //实际数据大小
.. ..
创建/还原/删除快照
在虚拟机磁盘镜像内记录不同时间点的状态数据备份
必要是可将虚拟机恢复到指定的快照
– qemu-img snapshot -c 快照名 qcow2磁盘
– qemu-img snapshot -l qcow2磁盘
– qemu-img snapshot -a 快照名 qcow2磁盘
– qemu-img snapshot -d 快照名 qcow2磁盘
虚拟化概述
将x个物理资源实现成y个逻辑资源。
可以是完全虚拟化(从上到下的传递传递)、部分虚拟化、硬件辅助虚拟化(cpu)
硬件辅助虚拟化:真实底层的CPU支持虚拟化指令。不需要转译过程
企业应用:
将传统业务往虚拟化上迁移,对IO要求高的会迁移
Docker用于数据量和业务;耦合性和系统不强的业务
虚拟机和容器的区别:
虚拟机都是虚拟的,有单独磁盘等。
容器用的都是物理机的。物理机什么样容器什么样。可以查看磁盘等等。Docker管理,k8s
容器用物理机
容器共享虚拟机内核,一开都开。一关都关。
资源控制
cgroup
搭个yum
安装个ftp或者http或者nfs共享
开机自动挂载目录下
然后客户机配置yum服务端地址最后yum repolist下
安装虚拟化服务器平台KVM
必备:
– qemu-kvm -------------为kvm提供底层的支持
– libvirt-client -------------用户端软件,提供客户端管理命令
– libvirt-daemon ----------------libvirtd守护进程,管理虚拟机
– libvirt-daemon-driver-qemu ------libvirtd 连接 qemu 的驱动
可选:
– virt-install ----------系统安装工具
– virt-manager -----------图形管理工具
– virt-v2v ------虚拟机迁移工具
– virt-p2v ------物理机迁移工具
用virsh客户端工具可以连接本地/远程的KVM
连接本地:virsh后进入到命令行后:virsh#connect qemu:///system(默认选项)
或virsh -c qemu:///system
连接远程:virsh#connect qemu+ssh://[email protected]:port/system
或virsh -c qemu+ssh://177.233.5.8/system
virt-manager也可以通过add connection管理其它机器上的虚拟机,一般通过“remote tunnel over ssh” 就可以了
自己配置系统的xml配置文件
导出虚拟机
• xml配置文件
– 定义了一个虚拟机的名称、CPU、内存、虚拟磁盘、网卡等各种参数设置
– 默认位于 /etc/libvirt/qemu/虚拟机名.xml
• 导出xml配置文件
– 查看:virsh dumpxml 虚拟机名
– 备份:virsh dumpxml 虚拟机名 > 虚拟机名.xml
编辑虚拟机设置
• 对虚拟机的配置进行调整
– 编辑:virsh edit 虚拟机名
– 若修改 name、memory、disk、network,可自劢保存为新虚拟机配置
[root@kvmsvr ~]# virsh edit rhel-207
.. ..
.. ..
导入虚拟机
• 根据修改后的独立xml文件定义新虚拟机
– virsh define XML描述文件
[root@kvmsvr ~]# virsh define /root/rhel-207.xml
定义域 rhel-207(从 /root/rhel-207.xml)
[root@kvmsvr ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- rhel-207 关闭
- rhel7.2 关闭
删除虚拟机
• 必要时可去除多余的xml配置
– 比如虚拟机改名的情冴
– 避免出现多个虚拟机的磁盘戒MAC地址冲突
– virsh undefine 虚拟机名
[root@kvmsvr ~]# virsh undefine rhel7.2
域 rhel7.2 已经被取消定义
案例4:xml配置文件的应用
使用 virsh 调整虚拟机配置,完成下列任务
1)将虚拟机 rhel7.2 改名为 rhel-207
2)将虚拟机 rhel-207 复制为 rhel-7
3)上述虚拟机的CPU/内存/网络类型保持不变
4)但这2个虚拟机有可能会同时运行,不应出现冲突
自己可以创建镜像和快照
虚拟机常用的镜像格式有两种:RAW QCOW2
KVM默认 否 是
I/O效率 高 较高
占用空间 大 小
压缩 不支持 支持
后端盘复用 不支持 支持
快照 不支持 支持
创建虚拟机磁盘镜像
– qemu-img create -f 格式 磁盘路径 大小
查询镜像盘文件的信息
– qemu-img info 磁盘路径
例如:
[root@kvmsvr ~]# qemu-img create -f qcow2 disk1.qcow2
20G
.. ..
[root@kvmsvr ~]# qemu-img info disk1.qcow2
image: disk1.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes) //虚拟大小
disk size: 196K //实际数据大小
.. ..
快照有什么用?
– 在虚拟机磁盘镜像内记录不同时间点的状态数据备份
– 必要时可将虚拟机恢复到挃定的快照
快照这样用 创建删除还原
– qemu-img snapshot -c 快照名 qcow2磁盘
– qemu-img snapshot -l qcow2磁盘
– qemu-img snapshot -a 快照名 qcow2磁盘
– qemu-img snapshot -d 快照名 qcow2磁盘
案例5:为虚拟机制作快照备份
使用 qemu-img 及必要的工具完成下列任务
1)将虚拟机 rhel-7 关机
2)为虚拟机 rhel-7 的磁盘制作名为 snap1 的快照
3)开启并登入虚拟机 rhel-7,在桌面上新建文件 1.txt
4)再次关闭虚拟机 rhel-7,还原到快照 snap1
5)重新开启并登入虚拟机 rhel-7,检查 1.txt 文件
怎么快建
两点组成:xml配置文件 磁盘镜像文件
Xml配置文件:定义虚拟机的名称、CPU、内存、虚拟磁盘、网卡等各种参数设置
磁盘镜像文件:保存虚拟机的操作系统及文档数据,镜像路径取决于xml
配置文件中的定义
思路:
1)准备一台模板虚拟机(镜像磁盘+xml配置文件)
2)基于磁盘复用技术快建新虚拟机的磁盘
3)通过调整模板机的配置快建新虚拟机的xml配置文件
4)导入新虚拟机
cow技术原理(copy on write,写时复制)
– 直接映射原始盘的数据内容
– 当原始盘的旧数据有修改时,在修改之前自动将旧数据存入前端盘
– 对前端盘的修改不回写到原始盘(后端盘)
实际操作:(四步骤)
准备模板虚拟机
• 模板机的选择
– 可以用现有的虚拟机,也可再安装一台新虚拟机
• 模板机的初始化
1)预装软件/系统优化/关闭SELinux等
2)生产环境可以标记 /.unconfigured ,方便新虚拟机的配置(相当于出厂设置,提示用户刜始化)
3)备份好模板磁盘、xml配置文件
4)删除模板机(undefine)
快速创建qcow前端盘
• qemu-img 通过 -b 选项复用指定后端盘
– qemu-img create -f qcow2 -b 后端盘 前端盘
[root@kvmsvr ~]# cd /data/images/
[root@kvmsvr images]# qemu-img create -f qcow2 -b
rhel7_muban.qcow2 rh7_node1.qcow2
.. ..
[root@kvmsvr images]# ls -lh rh*.qcow2
-rw-r--r-- 1 root root198K 12月 9 13:55 rh7_node1.qcow2
-rw-r--r-- 1 qemu qemu 3.2G 12月 7 11:08 rhel7_muban.qcow2
//对比前端盘、后端盘大小
配置新虚拟机
• 拷贝模板机的xml配置
– 按照需要修改,并据此定义新虚拟机
[root@kvmsvr ~]# cp /data/images/rhel7_muban.xml /root/
[root@kvmsvr ~]# vim /root/rhel7_muban.xml
.. ..
[root@kvmsvr images]# virsh define /root/rhel7_muban.xml
定义域 rh7_node1(从 /root/rhel7_muban.xml)
新虚拟机的交付使用
• 正常运行快建的新虚拟机
– 检查已有装好的操作系统,登入后不模板机一样
– 用户自行修改主机名/IP地址等参数
[root@kvmsvr images]# virsh list --all
Id 名称 状态
----------------------------------------------------
- rhel-207 关闭
- rhel-7 关闭
- rh7_node1 关闭
.. ..
案例6:快建新虚拟机
快建2台新的KVM虚拟机,配置要求如下
1)svr7:svr7.tedu.cn,192.168.4.7/24
2)pc207: pc207.tedu.cn,192.168.4.207/24
3)为上述虚拟机配好网络,确认yum源可用
4)从CentOS真机可ssh进程访问这两台虚拟机
离线访问虚拟机
配置虚拟机系统有奇招
• 使用 guestmount 工具
– 支持离线挂载 raw、qcow2 格式虚拟机磁盘
– 可以在虚拟机关机的情况下,直接修改磁盘中的文档
– 方便对虚拟机定制、修复、脚本维护
!!! 需要注意 SELinux 机制的影响
如何挂载虚拟盘
• 基本用法
guestmount -a 虚拟机磁盘路径 -i /挂载点
[root@kvmsvr ~]# mkdir /mnt/kdisk
[root@kvmsvr ~]# guestmount -a node.qcow2 -i /mnt/kdisk
[root@kvmsvr ~]# ls /mnt/kdisk
注意,使用之前要装包!!!
# yum -y install libguestfs-tools-c
# mkdir /mnt/kdisk
# guestmount -a node.qcow2 -i /mnt/kdisk
# echo 密码 | passwd --stdin 用户
# exit
[root@localhost qemu]# sed 's/node/node02/g' centos7.xml > node02.xml
[root@localhost qemu]# qemu-img create -b node.qcow2 -f qcow2 node02.img
[root@localhost qemu]# virsh define node02.xml
[root@localhost qemu]# virsh start node02
[root@localhost qemu]# virsh console node02
[root@localhost images]# chroot /mnt/kdisk/
bash: __vte_prompt_command: 未找到命令 //报错解决方案
[root@localhost /]# yum -y install vte-profile
[root@localhost /]# source /etc/profile