KVM介绍

Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。

KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。

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

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

虚拟化分类

虚拟化分为两种:1型虚拟化和2型虚拟化。

1型虚拟化

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

2型虚拟化

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

理论上讲:

1型虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比2型要高;

2型虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。

部署KVM

环境准备

确认开启虚拟化

[root@ken ~]# 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 mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc art rep_good nopl tsc_reliable nonstop_tsc extd_apicid aperfmperf eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw retpoline_amd vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap xsaveopt clzero irperf xsaveerptr ibpb arat nptsvm_lock nrip_save vmcb_clean flushbyasid decodeassists

第一步:下载相关软件

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

libvirt :  KVM 的管理工具。Libvirt 包含 3 个东西:后台 daemon 程序 libvirtd、API 库和命令行工具 virsh

qemu-kvm:KVM 和 QEMU 的核心包,提供 CPU、内存和 IO 虚拟化功能

virt-install是一个命令行工具,它能够为KVM、Xen或其它支持libvrit API的hypervisor创建虚拟机并完成GuestOS安装

第二步:启动libvirt

[root@ken ~]# systemctl restart libvirtd

第三步:创建磁盘

[root@ken ~]# qemu-img create -f raw /ken/centos7-x86_64.raw 10G
Formatting '/ken/centos7-x86_64.raw', fmt=raw size=

第四步:创建虚拟机

[root@ken ~]# virt-install --virt-type kvm --name Centos7-x86_64 --ram  --cdrom=/tmp/CentOS-7.3-x86_64-Minimal-.iso --disk path=/ken/centos7-x86_64.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

注意:需要上传一个镜像到/tmp目录下,其他目录也可以,上面指定即可

第五步:快速使用VNC进行连接

ip地址输入虚拟机ip

开始安装系统

定制化系统

开始安装

第六步:查看已经创建的虚拟机

[root@ken ~]# virsh list --all
Id Name State
----------------------------------------------------
- Centos7-x86_64 shut off

第七步:启动虚拟机

[root@ken ~]# virsh start Centos7-x86_64
Domain Centos7-x86_64 started [root@ken ~]# virsh list --all
Id Name State
----------------------------------------------------
Centos7-x86_64 running

第八步:使用VNC再次连接

现在就可以登录进去我们创建的虚拟机里面去了

第九步:ssh连接

宿主机上连接

首先查看新建虚拟机IP地址

宿主机进行连接

[root@ken ~]# ssh 192.168.122.198
The authenticity of host '192.168.122.198 (192.168.122.198)' can't be established.
ECDSA key fingerprint is SHA256:t+jpHwwHJk8mo2XZB93H9afhSVy7BCMvLsvqsUF+Obg.
ECDSA key fingerprint is MD5::d5:9e:db:f8:bb:5e::c1:c8:1d:a2:4b::d6:fc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.122.198' (ECDSA) to the list of known hosts.
root@192.168.122.198's password:
Last login: Mon Mar ::
[root@localhost ~]# ip a
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
link/ether :::::d7 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.198/ brd 192.168.122.255 scope global dynamic eth0
valid_lft 3510sec preferred_lft 3510sec
inet6 fe80:::ff:fe89:17d7/ scope link
valid_lft forever preferred_lft forever

登录退出虚拟机

第一步:在创建的KVM虚拟机里面执行如下的命令

[root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0"

第二步:重启KVM虚拟机

第三步:使用virsh console登录登录虚拟机

执行virsh console 虚拟机名称

[root@ken ~]# virsh console Centos7-x86_64
Connected to domain Centos7-x86_64
Escape character is ^] #到这步再次按回车 CentOS Linux (Core)
Kernel 3.10.-.el7.x86_64 on an x86_64 localhost login: root #输入用户
Password: #密码
Last login: Mon Mar :: on ttyS0
[root@localhost ~]#

第四步:退出KVM虚拟机

按这两个组合键,按ctrl加上中括号的右边: ctrl+]

[root@ken ~]# virsh console Centos7-x86_64
Connected to domain Centos7-x86_64
Escape character is ^] CentOS Linux (Core)
Kernel 3.10.-.el7.x86_64 on an x86_64 localhost login: root
Password:
Last login: Mon Mar :: on ttyS0
[root@localhost ~]#
[root@ken ~]#

克隆虚拟机

第一步:关闭虚拟机

[root@ken ~]# virsh shutdown Centos7-x86_64
Domain Centos7-x86_64 is being shutdown [root@ken ~]# virsh list --all
Id Name State
----------------------------------------------------
- Centos7-x86_64 shut off

