1、linux
linux安装教程参考,https://blog.51cto.com/cloudcs/5245337
yum源配置
本地yum源配置:
8版本配置:将光盘iso挂载到某个目录,/dev/cdrom是/dev/sr0软链接,# mount /dev/cdrom /mnt,# ls /mnt
AppStream BaseOS EFI images isolinux media.repo TRANS.TBL
# cd /etc/yum.repos.d/ 全部备份后清空再新建 # vim test.repo
[os]
name = os
baseurl = file:///mnt/BaseOS
gpgcheck = 0
[app]
name = app
baseurl = file:///mnt/AppStream
gpgcheck = 0
清缓存 yum clean all,yum makecache 重新建立缓存,yum repolist all 列出所有repo
7版本配置,# vim test.repo
[os]
name = os
baseurl = file:///mnt
gpgcheck = 0
7版本在挂载点/mnt就有repodata和Packages目录(repodata引用Packages里面软件包)
8版本要进去挂载点/mnt的AppStream和BaseOS目录里面才有相应的repodata和Packages目录
在线yum源配置(要能连外网,找到vault过期源)
8版本,# cat abc.repo
[BaseOS]
name = BaseOS
baseurl = https://repo.huaweicloud.com/centos-vault/8.2.2004/BaseOS/x86_64/os/
gpgcheck = 0
[AppStream]
name = AppStream
baseurl = https://mirrors.aliyun.com/centos-vault/8.2.2004/AppStream/x86_64/os/
gpgcheck = 0
7版本,# cat abc.repo
[os]
name = os
baseurl = http://mirrors.aliyun.com/centos-vault/7.6.1810/os/x86_64
gpgcheck = 0
2、kvm
KVM(Kernel-based Virtual Machine)是基于内核的虚拟机,因为KVM本身是一个Linux内核模块,当安装有Linux系统的物理机安装了这个模块后,就变成了Hypervisor,而且还不会影响原先在该Linux上运行的其它应用程序。通过KVM模块的加载将Linux内核转变成Hypervisor,Linux本身运行于内核模式,主机进程运行于用户模式,虚拟机则运行于客户模式,使得转变后的Linux内核可以将主机进程和虚拟机进行统一的管理和调度。KVM本质是Linux内核中的虚拟化功能模块kvm.ko,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等。
在KVM虚拟化方案中,KVM主要用于管理CPU和内存的虚拟化,IO设备的虚拟化则由QEMU来完成。
QEMU是一个纯软件实现的开源(模拟)软件,它能够模拟整套虚拟机的实现,包括CPU、内存、IO设备、USB、网卡等。
KVM用来模拟CPU的运行,但缺少了对Network和I/O的支持。QEMU-KVM是一个完整的模拟器,它基于KVM上,提供了完整的I/O模拟支持。其中OpenStack为了跨VM性,所以不会直接控制QEMU-KVM,而是通过Libvirt的库去间接控制QEMU-KVM。
如上图所示KVM已经是内核模块,被看作是一个标准Linux字符集设备(/dev/kvm)。QEMU通过Libkvm应用程序接口,用fd(文件描述符)通过ioctl向设备驱动来发送创建、运行虚拟机命令。设备驱动KVM会解析命令。
KVM模块让Linux主机成为了一个虚拟机监视器(VMM),在原有执行模式基础上,增加了客户模式。在虚拟机运行时,三种模式的工作为:
客户模式:执行非I/O的客户代码,虚拟机运行在这个模式下。
用户模式:代表用户执行I/O指令,QEMU运行在这个模式下,它用来为虚拟机模拟执行I/O类的操作请求。
内核模式:实现客户模式切换,处理因I/O或者其他指令引起的从客户模式退出动作(VM-Exit)。KVM模块工作在这个模式下。此模式下可以真正操作硬件,当Guest OS执行I/O类操作或特权指令操作时,需要向用户模式提交请求,然后由用户模式再次发起硬件操作请求给内核模式,从而真正操作硬件。
用户模式的QEMU利用Libkvm通过ioctl进入内核模式,KVM模块为虚拟机创建虚拟内存、虚拟CPU后,执行VMLAUCH指令进入客户模式,加载Guest OS并执行。
如果Guest OS发生外部中断或影子页表缺失等情况,会暂停Guest OS(客户模式)的执行,退出客户模式到内核模式执行异常处理,之后重新进入客户模式,执行客户代码。
如果发生I/O事件或者信号队列中有信号到达,就会进入用户模式(QEMU)进行处理,执行模拟。
Libvirt是为了更方便地管理平台虚拟化技术而设计的开放源代码的应用程序接口、守护进程和管理工具,它不仅提供了对虚拟化客户机的管理,也提供了对虚拟化网络和存储的管理。
Libvirt对多种不同的Hypervisor的支持是通过一种基于驱动程序的架构来实现的。Libvirt对不同的Hypervisor提供了不同的驱动:对Xen有Xen的驱动,对QEMU/KVM有QEMU驱动。
3、安装KVM
VMware Workstation开启虚拟机嵌套虚拟机
配置yum源后安装以这个Virtualization开头的包组
8版本本地yum源# cat abc.repo
[os]
name = os
baseurl = file:///mnt/BaseOS
gpgcheck = 0
[app]
name = app
baseurl = file:///mnt/AppStream
gpgcheck = 0
7版本本地yum源# cat test.repo
[os]
name = os
baseurl = file:///mnt
gpgcheck = 0
# yum grouplist 查看包组 # yum grouplist |grep Virtualization
# yum groupinstall Virtualization* 安装以这个Virtualization开头的包组
调出kvm虚拟化管理界面,# virt-manager
查看当前正在运行的虚拟机 # virsh list
最小化安装用 # ip a 查看ip信息
1、KVM图形化创建虚拟机(先把要安装的iso镜像传进来)
2、在指定虚拟机存储空间用KVM图形化创建虚拟机
KVM图形化创建的虚拟机默认磁盘是存放在该目录下[root@centos8 ~]# ls /var/lib/libvirt/images/
centos7.qcow2
手工指定虚拟机存储路径,创建虚拟机所用的磁盘(磁盘空间不够进行扩容再安装)
[root@centos8 ~]# mkdir /data
[root@centos8 ~]# qemu-img create -f qcow2 /data/centos701.qcow2 20g
Formatting ‘/data/centos701.qcow2’, fmt=qcow2 size=21474836480 cluster_size=65536 lazy_refcounts=off refcount_bits=16
[root@centos8 ~]# ls /data
centos701.qcow2
之后通过图形化创建虚拟机的时候可以选择刚才手工创建的存储磁盘centos701.qcow2
3、KVM命令行创建虚拟机
其实就是把前面图形化点击的步骤转换成了命令行操作。
[root@centos8 ~]# qemu-img create -f qcow2 /data/centos702.qcow2 20g
Formatting ‘/data/centos702.qcow2’, fmt=qcow2 size=21474836480 cluster_size=65536 lazy_refcounts=off refcount_bits=16
virt-install \
--name centos702 \
--memory 1024 \
--vcpus 1 \
--disk path=/data/centos702.qcow2 \
--location /ios/CentOS-7.6-x86_64-DVD-1810.iso \
--network network=default \
--noautoconsole
但后面的系统安装还是要手工进行的,只是将KVM创建虚拟机过程命令行化了。
4、KVM命令行创建虚拟机-kickstart全自动安装 注意:不能多台在运行的虚拟机使用同一个镜像文件
注意:CentOS 8 版本是没有 kickstart 工具的,可以使用 CentOS 7 版本生成配置文件给 8 版本使用。
先用7版本生成配置文件,yum install -y system-config-kickstart.noarch 安装工具
system-config-kickstart 启动工具
将工具生成好的配置文件ks.cfg保存好,后上传到8版本安装。scp ks.cfg root@10.1.1.30:/root/
8版本根据配置文件ks.cfg自动安装,yum install -y httpd 安装apache
systemctl start httpd 启动apache服务
systemctl stop firewalld 关闭防火墙
qemu-img create -f qcow2 /data/centos703.qcow2 20g 创建虚拟机所用的磁盘
安装并启动httpd服务后就有/var/www/html目录即默认访问路径了,把ks.cfg传到/var/www/html目录
虽然是通过命令行可以进行全自动安装,但是因为有图形化界面,所以便于观察虚拟机的具体信息。
如果没有图形化界面呢?安装过程及安装完成后根本不知道虚拟机的ip地址,也不知道进行到哪一步了,这时候怎么办?在kickstart的配置文件ks.cfg中添加 console=ttyS0
bootloader --append=“net.ifnames=0 biosdevname=0 console=ttyS0” --location=mbr
就能通过 virsh console xxx 方式连接到虚拟机里面,相当于插上了一根console线。
[root@cen82 ks]# virsh console centos703
Connected to domain centos703
Escape character is ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-957.el7.x86_64 on an x86_64
localhost login: root
Password:
注:按ctrl + 】退出virsh console,而不是按ctrl + c 结束
要是已经安装好了可修改这个文件# vi /etc/default/grub,在里面加上console=ttyS0,再# grub2-mkconfig -o /boot/grub2/grub.cfg写入引导程序中后reboot重启就能virsh console 连虚拟机了。
virt-install \
--name centos703 \
--memory 2048 \
--vcpus 1 \
--disk path=/data/centos703.qcow2 \
--location /ios/CentOS-7.6-x86_64-DVD-1810.iso \
--network network=default \
--noautoconsole \
-x ks=http://10.1.1.30/ks.cfg
注意:不能多台在运行的虚拟机使用同一个镜像文件
KVM基本命令:
virsh --help 查看帮助
virsh list --all 列出所有虚拟机(包括正在运行的和关闭的)
virsh list 列出所有虚拟机(仅运行中的)
virsh start centos703 启动虚拟机
virsh shutdown centos703 关闭虚拟机
virsh reboot centos703 重启虚拟机
如果虚拟机关不了,强制关闭,非正常关闭,virsh destroy centos705
清除配置,virsh undefine centos705