KVM的组件

  • ① kvm.ko:模块

    • API 应用程序编程接口
  • ② qemu-kvm:用户空间的工具程序;

    • qemu-KVM 是一种开源虚拟器,它为KVM管理程序提供硬件仿真。
    • 运行中的一个 kvm 虚拟机就是一个 qemu-kvm 进程,运行 qemu-kvm 程序并传递给它合适的选项及参数即能完成虚拟机启动,终止此进程即能关闭虚拟机;
  • ③ libvirt 虚拟化库:Libvirt是C工具包,

    • libvirt可以与最近版本的Linux(以及其他操作系统)的虚拟化功能进行交互。主包包含了导出虚拟化支持的libvirtd服务器。
    • libvirt 包含 C/S:
      • Client:

        • libvirt-client
        • virt-manager
      • Daemon:
        • libvirt-daemon

KVM模块load进内存之后,系统的运行模式

  • 内核模式:GuestOS 执行 IO 类的操作时,或其它的特殊指令操作时的模式;它也被称为"Guest-Kernel"模式;

  • 用户模式:Host OS的用户空间,用于代为GuestOS发出IO请求;

  • 来宾模式:GuestOS 的用户模式;所有的非IO类请求

部署KVM

下面开始套娃,我vmware开的虚拟机,给了4C16G,KVM的最低要求是内存不能低于4G

基础配置

  • 必须跑在 x86 系统的架构上

  • 必须支持硬件级虚拟化

    • vmx: Intel VT-x
    • svm: AMD AMD-v
  • 虚拟机上再虚拟化,需开启虚拟化 Intel VT-x/EPT

判断CPU是否支持硬件虚拟化

  1. # egrep -i 'vmx|svm|lm' /proc/cpuinfo
  • 注意:vmx 或 svm 必须出现一个,表示是支持的

    • vmx: Intel VT-x
    • svm: AMD AMD-v
  1. flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq 'vmx' ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt arat spec_ctrl intel_stibp flush_l1d arch_capabilities

检测 kvm 模块是否装载

  1. # lsmod | grep kvm
  2. kvm_intel 183621 0
  3. kvm 586948 1 kvm_intel
  4. irqbypass 13503 1 kvm

如果没有装载 kvm 模块,执行 modprobe kvm 命令即可

安装用户端工具 qemu-kvm

  1. # yum install -y libvirt* virt-* qemu-kvm*
  • libvirt 虚拟机管理
  • virt 虚拟机安装克隆
  • qemu-kvm 管理虚拟机磁盘

安装的比较多,有300多个包

启动服务

  1. # systemctl start libvirtd.service

查看网卡

  1. # virsh net-list
  2. Name State Autostart Persistent
  3. ----------------------------------------------------------
  4. default active yes yes

配置桥接网卡br0

这一步,根据实际情况操作,启动KVM后,会生成virbr0网卡,供KVM创建的虚拟机使用,KVM默认虚拟机的网络为NAT模式

先备份一下网卡配置文件,万一有问题,还能恢复

如果是CentOS发行版,可以关掉NetworkManager服务,免得他捣乱

  1. # systemctl disable NetworkManager --now
  1. # virsh iface-bridge eth0 br0

把自己的物理网卡 eth0 作为交换机,把 br0 当网卡,提供IP(切记,别复制直接用,将eth0改为自己的网卡名称,使用ip a命令可以查看自己的网卡名称)

注意:命令可能会卡死或出错,终端被强制退出;等一会,在登录就OK 了

  1. # cp /etc/libvirt/qemu/networks/default.xml /etc/libvirt/qemu/networks/br0.xml
  2. # vim /etc/libvirt/qemu/networks/br0.xml
  1. <network>
  2. <name>br0</name>
  3. <forward mode='bridge'/>
  4. <bridge name='br0'/>
  5. </network>
启动br0网卡
  1. # virsh net-define /etc/libvirt/qemu/networks/br0.xml
  2. # virsh net-autostart br0
  3. # virsh net-start br0
  4. # virsh net-list
  5. Name State Autostart Persistent
  6. ----------------------------------------------------------
  7. br0 active yes yes
  8. default active yes yes

使用KVM创建虚拟机

图形化界面,可以使用 virt-manager 来创建虚拟机,都是点点点的操作

这里就使用命令行的方式创建虚拟机了

注意:需要先上传一个系统镜像文件到KVM服务器上

使用VNC的方式

安装VNC
  1. # yum install -y tightvnc
使用命令创建虚拟机
  1. # mkdir /opt/kvm
  2. # virt-install --virt-type kvm \
  3. --name suse12-sp3 \
  4. --memory 2048 \
  5. --vcpus 1 \
  6. --disk /opt/kvm/suse12-sp3.qcow2,format=qcow2,size=30 \
  7. --cdrom /opt/kvm/SLE-12-SP3-Server-DVD-x86_64-GM-DVD1.iso \
  8. --network network=default \
  9. --graphics vnc,listen=0.0.0.0,port=5900 \
  10. --noautoconsole