第二步: 创建磁盘位置

[root@ken ~]# mkdir /ken/img

第三步:使用virt-clone克隆新的虚拟机

[root@ken ~]# virt-clone -o Centos7-x86_64 -n centos7_test -f /ken/img/centos7_test.img
Allocating 'centos7_test.img' | GB :: Clone 'centos7_test' created successfully.

第四步:查看虚拟机

[root@ken ~]# virsh list --all
Id Name State
----------------------------------------------------
- Centos7-x86_64 shut off
- centos7_test shut off

第五步:启动虚拟机

[root@ken ~]# virsh start centos7_test
Domain centos7_test started [root@ken ~]# virsh list --all
Id Name State
----------------------------------------------------
centos7_test running

第六步:进入虚拟机

[root@ken ~]# virsh console centos7_test
Connected to domain centos7_test
Escape character is ^] CentOS Linux (Core)
Kernel 3.10.-.el7.x86_64 on an x86_64 localhost login: root
Password:
Last login: Mon Mar :: on ttyS0
[root@localhost ~]# ip a
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
link/ether :::cc::f8 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.161/ brd 192.168.122.255 scope global dynamic eth0
valid_lft 3597sec preferred_lft 3597sec
inet6 fe80:::ff:fecc:69f8/ scope link
valid_lft forever preferred_lft forever

xshell连接虚拟机

现在物理主机是ping不通KVM虚拟机的,只有宿主机可以和KVM通信

第一步:创建脚本并执行

[root@ken ~]# cat bridg.sh
#!/bin/bash
brctl addbr br0 #创建桥接网卡
brctl addif br0 eth0 #把eth0加入到br0中
ip a d 192.168.4.190/ dev eth0 #删除eth0的IP地址
ifconfig br0 192.168.4.190/ up #启动br0网络
route add default gw 192.168.4.1 #添加网关

第二步:查看网络

第三步:测试外网连通性

[root@ken ~]# ping www.baidu.com
PING www.a.shifen.com (119.75.217.26) () bytes of data.
bytes from 119.75.217.26 (119.75.217.26): icmp_seq= ttl= time=6.08 ms
bytes from 119.75.217.26 (119.75.217.26): icmp_seq= ttl= time=9.20 ms
bytes from 119.75.217.26 (119.75.217.26): icmp_seq= ttl= time=8.58 ms
^C
--- www.a.shifen.com ping statistics ---
packets transmitted, received, % packet loss, time 6020ms
rtt min/avg/max/mdev = 6.087/7.957/9.201/1.346 ms

第四步:编辑虚拟机

修改如下的三处位置即可

[root@ken ~]# virsh edit Centos7-x86_64

第五步: 启动KVM虚拟机并进入KVM虚拟机编辑网卡

配置一个与物理主机同网段的网络

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
BOOTPROTO="static"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR=192.168.4.165
NETMASK=255.255.255.0
GATEWAY=192.168.4.1
DNS1=8.8.8.8
[root@localhost ~]# systemctl restart network

第六步:xshell连接KVM虚拟机

Connecting to 192.168.4.165:...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'. WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Mon Mar ::
[root@localhost ~]# ip a
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
link/ether :::::d7 brd ff:ff:ff:ff:ff:ff
inet 192.168.4.165/ brd 192.168.4.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80:::ff:fe89:17d7/ scope link
valid_lft forever preferred_lft forever

