虚拟机技术 kvm
在windows中使用安装Vmware 可以构建多个虚拟机环境,在不同的虚拟机环境中,安装不用的操作系统。目的:实现各个虚拟机之间程序的隔离,每个虚拟机里面跑一个程序,他们相互直接隔离,增加安全性。
linux的kvm
为什么要用到虚拟机技术?
一个服务器性能很强,如果只运行一个服务或一个程序的话,对硬件资源造成巨大浪费,就想在上面跑多个程序,但是跑多个程序,如果一个程序存在漏洞,对其他程序同样会造成安全隐患,那么虚拟机的环境是:在一台主机上虚拟出多个虚拟计算机出来,每个计算机安装操作系统,里面可以运行不同的程序,这样的话不同虚拟机之间是相互隔离的,即使某个虚拟机当中他的程序可能出现安全威胁了,它仅仅影响到的是他自己虚拟机的环境,而不会影响其他虚拟机里面程序资源造成影响,也不会对操作系统自身造成安全威胁。
为了更合理的使用计算机资源,使多个程序或服务之间增加隔离安全性而是用的技术。
kvm技术,以后还会讲性能更好的技术:容器技术,他是一个轻量级的虚拟化技术,如果使用虚拟机的话,那么就得从每台虚拟机上安装一个操作系统,然后再运行程序,这样每台都要安装操作系统,每个操作系统对系统资源占用还是挺大的,容器技术:只提供了每个程序所运行的基本环境,就不需要独立的操作系统了,每个虚拟机都不需要依赖操作系统,也就意味着它占用的资源少,但同样和虚拟机技术一样具有很好的隔离性!
使用kvm技术活容器技术的目的:为了合理利用系统资源,并且增加隔离性或者安全性。
KVM是Kernerl Virtual Machine的简写 内核 虚拟 计算机 基于内核的一种虚拟化技术
在当前主机上安装了一个linux操作系统 首先操作系统有内核部分 然后是外围程序
用户对计算机操作的时候 通过外围程序 然后解释给 内核 由内核去驱动硬件
而今天的kvm是基于内核的,他相关的程序模块是在内核当中的,他直接可以对硬件进行驱动,就意味着他的效率高
kvm结构:一台电脑有硬件(内存硬盘处理器等)接下来有内核程序负责对硬件进行驱动,kvm来讲他内核当中的模块。
把这个程序装上后 可以在他提供的环境中安装不同的虚拟机,和Vmware一样,可以装linux系统可以装windows系统等
linux中每个虚拟机 称为一个客户机而作为linux操作系统本身,或者配置了kvm的这个操作系统本身称为宿主主机
比如拿windows来说 windows是一个宿主主机,而Vmware所提供的的各个虚拟机称为客户机
kvm安装
1、首先检查系统是否支持kvm,
a、系统是x86的,通过命令
linux内核是2.6以上的都支持
基本都是3.10的了
要求cpu支持 现在所有电脑的cpu都是支持虚拟化技术的
只不过当前windows当中一个虚拟机上要实现的话,就要根据虚拟机cpu给他指定支持虚拟化 实际的话不需要
当前我们的环境略微复杂一点:
首先我们当前主机操作系统是windows
windows中安装了Vmware
Vmware中 有很多虚拟机 其中有一个linux系统
那么实现今天这个内容的时候 是在这个linux 中安装的kvm
在kvm中再安装linux系统,也可以装windows系统
而实际的是我上面就一个服务器上面就装了个linux系统 然后它里面运行KVM
KVM里面装虚拟机 也可能是linux 也可能是windows
这样的结构就和当前系统装了Vmware差不多
打开虚拟机 看其他要求
下面两张图是给虚拟机打开 应用虚拟化技术
要求内存大些 给linux系统 大点内存
打开一个虚拟机 将他关机
把内存调大些4G-8G左右 启动计算机
先去看下当前cpu是否已经支持虚拟化了
命令
cat /proc/cpuinfo
cat /proc/cpuinfo | grep vmx
查看cpu型号以及他的相关性能的命令
其中flags 代表的cpu具有的一些性能,cpu很聪明 具有的一些功能,其中有个vmx 代表cpu支持虚拟化
其中intel cpu支持会有vmx,amd cpu支持会有svm
在接下来看下内核模块
lsmod
mod=模块
lsmod | grep kvm
上图以及过滤出来了 也就说内核当中的kvm模块 以及被激活了 工作了
当前cpu也支持了
相当于这个软件以及装上去了
如图 linux代表宿主主机 他有网卡 连接外部网络 其中也有些其他网卡 比如v‘1 v8 类似这种网卡 在这种环境中 先不管 v1 和 v8 了
当前主机给他设置ip地址的话 外部主机可以访问到 宿主系统 访问到最外面的linux
他原来是有ip地址的 当前的网卡是ens33
在kvm中 每个虚拟机也有一个网卡 都是ens33
现在呢 需要让外部主机能访问到 客户机
动作:现在 ens33 是个普通网卡 把他身份改变一下 改成网桥 网桥想象成交换机 突然这个设备多了很多口出来 想象成网桥了 接下来 客户机设备都连接到 交换机(网桥)上了 那问题来了 如果这个网卡改成网桥了话 那么别的主机怎么访问这个宿主主机 那么针对这个网桥设置一个ip地址 也就是说交换机可以设置ip地址 是作为管理ip
网桥名字改成br0
第一个动作 先把ens33这个网卡改变身份 改变一个身份 改变成网桥 叫 br0
随后给br0 设置ip地址 当你访问br0的ip地址的话 就相当于 访问到这个设备所对应的操作系统 也就是外面这个 宿主主机
那就下来 里面内部主机 的ip地址 只要和br0 的ip地址在同网段 那么外边的主机就可以访问到他们了 在这把br0想象成交换机 他们之间通信也是没问题的
为了保证访问的时候ip地址不发生变化,先去动态获取地址,动态获取地址为了能与外部进行通信,随后看地址多少,去改网卡ens33名称为br0 改完后再把动态获取的ip 固化写上去 因为获取的肯定与外网能通信的 为了避免ip地址一会就变了 所以就固化下来
随后里面两台主机 设置和固化的ip同一网段就可以了
如上图
windows中有网卡 还有v1 和v8 当前Vmware虚拟机 的linux 网卡 桥节点是v8 v8可以通过外部网络连接 访问外部网络 原来的时候宿主主机是可以访问外部网络的(这里指的宿主主机是Vmware里的linux主机)现在把ens33 改成桥节点 在接下来 在里面开始安装虚拟机 装完了 相当于给他连上去了 不要管外部环境 就管linux 虚拟机
就相当于这个环境了
好了
开始获取ip地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
vim /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.254.128
NETMASK=255.255.255.0
GATEWAY=192.168.254.2
DNS1=192.168.254.2
systemctl restart network
重启网络服务
ifconfig nes33
这时候看ens33 是没有ip的
ifconfig br0
br0 是有ip 的
用xshell远程 是可以的 ssh root@192.168.254.128 可以远程进行操作
无形当中 相当于把我网卡弄出好多接口出来
第二步:
启动kvm 管理工具
virt-manager
上图是在本地启动的 也可以在windows远程
找到他 点开
填写主机ip
协议选择ssh
用户名root
设置密码
命令写
virt-manager
然后就在上图这个界面当中创造虚拟机
对虚拟机可以进行克隆、做快照、安装系统。
第一:现在需要把光盘镜像准备好
一会给 在安上KVM当中给虚拟机安装系统的时候 需要用到光盘
需要先创建个目录 把光盘镜像弄过来
第二:每个虚拟机上面所对应的操作系统相关的文件,可以和windows中Vmware的各个虚拟机一样,散放到硬盘里。
还有一种方式,他创建一个磁盘,称为存储卷
一会安装操作系统的时候所有文件都放到这个磁盘里面
再创建一个操作系统 他又有一个磁盘,这样的话便于管理,就不是散放了
创建两个目录 存放光盘镜像 一个是存放光盘镜像的一个是存放虚拟机所对应的磁盘的
创建目录 目录随意
mkdir -p /data_kvm/{centos7,iso} 等同于
mkdir -p /data_kvm/centos7
mkdir -p /data_kvm/iso
在KVM操作界面当中需要创建两个选项
这两个选项分别对应刚刚创建的两个目录
根据图上顺序操作 ,创建 iso 和centos7
centos7 是存放虚拟机 的
ios 是存放光盘镜像的
然后在centos7目录中创建存储卷
每个虚拟机都单独放到一个硬盘上去在这个目录去添加卷
新加卷命名为centos7-1
关于磁盘的管理方式 选择qcow2 这个功能比较多
最大容量 选择10G
上面操作相当于搭建了个基本的环境
已经创建了基本环境了 接下里 可以弄虚拟机
把镜像传过去 把虚拟机拷 到
/data_kvm/iso/
cd /data_kvm/iso/
传过去就可以
选择镜像位置
因为我当前设置了内存6个G了 给他1G没问题 cpu设置1个
你这个虚拟机的数据装到哪里 是单独给你画出一个空间出来文件散放着
还是去选择你提前准备好的存储卷
点管理 去选择 之前创建的存储卷
给虚拟机起个名字
选择在安装前自定义配置
然后选择完成
在接下来对你当前的虚拟机进行相关调整
cpu不用管了 内存不用管了
引导选项 主机引导时启动虚拟机 这个选上 意思是:宿主linux系统启动时 linux是否启来,相当于windows启动的时候Vmware里面某个虚拟机 是否启动
点击显示协议 Spice 是否远程来管理你的虚拟机,如果远程来管理的话 你的键盘敲的时候有可能乱码 选择键映射 选择复制本地keymap
点应用
然后点开始安装
选择第一项 安装
选择中文 然后继续
选择最小化安装 分区选择自动分区就可以 点完成
设置root密码
如果我还想转个虚拟机也可以
按着前面步骤继续
到这个步骤 没有 存储卷了 再创建一个
安装完成后 得到这样一个页面 就说明成功了
输入用户root
回车输入密码 就可以使用了
那我们真正使用他的时候 不这么用的
第一首先需要给他设置ip地址
最小化安装是没有ifconfig 这个命令的 还有好多命令没有 因为最小化安装缺东西
如果要用到 某些软件 去有那个软件的linux主机 把包装上去就可以了
去别的linux主机里
which ifconfig
rpm -qf /usr/sbin/ifconfig
去别的linux主机里
which ifconfig
rpm -qf /usr/sbin/ifconfig
他的包名 是net-tools
yum -y install net-tools
让他动态产生ip
然后给他固化一下
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
其他都一样
vim 没有 vi 可以用
先去把vim这个包 安装一下
which vim
rmp -qf
然后yum 安装就可以了
固化完ip后
systemctl restart network
重启网络服务
使用xshell 可以远程连接了
然后对虚拟机做一些操作
首先做个快照
第二进行克隆
kvm命令管理虚拟机
管理虚拟机的时候需要在宿主主机上需要有一些相关kvm命令
yum -y install libguestfs-tools \\如果不安装,则virt-df virt-cat等命令没有
yum -y install libguestfs-tools
对虚拟机的开、关 查看虚拟机状态
virsh list --all #查看当前虚拟机
virsh shutdown centos7-1 #关闭centos7-1虚拟机
virsh start centos7-1 #开启centos7-1虚拟机
接下来创建快照 可以创建开机快照也可以 创建关机快照
创建快照命令
virsh snapshot-create centos7-1 #创建快照 不给他名字 他就自己生成一个编号
查看这个快照
virsh snapshot-list centos7-1 #查看centos7-1 的快照有谁
删除快照
virsh snapshot-delete centos7-1 1639313743
删除centos7-1 1639313743 快照
创建快照
virsh snapshot-create-as centos7-1 centos7-1-init
给centos7-1 创建快照 起名为centos7-1-init
virsh snapshot-revert centos7-1 centos7-init
回到虚拟机 centos7-1的centos7-init快照
克隆虚拟机要求在关机状态下克隆
virt-clone -o centos7-1 -n cenot7-2 -f /data_kvm/centos7/centos7-2.qcow2
克隆-o 被克隆的虚拟机名字
-n 新克隆出的虚拟机名字
-f 克隆后虚拟机文件放在哪里
clone=克隆
因为新克隆的虚拟机 固化的ip 和旧的一样 所有需要 进入更改一下 防止冲突
旧主机 会跟随linux启动而启动 新克隆的不会
virsh autostart cenot7-2
设置cenot7-2 为随机启动