打开VNC,输入本机的IP加上创建的时候指定的端口5900,即可开始安装虚拟机

端口是自定义的,并非固定的5900

  1. # vncviewer # 打开 VNC

使用VNC部署的虚拟机,当虚拟机启动的时候,会自动启用创建时所指定的端口,可以再次使用VNC远程连接虚拟机,当虚拟机关机的时候,端口也会自动关闭

  1. # 关机状态下的虚拟机,需要加上--all参数才会看得到
  2. # virsh list --all
  3. Id Name State
  4. ----------------------------------------------------
  5. - suse12-sp3 shut off
  6. # ss -nltp | grep 5900
  1. # virsh start suse12-sp3
  2. Domain suse12-sp3 started
  3. # virsh list --all
  4. Id Name State
  5. ----------------------------------------------------
  6. 6 suse12-sp3 running
  7. # ss -nltp | grep 5900 # 虚拟机启动后,端口就出来了
  8. LISTEN 0 1 *:5900 *:* users:(("qemu-kvm",pid=31317,fd=19))
参数说明
参数 说明
--virt-type 要使用的虚拟化名称(kvm, qemu, xen, …)
--name 虚拟机的名称
--memory 配置内存大小,默认单位为MiB
--vcpus 配置虚拟 CPU(vcpu) 数量
--disk 指定存储的各种选项
--cdrom 安装的介质
--network 虚拟机使用的网络接口,可以使用 virsh net-list 命令查看当前拥有的网络接口
--graphics 配置虚拟机的显示设置,有vnc、none、spice
--noautoconsole 不要自动尝试连接到客户端控制台

不使用VNC的方式

  1. # virt-install --virt-type=kvm \
  2. --name=centos7.7 \
  3. --vcpus=1 \
  4. --memory=2048 \
  5. --location /opt/kvm/CentOS-7.7-x86_64-DVD-1908.iso \
  6. --disk /opt/kvm/centos7.7.qcow2,format=qcow2,size=30 \
  7. --network network=default \
  8. --graphics none \
  9. --extra-args='console=ttyS0'

使用kickstart文件的方式

  1. # centos系统安装完成后,在/root目录下会有一个cfg后缀的kickstart文件
  2. # cp anaconda-ks.cfg /opt/kvm/
  3. # cd /opt/kvm/
  4. # vim anaconda-ks.cfg

由于kvm安装的虚拟机,磁盘都是vda,所以需要将文件内的sda全部修改为vda

由于虚拟机分配的是100G,但是KVM创建的虚拟机,咱给的是30G,所以需要修改分区,为了省事,直接使用了自动分区autopart --type=lvm

kickstart文件之前没接触过,就没有过多的修改了,以后有时间再去研究一下

  1. #version=DEVEL
  2. # System authorization information
  3. auth --enableshadow --passalgo=sha512
  4. # Use graphical install
  5. # graphical
  6. text
  7. # Run the Setup Agent on first boot
  8. firstboot --enable
  9. ignoredisk --only-use=vda
  10. # Keyboard layouts
  11. keyboard --vckeymap=us --xlayouts='us'
  12. # System language
  13. lang en_US.UTF-8
  14. # Network information
  15. network --bootproto=dhcp --device=eth0 --ipv6=auto --activate
  16. network --hostname=localhost.localdomain
  17. # Root password
  18. rootpw --iscrypted $6$3IMre6QwQrXPP1tr$2t6ACeLAG/Ogg.nSdX.iNwxZLkrpN.sC6u/e6GYqV.GOvsmA1zu9rA7ceYZmgUvWgPy2NyuM8q4S75Kk9cjKn.
  19. # System services
  20. services --enabled="chronyd"
  21. services --disabled="NetworkManager"
  22. services --disabled="firewall"
  23. # System timezone
  24. timezone Asia/Shanghai --isUtc --nontp
  25. # System bootloader configuration
  26. bootloader --location=mbr --boot-drive=vda
  27. # Partition clearing information
  28. clearpart --all --initlabel --drives=vda
  29. # Disk partitioning information
  30. autopart --type=lvm
  31. %packages
  32. @^minimal
  33. @core
  34. @development
  35. @system-admin-tools
  36. chrony
  37. %end
  38. %addon com_redhat_kdump --disable --reserve-mb='auto'
  39. %end
  1. # virt-install --virt-type=kvm \
  2. --name=centos7.7-ks \
  3. --vcpus=1 \
  4. --memory=2048 \
  5. --location /opt/kvm/CentOS-7.7-x86_64-DVD-1908.iso \
  6. --disk /opt/kvm/centos7.7-ks.qcow2,format=qcow2,size=30 \
  7. --network network=default \
  8. --graphics none \
  9. --initrd-inject=/opt/kvm/anaconda-ks.cfg \
  10. --extra-args='ks=file:/anaconda-ks.cfg console=ttyS0'

