• 1.什么是虚拟化?

虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。

物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。

那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢? 
这个主要是通过一个叫做 Hypervisor 的程序实现的。

  • 2.虚拟化的分类

①Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型。

②物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理。KVM、VirtualBox 和 VMWare Workstation 都属于这个类型。

理论上讲: 
①号虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比2型要高; 
②号虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。

  • 3.KVM的介绍

KVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。 
KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存。

那 IO 的虚拟化,比如存储和网络设备由谁实现呢? 
这个就交给 Linux 内核和Qemu来实现。

说白了,作为一个 Hypervisor,KVM 本身只关注虚拟机调度和内存管理这两个方面。IO 外设的任务交给 Linux 内核和 Qemu。

  • 4.Libvrit

Libvirt是KVM的管理工具,Libvirt包含3个组成部分:后台daemon程序libvirtd、API库、和命令行工具virsh
①libvirtd是服务程序,接收和处理API请求;
②API库是可以基于libvirt的开发工具,例如vir-manager
③virsh是KVM的命令行工具,比如在实际生产中,图形界面无法使用或无法通过vnc链接云主机时,可以通过virsh命令行进行操作。

  • 5.KVM的安装

(1)查看cpu是否支持虚拟化

[root@linux-node1 ~]# grep -E '(vmx|svm)' /proc/cpuinfo **
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm arat pln pts dtherm tpr_shadow vnmi ept vpid fsgsbase smep xsaveopt

(2)安装qemu-kvm(用户态管理工具),libvirt(命令行管理工具),virt-install(安装kvm工具)

[root@linux-node1 ~]#  yum install -y qemu-kvm libvirt
[root@linux-node1 ~]# yum install -y virt-install

(3)启动libvirtd服务,查看是否创建多出一个虚拟网卡:virbr0

[root@linux-node1 ~]# systemctl enable libvirtd
[root@linux-node1 ~]# systemctl start libvirtd
[root@linux-node1 ~]# ifconfig
ens33: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
inet 192.168.56.11 netmask 255.255.255.0 broadcast 192.168.56.255
inet6 fe80::20c:29ff:fe03:f3fe prefixlen scopeid 0x20<link>
ether :0c:::f3:fe txqueuelen (Ethernet)
RX packets bytes (315.1 MiB)
RX errors dropped overruns frame
TX packets bytes (8.7 MiB)
TX errors dropped overruns carrier collisions lo: flags=<UP,LOOPBACK,RUNNING> mtu
inet 127.0.0.1 netmask 255.0.0.0
inet6 :: prefixlen scopeid 0x10<host>
loop txqueuelen (Local Loopback)
RX packets bytes (16.0 KiB)
RX errors dropped overruns frame
TX packets bytes (16.0 KiB)
TX errors dropped overruns carrier collisions virbr0: flags=<UP,BROADCAST,MULTICAST> mtu
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether ::::fb: txqueuelen (Ethernet)
RX packets bytes (0.0 B)
RX errors dropped overruns frame
TX packets bytes (0.0 B)
TX errors dropped overruns carrier collisions

(4)创建虚拟机
安装kvm虚拟机的需求:硬盘,光盘镜像。
①创建的虚拟机内存大小不能超过物理机的大小;
②创建的虚拟机不需要每次都安装启动,只需要通过镜像进行启动。

[root@linux-node1 ~]# qemu-img create -f raw /opt/CentOS--x86_64.raw 10G
Formatting '/opt/CentOS-7-x86_64.raw', fmt=raw size=
[root@linux-node1 ~]# virt-install --virt-type kvm --name CentOS--x86_64 --ram \
> --cdrom=/tmp/CentOS--x86_64-DVD-.iso --disk path=/opt/CentOS--x86_64.raw \
> --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole Starting install...
Domain installation still in progress. You can reconnect to
the console to complete the installation process.

然后快速用TightVNS链接192.168.56.11,按"Tab"键,然后输入:net.ifnames=0 biosdevname=0,更改网卡名称为eth0.按"Enter"进入安装。如图:

  • 6.总结思路

1.创建虚拟磁盘
2.通过virt-install安装一台虚拟机
3.通过TightVNC客户端工具连接到192.168.56.11:5900进行安装操作,默认qumu-kvm的端口是5900端口,端口从5900计算.

  • 7.遇到的问题总结

1.如果多次执行安装:
1.删除 rm -f /opt/CentOS-7-x86_64.raw
2.虚拟机的名称,需要指定--name参数进行修改

virt-install --virt-type kvm --name CentOS-dxxxx7-x86_64 --ram  \
--cdrom=/tmp/CentOS--x86_64-DVD-.iso --disk path=/opt/CentOS--x86_64.raw \
--network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

2.如何删除KVM创建的桥接网卡:

brctl show
ifconfig br0 down
brctl delbr br0
systemctl restart network

