-企业私有云容器化架构运维实战
虚拟化技术的分类:
平台虚拟化(Platform Virtualization),针对计算机和操作系统的虚拟化。 资源虚拟化(Resource Virtualization),针对特定的系统资源的虚拟化,比如内存、存储、网络资源等。 应用程序虚拟化(Application Virtualization),包括仿真、模拟、解释技术等。把硬件的东西变成了一个应用 我们通常所说的虚拟化主要是指平台虚拟化技术,通过使用控制程序(Control Program,也被称为 Virtual Machine Monitor(虚拟监控器VMM) 或Hypervisor,为用户提供抽象的、统一的、模拟的计算环境(称为虚拟机)。
然后打开虚拟机,安装kvm即可
查看cpu是否支持虚拟化 # cat /proc/cpuinfo | grep -E 'vmx|svm' "关闭防火墙和selinux" --注:如果虚拟机ping不通就把防火墙开起来 一般企业如果使用kvm虚拟机平台,都会把物理服务器装成Centos的操作系统,然后装上kvm,创建使用虚拟机 1.需求内核(rhel6以上): [root@kvm-server ~]# uname -r 3.10.0-1062.el7.x86_64 2.如果之前安装kvm了清理环境:卸载kvm [root@kvm-server ~]# yum remove `rpm -qa | egrep 'qemu|virt|kvm'` -y [root@kvm-server ~]# rm -rf /var/lib/libvirt /etc/libvirt/ 3.升级系统:(在安装虚拟机出错的情况下,一般是操作系统的版本问题) [root@kvm-server ~]# yum upgrade 4.安装软件: [root@kvm-server ~]# yum install *qemu* *virt* librbd1-devel -y 其实下载的是下面几款软件 [root@kvm-server ~]# yum install qemu-kvm libvirt virt-manager librbd1-devel -y qemu-kvm libvirt virt-manager qemu:模拟器 qemu-kvm : 主包 libvirt:api接口 virt-manager:图形化界面 #在所谓的kvm技术中,应用到的其实有2个东西:qemu+kvm kvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备; qemu是模拟IO设备(网卡,磁盘),kvm加上qemu之后就能实现真正意义上服务器虚拟化。 因为用到了上面两个东西,所以一般都称之为qemu-kvm。 libvirt则是调用kvm虚拟化技术的接口用于管理的,用libvirt管理方便,直接用qemu-kvm的接口太繁琐。 #kvm xen qemu三者区别: kvm与xen的区别; xen是红帽6之前红帽5的虚拟化应用,6出来之后用kvm替代了。 #kvm和qemu有什么关系: qemu就是一款开源的虚拟化软件,后来被红帽收购了,进行了优化变成了,qemu-kvm,这也是我们现在用的kvm全称。 jiKVM gustos图形方式部署安装虚拟机—需要掌握
[root@kvm-server ~]# virt-manager ==================== 下面就是点点点 #安装完成一台虚拟机之后,网络模式默认是NAT的。也只有这一种网络#####一、GuestOS安装问题解析
问题1:用图形安装guest os的时候卡住不动
解决:升级系统 [root@qfedu.com ~]# yum upgrade -y问题2:升级系统后安装guest os的时候还是卡住不动
解决:需要在安装宿主机的时候安装兼容性程序(有的同学就没有安装也可以使用,这可能是bug)问题3:如果安装了各种兼容程序之后还是不行
如果所有问题都排查过后还是安装不上guestos,最后的原因就是在安装宿主机系统的时候各种兼容性软件没有安装而且Yum也没有自动处理导致的
完全文本方式安装虚拟机
[root@kvm-server ~]# yum install -y vsftpd #安装ftp,并配置最后将镜像上传到ftp中 [root@kvm-server ~]# mkdir /var/ftp/centos7u4 [root@kvm-server IOS]# mount CentOS-7-x86_64-DVD-1708.iso /var/ftp/centos7u4/ [root@kvm-server ~]# virt-install --connect qemu:///system -n vm10 -r 2050 --disk path=/var/lib/libvirt/images/vm10.img,size=5 --os-type=linux --os-variant=centos7.0 --vcpus=1 --location=ftp://10.0.111.182/centos7u4 -x console=ttyS0 --nographics 用这种方式安装的操作系统有一个毛病:纯文本安装的输入时大小写莫名的变换,远程ssh没问题。内存不低于2G 注意: virt-install bash: virt-install: 未找到命令... # yum install libguestfs-tools -y # yum install virt-install.noarch -y 参数解释: -n name -r 以M为单位指定分配给虚拟机的内存大小 --disk 指定作为客户机存储的媒介 size以G为单位的存储 --os-type 系统类型 --os-variant 系统类型版本 --vcpus 指定核数,不能超过物理cpu --location 客户虚拟机安装源下载,必须为镜像挂载在ftp目录下 -x console=ttyS0 执行终端0 --nographics 无图形,文本模式按空格退出!
下面的操作根据提示点点就可以了
模板镜像+配置文件 方式安装虚拟机—需要掌握
1.虚拟机配置文件 [root@kvm-server ~]# ls /etc/libvirt/qemu networks vm2.xml 2.储存虚拟机的介质 [root@kvm-server ~]# ls /var/lib/libvirt/images/ vm2.img ============================== define方式创建好,不会启动 create方式创建好,会启动 实战: 1.拷贝模板镜像和配置文件 [root@kvm-server ~]# cp /etc/libvirt/qemu/vm2.xml /etc/libvirt/qemu/vm3.xml [root@kvm-server ~]# cp /var/lib/libvirt/images/vm2.img /var/lib/libvirt/images/vm3.img 2.修改配置文件 生成新的UUID [root@kvm-server ~]# uuidgen 2e3fa6db-ff7f-41c3-bc8f-0428e81ebb57 [root@kvm-server ~]# vim /etc/libvirt/qemu/vm3.xml domain type='kvm'> <name>vm3</name> #名字不能一样需要修改 <uuid>2e3fa6db-ff7f-41c3-bc8f-0428e81ebb57</uuid> #uuid不能一样需要修改 <memory unit='KiB'>1024000</memory> #内存,可选 <currentMemory unit='KiB'>1024000</currentMemory> #当前内存与上面定义一样 <vcpu placement='static'>2</vcpu> #cpu可选 <os> <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> </features> <cpu mode='custom' match='exact' check='partial'> <model fallback='allow'>SandyBridge-IBRS</model> <feature policy='require' name='md-clear'/> <feature policy='require' name='spec-ctrl'/> <feature policy='require' name='ssbd'/> </cpu> <clock offset='utc'> <timer name='rtc' tickpolicy='catchup'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <pm> <suspend-to-mem enabled='no'/> <suspend-to-disk enabled='no'/> </pm> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/vm3.img'/> #磁盘镜像需要修改 <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </disk> <controller type='usb' index='0' model='ich9-ehci1'> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/> </controller> <controller type='usb' index='0' model='ich9-uhci1'> <master startport='0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/> </controller> <controller type='usb' index='0' model='ich9-uhci2'> <master startport='2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/> </controller> <controller type='usb' index='0' model='ich9-uhci3'> <master startport='4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/> </controller> <controller type='pci' index='0' model='pci-root'/> <controller type='virtio-serial' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </controller> <interface type='network'> <mac address='52:54:00:82:d6:3c'/> #mac地址不能一样需要修改,只能修改后三段。 <source network='default'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'> <target type='isa-serial' port='0'> <model name='isa-serial'/> </target> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> <channel type='spicevmc'> <target type='virtio' name='com.redhat.spice.0'/> <address type='virtio-serial' controller='0' bus='0' port='2'/> </channel> <input type='tablet' bus='usb'> <address type='usb' bus='0' port='1'/> </input> <input type='mouse' bus='ps2'/> <input type='keyboard' bus='ps2'/> <graphics type='spice' autoport='yes'> <listen type='address'/> <image compression='off'/> </graphics> <sound model='ich6'> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </sound> <video> <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <redirdev bus='usb' type='spicevmc'> <address type='usb' bus='0' port='2'/> </redirdev> <redirdev bus='usb' type='spicevmc'> <address type='usb' bus='0' port='3'/> </redirdev> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/> </memballoon> <rng model='virtio'> <backend model='random'>/dev/urandom</backend> <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/> </rng> </devices> </domain> #必须修改name,uuid,mac地址,其余可选 用vim修改完之后需要define一下配置文件 [root@kvm-server ~]# virsh define /etc/libvirt/qemu/vm3.xml 重启一下: [root@kvm-server ~]# systemctl restart libvirtd 宿主机开启路由转发: [root@kvm-server ~]# vim /etc/sysctl.conf [root@kvm-server ~]# sysctl -p net.ipv4.ip_forward = 1 ============= 查看虚拟机列表: [root@kvm-server ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- - vm2 关闭 - vm3 关闭 或者如下:按需求点点就可以了。
2.修改配置文件方式: 我们给虚拟机vm3添加磁盘为例: 首先需要创建出要添加的磁盘 [root@kvm-server ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/vm4-1.qcow2 5G 注:创建空的磁盘文件:这里我们创建一个5G的磁盘,不过创建出来,通过ll -h查看大小,看不出它是5G,添加上之后才能看到 [root@kvm-server ~]# cd /etc/libvirt/qemu/ [root@kvm-server qemu]# vim vm3.xml/ 加好之后,启动虚拟机 [root@kvm-server qemu]# systemctl restart libvirtd [root@kvm-server qemu]# virsh list --all Id 名称 状态 ---------------------------------------------------- 6 centos7.0 running - vm3 关闭 [root@kvm-server qemu]# virsh start vm3 可以看到我们新添加的磁盘vdb #然后可以正常分区,制作文件系统,进行挂载虚拟机克隆
1.图形界面:Applications (左上角)-----> System Tools ------>Virtual Machine Manager 关闭要克隆的虚拟机,右键点击虚拟机选择Clone 2.在终端执行命令克隆 [root@kvm-server ~]# virt-clone -o vm2 --auto-clone 正在分配 'vm2-clone.qcow2' | 5.0 GB 00:00 成功克隆 'vm2-clone'。 -o origin-原始 [root@kvm-server ~]# virt-clone -o vm2 -n vm5 --auto-clone 正在分配 'vm5.qcow2' | 5.0 GB 00:00 成功克隆 'vm5'。 -n :指定新客户机的名字 [root@kvm-server ~]# virt-clone -o vm2 -n vm6 -f /var/lib/libvirt/images/vm6.img 正在分配 'vm6.img' | 5.0 GB 00:00 成功克隆 'vm6'。 -f ,--file NEW_DISKFILE:为新客户机使用新的磁盘镜像文件 这条命令在克隆的同时,可以指定镜像文件的位置和名称。 [root@kvm-server ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- - vm2 关闭 - vm2-clone 关闭 - vm3 关闭 - vm5 关闭 - vm6 关闭kvm高级命令
#建立虚拟机磁盘镜像文件: 磁盘镜像文件格式: 1.qed ----不用了 2.raw 原始格式,性能最好 直接占用你一开始给多少 系统就占多少 不支持快照 qcow 先去网上了解一下cow(写时拷贝copy on write) ,性能远不能和raw相比,所以很快夭折了,所以出现了qcow2(性能低下 早就被抛弃) 3.qcow2 性能上还是不如raw,但是raw不支持快照,qcow2支持快照。 #什么叫写时拷贝? raw立刻分配空间,不管你有没有用到那么多空间 qcow2只是承诺给你分配空间,但是只有当你需要用空间的时候,才会给你空间。最多只给你承诺空间的大小,避免空间浪费 工作当中用哪个?看你用不用快照。本身做快照也是需要存储空间的。 [root@kvm-server images]# pwd /var/lib/libvirt/images 建立qcow2格式磁盘文件: [root@kvm-server images]# qemu-img create -f qcow2 test.img 5G Formatting 'test.img', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off qemu-kvm qemu是早先的一个模拟器,kvm是基于qemu发展出来的。 建立raw格式磁盘文件: [root@kvm-server images]# qemu-img create -f raw test.raw 5G Formatting 'test.raw', fmt=raw size=5368709120 查看已经创建的虚拟磁盘文件: [root@kvm-server images]# qemu-img info test.img [root@kvm-server images]# qemu-img info test.raw ============================================================================= #挂载磁盘,,,先前条件:文件系统没有坏掉 将vm2虚拟机先关闭 查看vm2的磁盘镜像分区信息: [root@kvm-server images]# virt-df -h -d vm2 文件系统 大小 已用空间 可用空间 使用百分比% vm2:/dev/sda1 1014M 92M 922M 10% vm2:/dev/centos/root 3.5G 863M 2.6G 25% 1.创建一个挂载目录 [root@kvm-server images]# mkdir /test 2.挂载虚拟机的跟分区到test目录 [root@kvm-server images]# guestmount -d vm2 -m /dev/centos/root --rw /test/ [root@kvm-server images]# cd /test/ [root@kvm-server test]# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr [root@kvm-server test]# cat etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:997:User for polkitd:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 取消挂载 [root@kvm-server ~]# guestunmount /test然后我们开始做快照,图形化方式不再介绍
登录vm2的虚拟机: [root@vm2 ~]# mkdir /opt/test [root@kvm-server ~]# virsh snapshot-create-as vm2 vm2-snap3 已生成域快照 vm2-snap3 再次登录vm2的虚拟: [root@vm2 ~]# rm -rf /opt/test/ [root@kvm-server ~]# virsh shutdown vm2 [root@kvm-server ~]# virsh snapshot-create-as vm2 vm2-snap4 已生成域快照 vm2-snap4 查看快照 [root@kvm-server ~]# virsh snapshot-list vm2 名称 生成时间 状态 ------------------------------------------------------------ vm2-snap3 2019-10-30 15:27:15 +0800 running vm2-snap4 2019-10-30 15:29:37 +0800 shutoff 然后将vm2关闭,恢复到快照vm2.snap3 [root@kvm-server ~]# virsh snapshot-revert vm2 vm2-snap3 [root@kvm-server ~]# virsh start vm2 Domain vm2 started 在vm2虚拟机上查看 [root@vm2 ~]# ls /opt/ test 可以再恢复到vm2.snap4测试一下 删除虚拟机快照操作: [root@kvm-server ~]# virsh shutdown vm2 [root@kvm-server ~]# virsh snapshot-list vm2 名称 生成时间 状态 ------------------------------------------------------------ vm2-snap3 2019-10-30 15:27:15 +0800 running vm2-snap4 2019-10-30 15:29:37 +0800 shutoff [root@kvm-server ~]# virsh snapshot-delete --snapshotname vm2-snap3 vm2 已删除域快照 vm2-snap3 [root@kvm-server ~]# virsh snapshot-list vm2 名称 生成时间 状态 ------------------------------------------------------------ vm2-snap4 2019-10-30 15:27:15 +0800 running四种网络
NAT default方式:支持主机与虚拟机互访,虚拟机访问外界网络,但不支持外界访问虚拟机。 isolated 隔离,vmware--host-only:仅主机模式。外网不能访问虚拟机,虚拟机也不能访问外网 bridge ----桥接模式属于桥接口 路由模式nat网络
桥接网络
隔离网络
#查看管理接口对应的网卡 [root@kvm-server ~]# brctl show bridge name bridge id STP enabled interfaces virbr0 8000.525400831963 yes virbr0-nic vnet0 vnet1 注意:这里vnet网卡,是每台启动的虚拟机正在使用的网卡设备,每台虚拟机使用的不同 #从交换机上把vnet网卡删除: [root@kvm-server ~]# brctl delif virbr0 vnet0 来到vm2的虚拟机,ping不通百度 添加vnet网卡添加到交换机上: [root@kvm-server ~]# brctl addif virbr0 vnet0 来到vm2的虚拟机,恢复正常配置文件方式配置桥接:在宿主机上
先将kvm虚拟机关闭
配置文件方式配置桥接:在宿主机上 [root@kvm-server ~]# ip a #先找出宿主机用的哪个网卡设备,我的是enp0s25 [root@kvm-server ~]# cd /etc/sysconfig/network-scripts/ 1.定义网卡配置文件 [root@kvm-server network-scripts]# vim ifcfg-br0 #创建该桥接网卡,默认没有此文件需要新建 [root@kvm-server network-scripts]# cat ifcfg-br0 TYPE=Bridge NAME=br0 DEVICE=br0 ONBOOT="yes" BOOTPROTO=static IPADDR=10.0.111.182 #要和宿主机在一个网络,这里我用的是宿主机的ip GATEWAY=10.0.111.1 #宿主的网关,nat的是.2,桥接是.1 NETMASK=255.255.255.0 DNS1=114.114.114.114 DNS2=8.8.8.8 然后看清楚宿主机正在使用的网卡,修改配置文件,(将物理机网卡桥到桥接网卡) [root@kvm-server network-scripts]# cp ifcfg-enp0s25 ifcfg-enp0s25.back [root@kvm-server network-scripts]# vim ifcfg-enp0s25 NAME=enp0s25 #定义网卡设备名称 DEVICE=enp0s25 #宿主机正在使用的网卡设备 ONBOOT=yes BRIDGE=br0 #和ifcfg-br0文件里面的设备对应,新添加 2.重启libvirtd服务 [root@kvm-server network-scripts]# systemctl restart libvirtd 3.重启network服务 [root@kvm-server network-scripts]# systemctl restart network然后去查看有没有新设备生成
删除桥接网卡步骤: 1.删除br0的配置文件 2.修改正常网卡的配置文件 3.重启系统 [root@kvm-server network-scripts]# mv ifcfg-br0 ifcfg-br0.bak [root@kvm-server network-scripts]# mv ifcfg-enp0s25 ifcfg-enp0s25.bak [root@kvm-server network-scripts]# mv ifcfg-enp0s25.back ifcfg-enp0s25 [root@kvm-server network-scripts]# systemctl restart libvirtd [root@kvm-server network-scripts]# systemctl restart network [root@kvm-server network-scripts]# ping www.baidu.com PING www.a.shifen.com (39.156.66.14) 56(84) bytes of data. 64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=1 ttl=52 time=13.3 ms配置文件方式创建nat网络:
配置文件方式创建nat网络: [root@kvm-server ~]# cd /etc/libvirt/qemu/networks [root@kvm-server networks]# ls autostar default.xml [root@kvm-server networks]# cp default.xml nat1.xml [root@kvm-server networks]# vim nat1.xml重启服务
[root@kvm-server netwoeks]# systemctl restart libvirtd在某个(比如vm3)虚拟机去添加此设备测试
配置文件方式创建isolated网络隔离网络:这个模式我从来没用过,我们不再操作,有兴趣可以操作一下 [root@kvm-server networks]# cp default.xml isolated200.xml [root@kvm-server networks]# vim isolated200.xml 启动: [root@kvm-server networks]# systemctl restart libvirtd 开机自启动: [root@kvm-server networks]# virsh net-autostart isolated200 查看所有的网络: [root@kvm-server networks]# virsh net-list查看一个域的信息
virsh dominfo rhel6 启动虚拟机 virsh start vhostname 正常关闭虚拟机 virsh shutdown vhostname 强制关闭虚拟机 virsh destroy vhostname 取消定义一个域 virsh undefine vhostname //编辑默认虚拟网络配置文件 virsh net-edit default systemctl restart lirbvirtd 创建一个虚拟磁盘 qemu-img create -f qcow2 /home/virtimg/rhel6.img 10G 改变虚拟磁盘大小 qemu-img resize /home/virtimg/rhel6.img +1G qemu-img info /home/virtimg/rhel6.img 改变虚拟内存的大小 1 设置一个虚拟机的最多使用内存,前提是此虚拟机关闭状态 这里仅仅会更改配置文件中的设置 virsh setmaxmem centos3 4096M --config 2 启动虚拟机,当前实际使用的内存还是原来的大小 virsh start centos3 3 假如希望增加正在运行中的虚拟机的内存,使用如下命令 virsh setmem centos3 2048M 传文件到虚拟主机里 virt-install --filesystem /host/soource/dir,/dir/in/virthost在线添加删除硬盘
可以查看虚拟机所有磁盘
virsh domblklist vmname 准备一块虚拟磁盘 qemu-img create -f qcow2 /path/to/vm1-1.qcow2 2G在线添加硬盘
首先配置一份磁盘的xml文件,作为模板配置需要的参数项,比如: cache=writeback,io=third
disk_mod.xml [root@kvm-shark ~]# cat disk_mod.xml echo "<disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='writeback' io='threads'/> <source file='"${vdisk_path}"'/> <target dev='"${device_name}"' bus='virtio'/> </disk> "使用模板文件产生一个新的配置文件片段
[root@shark ~]# vdisk_path=/path/to/vm1-1.qcow2 [root@shark ~]# device_name=vdb [root@shark ~]# source disk_mod.xml > disk.xml 然后使用attach-device命令添加attach-device - 从一个XML文件附加装置
virsh attach-device vm1 disk.xml --persistentattach-device [–persistent] [–config] [–live] [–current] 选项 [–domain] domain name, id or uuid [–file] XML 文件 --persistent 让实时更改并且持久生效。 --config 影响下一次引导,域无论是否运行,都可以直接修改配置文件,单独使用,不会影响当前正确运行中的域 --live 影响运行的域,只能用于域启动的时候 --current 影响当前域 当前域处于关机状态下,会直接修改配置文件 当前域处于开机状态下,不会修改配置文件,临时生效而已,和单独使用 --live 一样。
永久移除vdb磁盘
virsh detach-disk vmname vdb --persistent虚拟硬盘名一般都是 vda vdb vdc, 可以利用 a-z 的连续行找到我们新建磁盘的名称。
# 目前虚拟机已经存在的盘符 disk_name_w="a b e f" declare -A tmp_arr for i in $disk_name_w do tmp_arr[$i]=1 done for i in {a..z} do w=${tmp_arr[$i]} if [ -z "$w" ];then disk_name=vd$i echo "磁盘名称是$disk_name" break fi done配置文件模板
# vim /etc/libvirt/qemu/vmmodel.xml <domain type='kvm'> <name>kvmname</name> <uuid>kvmuuid</uuid> <memory unit='KiB'>kvmmem</memory> <currentMemory unit='KiB'>kvmmem</currentMemory> <vcpu placement='static'>kvmcpu</vcpu> <os> <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> </features> <cpu mode='custom' match='exact' check='partial'> <model fallback='allow'>Haswell-noTSX</model> </cpu> <clock offset='utc'> <timer name='rtc' tickpolicy='catchup'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <pm> <suspend-to-mem enabled='no'/> <suspend-to-disk enabled='no'/> </pm> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='kvmimg'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk> <controller type='usb' index='0' model='ich9-ehci1'> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/> </controller> <controller type='usb' index='0' model='ich9-uhci1'> <master startport='0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/> </controller> <controller type='usb' index='0' model='ich9-uhci2'> <master startport='2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/> </controller> <controller type='usb' index='0' model='ich9-uhci3'> <master startport='4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/> </controller> <controller type='pci' index='0' model='pci-root'/> <controller type='virtio-serial' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </controller> <interface type='network'> <mac address='52:54:00:kvmmac'/> <source network='default'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'> <target type='isa-serial' port='0'> <model name='isa-serial'/> </target> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> <input type='mouse' bus='ps2'/> <input type='keyboard' bus='ps2'/> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </memballoon> </devices> </domain>B:字母数字与字母数字分割,非字母数字与非字母数字分割
&:表示原来的内容
随机生成mac地址
其中方式如下: # echo `openssl rand -hex 1`:`openssl rand -hex 1`:`openssl rand -hex 1` 99:6e:67 # openssl rand -hex 3 | sed -r 's/(..)(..)(..)/\1:\2:\3/g' 94:89:e3 # openssl rand -hex 3 | sed -r 's/..\B/&:/g' c5:66:90Centos设置输入法
列出所有的虚拟机
virsh list --all查看一个域的信息
virsh dominfo rhel6 启动虚拟机 virsh start vhostname 正常关闭虚拟机 virsh shutdown vhostname 强制关闭虚拟机 virsh destroy vhostname 取消定义一个域 virsh undefine vhostname //编辑默认虚拟网络配置文件 virsh net-edit default systemctl restart lirbvirtd 创建一个虚拟磁盘 qemu-img create -f qcow2 /home/virtimg/rhel6.img 10G 改变虚拟磁盘大小 qemu-img resize /home/virtimg/rhel6.img +1G qemu-img info /home/virtimg/rhel6.img 改变虚拟内存的大小 1 设置一个虚拟机的最多使用内存,前提是此虚拟机关闭状态 这里仅仅会更改配置文件中的设置 virsh setmaxmem centos3 4096M --config 2 启动虚拟机,当前实际使用的内存还是原来的大小 virsh start centos3 3 假如希望增加正在运行中的虚拟机的内存,使用如下命令 virsh setmem centos3 2048M 传文件到虚拟主机里 virt-install --filesystem /host/soource/dir,/dir/in/virthost在线添加删除硬盘
可以查看虚拟机所有磁盘
virsh domblklist vmname 准备一块虚拟磁盘 qemu-img create -f qcow2 /path/to/vm1-1.qcow2 2G在线添加硬盘
首先配置一份磁盘的xml文件,作为模板配置需要的参数项,比如: cache=writeback,io=third
disk_mod.xml [root@kvm-shark ~]# cat disk_mod.xml echo "<disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='writeback' io='threads'/> <source file='"${vdisk_path}"'/> <target dev='"${device_name}"' bus='virtio'/> </disk> "使用模板文件产生一个新的配置文件片段
[root@shark ~]# vdisk_path=/path/to/vm1-1.qcow2 [root@shark ~]# device_name=vdb [root@shark ~]# source disk_mod.xml > disk.xml 然后使用attach-device命令添加attach-device - 从一个XML文件附加装置
virsh attach-device vm1 disk.xml --persistentattach-device [–persistent] [–config] [–live] [–current] 选项 [–domain] domain name, id or uuid [–file] XML 文件 --persistent 让实时更改并且持久生效。 --config 影响下一次引导,域无论是否运行,都可以直接修改配置文件,单独使用,不会影响当前正确运行中的域 --live 影响运行的域,只能用于域启动的时候 --current 影响当前域 当前域处于关机状态下,会直接修改配置文件 当前域处于开机状态下,不会修改配置文件,临时生效而已,和单独使用 --live 一样。
永久移除vdb磁盘
virsh detach-disk vmname vdb --persistent虚拟硬盘名一般都是 vda vdb vdc, 可以利用 a-z 的连续行找到我们新建磁盘的名称。
# 目前虚拟机已经存在的盘符 disk_name_w="vda vdb vdc vde" declare -A tmp_arr for i in $disk_name_w do tmp_arr[$i]=1 done for i in {a..z} do w=${tmp_arr[vd$i]} if [ -z "$w" ];then disk_name=vd$i echo "磁盘名称是$disk_name" break fi done下面是命令行方式创建虚拟磁盘的
qemu-img create -f qcow2 /home/kvm/data/kube-master.qcow2 50G参数说明:
--arch 指定平台架构--virt-type 虚拟化类型 kvm 是最佳选择--name 虚拟机名称--memory 内存大小--vcpus cpu 核心数--os-type 操作系统类型--os-variant 发行版本,必须是 virt-install 规定好的--network 网络类型 default 是 NAT 类型的网络--graphics 是否使用 vnc 这个的 none 意思是不使用--location ISO 镜像文件路径--initrd-inject 内核注入,指定一个 ks.cfg 文件的路径,会把此文件主人到跟目录下--extra-args 额外的参数 ks=file:/ks.cfg 这个值不要变console=ttyS0 表示使用 console 口控制服务器 --disk 指定虚拟硬盘文件路径在创建或自定义Kickstart文件时,在尝试在安装中使用它之前验证它是否有效很有用。红帽企业Linux 7包含ksvalidator命令行实用程序,可用于执行此操作。该工具是pykickstart软件包的一部分。要安装此软件包,请用 root 执行以下命令:
yum install pykickstart安装软件包后,可以使用以下命令验证Kickstart文件:
ksvalidator /path/to/kickstart.ks将 /path/to/kickstart.ks 替换为要验证的Kickstart文件的路径。
请记住,验证工具有其局限性。Kickstart文件可能非常复杂。ksvalidator可以确保语法正确并且文件不包含不建议使用的选项,但是不能保证安装成功。它也不会尝试验证的%pre,%post并且%packagesKickstart文件的各个部分。
ks.cfg 示例 #platform=x86, AMD64, 或 Intel EM64T #version=DEVEL # Install OS instead of upgrade install # Keyboard layouts keyboard 'us' # Root password rootpw --iscrypted $1$KXeyOPUO$5JlUe3pPpi.hplHB71JdX/ # 系统语言 #lang zh_CN.UTF-8 lang en_US # System authorization information auth --useshadow --passalgo=sha512 # Use CDROM installation media #cdrom # Use text mode install # 使用字符界面安装操作系统 text # Do not configure the X Window System # 不配置图形界面系统 skipx # SELinux configuration selinux --disabled # Firewall configuration firewall --disabled # 设置动态获取 IP network --bootproto=dhcp --device=eth0 --onboot=on network --hostname=HOSNAME # 设置静态 IP # network --bootproto=static --device=eth0 --gateway=192.168.122.1 --ip=192.168.122.100 --nameserver=192.168.122.1 --netmask=255.255.255.0 --activate # 系统安装完成后 重启系统 #halt reboot # System timezone 系统时区 timezone Asia/Shanghai # System services 系统启动时候自动启动的服务 services --enable="chronyd" # System bootloader configuration #系统启动引导方式 vda 是kvm 虚拟机时候的第块磁盘名称 bootloader --location=mbr --boot-drive=vda # 清除主引导记录 zerombr # 删除原来的分区和磁盘标签 clearpart --all --initlabel # 磁盘分区信息,这里采用的是 lvm 自动分区 autopart --type=lvm # 下面是自定义分区 #part /boot --fstype="xfs" --ondisk=vda --size=200 #part / --fstype="xfs" --ondisk=vda --size=10040 #part /var --fstype="xfs" --ondisk=vda --size=2048 #part /home --fstype="xfs" --ondisk=vda --size=2048 # 安装软件 %packages @^minimal @core chrony %end # 禁用 kdump