KVM虚拟化使用详解--技术流ken的更多相关文章

  1. MySQL系列详解三:MySQL中各类日志详解-技术流ken

    前言 日志文件记录了MySQL数据库的各种类型的活动,MySQL数据库中常见的日志文件有 查询日志,慢查询日志,错误日志,二进制日志,中继日志 .下面分别对他们进行介绍. 查询日志 1.查看查询日志变 ...

  2. iptables实战案例详解-技术流ken

    简介 关于iptables的介绍网上有很多的资料,大家可以自己找一些关于iptables的工作原理,以及四表五链的简介,对于学习iptables将会事半功倍.本博文将会例举几个工作中常用的iptabl ...

  3. 实战!基于lamp安装wordpress详解-技术流ken

    简介 LAMP 是Linux Apache MySQL PHP的简写,其实就是把Apache, MySQL以及PHP安装在Linux系统上,组成一个环境来运行动态的脚本文件.现在基于lamp搭建wor ...

  4. cobbler批量安装系统使用详解-技术流ken

    前言 cobbler是一个可以实现批量安装系统的Linux应用程序.它有别于pxe+kickstart,cobbler可以实现同个服务器批量安装不同操作系统版本. 系统环境准备及其下载cobbler ...

  5. MySQL系列详解五: xtrabackup实现完全备份及增量备份详解-技术流ken

    xtrabackup简介 xtrabackup是一个用来对mysql做备份的工具,它可以对innodb引擎的数据库做热备.xtrabackup备份和还原速度快,备份操作不会中断正在执行的事务,备份完成 ...

  6. linux四剑客-grep/find/sed/awk/详解-技术流ken

    四剑客简介 相信接触过linux的大家应该都学过或者听过四剑客,即sed,grep,find,awk,有人对其望而生畏,有人对其爱不释手.参数太多,变化形式太多,使用超级灵活,让一部分人难以适从继而望 ...

  7. NTP时间服务器实战应用详解-技术流ken

    简介 在搭建集群服务中,要保证各节点时间一致,NTP时间服务器就成为了一个好帮手了. 系统环境 系统版本:centos6.7 服务器IP:10.220..5.166/24 客户端IP:10.220.5 ...

  8. samba企业级实战应用详解-技术流ken

    1.简介 Samba是一套使用SMB(Server Message Block)协议的应用程序, 通过支持这个协议, Samba允许Linux服务器与Windows系统之间进行通信,使跨平台的互访成为 ...

  9. pxe+kickstart自动化批量安装系统详解-技术流ken

    前言 pxe+kickstart是一款可以实现自动化批量安装系统的服务,比较经典,下面将详细介绍此服务的安装和使用. 系统环境准备 系统版本:CentOS release 6.7 (Final) 内网 ...

随机推荐

  1. BZOJ_1705_[Usaco2007 Nov]Telephone Wire 架设电话线_DP

    BZOJ_1705_[Usaco2007 Nov]Telephone Wire 架设电话线_DP Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是 ...

  2. 我和Python的Py交易》》》》》》 浮点数的身世字谜

    什么是浮点数? 在数据类型中写道,浮点数是带小数点的小数,这个概念是不准确的:浮点数是除了无限不循环小数之外的小数,也就是可以用分数表示的带小数点的数. 好了,浮点数就这些内容,讲完了,各回各家,各找 ...

  3. 电梯调度二——曹玉松&&蔡迎盈

    电梯初步版本    经过去实际大楼的调查和一周的学习,初步完成了电梯的制作,但是这个版本的电梯功能并不是很全面,而且界面有待于改善,现在做出了测试版本,稍后进一步跟进新的版本,现在的版本初步完成的是电 ...

  4. Java基础-递归调用

    意义: 递归算法是一种直接或间接地调用自身的算法.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解. 所以在工作中我们经常用递归 来进行一些算法操作 比如 ...

  5. appium 常用API使用总结!

    将常用函数进行适用总结,后期在使用的过程中直接查找调用即可 获取界面属性.控件属性 1.current_activity:获取activity名称 device.current_activity 2. ...

  6. ThreadLocal的应用与实现原理

    本文对ThreadLocal的分析基于JDK 8. 本文大纲 1. ThreadLocal快速上手 2. ThreadLocal应用场景 3. TheadLocal set与get方法简析 4. Th ...

  7. ERP不规范,同事两行泪

    最近的很多次对外交流,都聊到了ERP建设的话题,并且无一例外的不那么让人省心,回想我这么多年走过的ERP坑坑路,在这里也写下经验和总结,希望能给正在或者即将走上ERP建设路的企业一些思考和帮助. 导读 ...

  8. python接口自动化(二十六)--批量执行用例 discover(详解)

    简介 我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到 unittest 里面的 discover 方法来加载用例了.加载用例后,用 unittest 里 ...

  9. 游戏UI框架设计(6): 消息传递中心

    游戏UI框架设计(6) --消息传递中心 最近一直忙于一个益智类游戏的研发工作,所以博客有段时间没有更新了.经过朋友的督促,决定这两天立刻完成最后的两篇博客讲解(UI框架).说起“消息传递中心”,或者 ...

  10. Python:读取 .doc、.docx 两种 Word 文件简述及“Word 未能引发事件”错误

    概述 Python 中可以读取 word 文件的库有 python-docx 和 pywin32. 下表比较了各自的优缺点.   优点 缺点 python-docx 跨平台 只能处理 .docx 格式 ...