3.如何在Centos 7 系统安装完毕修改网卡名为eth0:
(1)首先,先编辑网卡的配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 将里面的NAME项修改为eth0
继续,重命名该配置文件
(2)然后,禁用该可预测命名规则。对于这一点,你可以在启动时传递“net.ifnames=0 biosdevname=0 ”的内核参数。这是通过编辑/etc/default/grub并加入“net.ifnames=0 biosdevname=0 ”到GRUBCMDLINELINUX变量来实现的。
(3)运行命令grub2-mkconfig -o /boot/grub2/grub.cfg 来重新生成GRUB配置并更新内核参数。
(4)reboot重启系统生效

OpenStack入门篇(三)之KVM介绍及安装的更多相关文章

  1. 【SSRS】入门篇(三) -- 为报表定义数据集

    原文:[SSRS]入门篇(三) -- 为报表定义数据集 通过前两篇文件 [SSRS]入门篇(一) -- 创建SSRS项目 和 [SSRS]入门篇(二) -- 建立数据源 后, 我们建立了一个SSRS项 ...

  2. Python学习笔记之基础篇(-)python介绍与安装

    Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...

  3. Nginx入门篇-基础知识与linux下安装操作

    我们要深刻理解学习NG的原理与安装方法,要切合实际结合业务需求,应用场景进行灵活使用. 一.Nginx知识简述Nginx是一个高性能的HTTP服务器和反向代理服务器,也是一个 IMAP/POP3/SM ...

  4. OpenStack入门篇(五)之KVM性能优化及IO缓存介绍

    1.KVM的性能优化,介绍CPU,内存,IO性能优化 KVM CPU-->qemu进行模拟ring 3-->用户应用 (用户态,用户空间)ring 0-->操作系统 (内核态,内核空 ...

  5. OpenStack入门篇(四)之KVM虚拟机介绍和管理

    1.查看虚拟机,启动虚拟机 [root@linux-node1 ~]# virsh list --all Id Name State --------------------------------- ...

  6. OpenStack入门篇(九)之nova服务(控制节点)的部署与测试

    1.Nova介绍 Nova是openstack最早的两块模块之一,另一个是对象存储swift.在openstack体系中一个叫做计算节点,一个叫做控制节点.这个主要和nova相关,我们把安装为计算节点 ...

  7. Openstack入门篇(十六)之Cinder服务的部署与测试

    1.理解块存储服务 操作系统获得存储空间的方式一般有两种: 通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区.格式化.创建文件系统:或者直接使用裸硬盘存储数据(数据库) 通 ...

  8. Openstack入门篇(十五)之如何创建生产使用的openstack镜像

    在linux-node1节点上: [root@linux-node1 ~]# yum install -y openstack-nova-compute [root@linux-node1 ~]# y ...

  9. Openstack入门篇(十四)之horizon服务的部署与测试

    1.Horizon介绍 •提供一个web界面操作openstack的系统 •使用Django框架基于openstack API开发 •支持将session存储在DB.memcached •支持集群 t ...

随机推荐

  1. iOS绘图事务的运行验证

    结合WWDC,以我们的call stack为例,来说明这四个过程分别大概都做了什么. layout过程 从上面layout的过程可以看出,其所做的主要任务就是将图层调用代理(也就是视图)实现整个视图层 ...

  2. TP,TN,FP,FN

    一张图搞定~~~ [转]https://blog.csdn.net/u011956147/article/details/78967145

  3. 将宿主主机上的目录挂载到Docker中

    docker run -it -v /home/zhouqun/文档/workplace:/var/www/html ubuntu64 /bin/bash 将宿主主机中/home/文档/workpla ...

  4. Mybatis Plus启动注入 SQL 原理分析

    1) 问题: xxxMapper 继承了 BaseMapper<T>, BaseMapper 中提供了通用的 CRUD 方法, 方法来源于 BaseMapper, 有方法就必须有 SQL, ...

  5. Luogu_4197 Peaks

    P4197 Peaks 并不会克鲁斯卡尔重构树,于是就写了离线算法. 使用了最小生成树,启发式合并treap 在最小生成树,克鲁斯卡尔算法 时 ,将询问一块处理.便可以保证询问时边的要求.然后利用平衡 ...

  6. Linux下jmap命令查看内存使用

    Linux下jmap命令查看内存使用 jmap -heap 1234(1234为进程号) jmap是JDK自带的一个工具,非常小巧方便,其支持参数如下: -heap       打印heap空间的概要 ...

  7. HDU 1050(楼道搬桌子问题)(不是贪心解法,思路很新颖)

    Moving Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  8. Android的JNI调用(一)

    Android提供NDK开发包来提供Android平台的C++开发,用来扩展Android SDK的功能.主要包括Android NDK构建系统和JNI实现与原生代码通信两部分. 一.Android ...

  9. JDBC——连接数据库的代码

    第一步:在SCR下创建一个file,写好数据库的相关信息. #oracle数据库 driver=oracle.jdbc.driver.OracleDriver jdbcUrl=jdbc:oracle: ...

  10. DDL-常见的约束

    一.常见的约束NOT NULL:非空,该字段的值必填UNIQUE:唯一,该字段的值不可重复DEFAULT:默认,该字段的值不用手动插入有默认值CHECK:检查,mysql不支持PRIMARY KEY: ...