CentOS 7 部署 KVM 虚拟化的更多相关文章

  1. Linux 部署KVM虚拟化平台

    简单介绍 KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案.KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Lin ...

  2. 在Centos6.5上部署kvm虚拟化技术

    KVM是什么? KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是一个 Linux 的一个内核模块,该内核模块使得 Linux 变成了一个 Hyperv ...

  3. kvm虚拟化管理平台WebVirtMgr部署-完整记录(1)

    公司机房有一台2U的服务器(64G内存,32核),由于近期新增业务比较多,测试机也要新增,服务器资源十分有限.所以打算在这台2U服务器上部署kvm虚拟化,虚出多台VM出来,以应对新的测试需求.当KVM ...

  4. centos7.2 kvm虚拟化管理平台WebVirtMgr部署

    在服务器上部署kvm虚拟化,虚出多台VM出来,以应对新的测试需求.当KVM宿主机越来越多,需要对宿主机的状态进行调控,决定采用WebVirtMgr作为kvm虚拟化的web管理工具,图形化的WEB,让人 ...

  5. KVM虚拟化管理平台WebVirtMgr部署及使用

    KVM虚拟化管理平台WebVirtMgr部署及使用   需求: 公司机房有一台2U的服务器(64G内存,32核),由于近期新增业务比较多,测试机也要新增,服务器资源十分有限.所以打算在这台2U服务器上 ...

  6. Kvm虚拟化的一种打包及部署方案(采用tar包,lvm方式)

    Kvm虚拟化的一种打包部署方案(采用tar包,lvm方式) –-–-–-2016年终总结 一 毕业之后跟师兄学到的第一块主要内容,理解花了不少时间.期间经历了shell的入门.linux基础知识入门. ...

  7. kvm虚拟化管理平台WebVirtMgr部署-完整记录(2)

    继上一篇kvm虚拟化管理平台WebVirtMgr部署-完整记录(1),接下来说说WebVirtMgr的日常配置:添加宿主机,创建虚机,磁盘扩容,快照等具体操作记录如下: 一.配置宿主机1.登录WebV ...

  8. centos vmware centos6.6 64位 kvm虚拟化安装配置 第四十二节课

    centos vmware centos6.6 64位 kvm虚拟化安装配置     第四十二节课 上半节课 下半节课 f

  9. kvm虚拟化管理平台WebVirtMgr部署-完整记录(3)

    继下面三篇文章完成了kvm虚拟化管理平台webvirtmgr环境的部署安装:kvm虚拟化管理平台WebVirtMgr部署-虚拟化环境安装-完整记录(0)kvm虚拟化管理平台WebVirtMgr部署-完 ...

随机推荐

  1. Android官方文档翻译 五 1.3Building a Simple User Interface

    Building a Simple User Interface 创建一个简单的用户界面 This lesson teaches you to 这节课将教给你: Create a Linear Lay ...

  2. dubbo接口方法重载且入参未显式指定序列化id导致ClassCastException分析

    问题描述&模拟 线上登录接口,通过监控查看,有类型转换异常,具体报错如下图 此报错信息是dubbo consumer端显示,且登录大部分是正常,有少量部分会报类型转换异常,同事通过更换方法名+ ...

  3. conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

    conda : 无法将"conda"项识别为 cmdlet.函数.脚本文件或可运行程序的名称.请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次. 解决办法: 没有添加系 ...

  4. 【记录一个问题】thinkpad x1笔记本,安装ubuntu 16后,拔掉U盘,总是启动到windows,无法启动到ubuntu

    如题 昨天使用ubuntu 18没有这个问题 ============================= 12:38 1.安装完成出现重启后,一定要拔掉U盘 2.BIOS里面的security boo ...

  5. 【小记录】arm64下的原子加

    1.代码中使用atomic_add aarch64下面并没有任何关于atomic的头文件 编译出现错误: /Users/ahfu/code/android/android-ndk-r14b/toolc ...

  6. Cesium入门8 - Configuring the Scene - 配置视窗

    Cesium入门8 - Configuring the Scene - 配置视窗 Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coini ...

  7. echart的x轴或y轴区间标签如何从大到小排列

    1.有时候我们做echart时,从后台接收返回回来的数据,没有按顺序排列,这里我遇到的是区间的值,看图 我这里是处理好了的,一开始,50-100这个区间在数组的最后一列,也就是在150-200后面的这 ...

  8. golang中goroutine协程调度器设计策略

    goroutine与线程 /* goroutine与线程1. 可增长的栈os线程一般都有固定的栈内存,通常为2MB,一个goroutine的在其声明周期开始时只有很小的栈(2KB),goroutine ...

  9. kubernetes之部署dashboard 和heapster

    部署dashboard之前,先确保traefik https方式部署成功,这样就可以通过 https 域名的方式访问dashboard,无需kube-proxy转发了.假设traefik-ingres ...

  10. Android Studio IDE 插件开发

    作者:字节跳动终端技术--周宸韬 概述 这篇文章旨在向读者介绍IntelliJ IDE插件的开发流程以及常用的一些通用功能,任何基于IntelliJ开发的IDE都可以通过该方式制作插件,例如Andro ...