Ubuntu 18.04 LTS安装KVM虚拟机的方法步骤
<p>本文介绍了ubuntu 18.04 lts安装kvm虚拟机的方法步骤,分享给大家,具体如下:</p>
<p>
<img style="max-width:100%!important;height:auto!important;"title="Ubuntu 18.04 LTS安装KVM虚拟机的方法步骤" alt="Ubuntu 18.04 LTS安装KVM虚拟机的方法步骤" src="https://zhuji.jb51.net/uploads/img/202305/28f0b70d15b661fe2cd0b62976c4ff66.jpg"></p>
<p>
前一阵使用在最新的ubuntu 18.04上安装了kvm来虚拟一个小的vm集群,将主要过程和其中遇到的一些问题记录下来。</p>
<p>
<strong>准备工作</strong></p>
<p>
首先需要检查一下cpu是否支持虚拟化,执行一下命令来检查/proc/cpuinfo文件中是否又虚拟化相关的字眼,如果有的话表明cpu支持虚拟化技术。</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterplain" id="highlighter_327793">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="plain plain">egrep -c '(svm|vmx)' /proc/cpuinfo</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
上面命令执行结果如果返回0,表示cpu不支持虚拟化技术。当然主板bios中的虚拟化技术也可能不是默认开启的,如果没有开启需要手动开启一下。</p>
<p>
<span><strong>安装kvm</strong></span></p>
<p>
执行以下命令安装kvm</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_15094">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">apt update</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash functions">sudo</code> <code class="bash plain">apt </code><code class="bash functions">install</code> <code class="bash plain">qemu qemu-kvm libvirt-bin bridge-utils virt-manager</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
将libvirtd添加自启动</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_609814">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">systemctl start libvirtd.service</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash functions">sudo</code> <code class="bash plain">systemctl </code><code class="bash functions">enable</code> <code class="bash plain">libvirtd.service</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
<strong>网络模式</strong></p>
<p>
kvm安装完成后,首先需要进行网络设定,kvm支持四种网络模式:</p>
<ol>
<li>
桥接模式</li>
<li>
nat模式</li>
<li>
用户网络模式</li>
<li>
直接分配设备模式</li>
</ol>
<p>
主要讲一下前两种</p>
<p>
<span><strong>桥接(bridge)模式</strong></span></p>
<p>
在桥接模式下,宿主机和虚拟机共享同一个物理网络设备,虚拟机中的网卡和物理机中的网卡是平行关系,所以虚拟机可以直接接入外部网络,虚拟机和宿主机有平级的ip。</p>
<p>
<img style="max-width:100%!important;height:auto!important;"title="Ubuntu 18.04 LTS安装KVM虚拟机的方法步骤" alt="Ubuntu 18.04 LTS安装KVM虚拟机的方法步骤" src="https://zhuji.jb51.net/uploads/img/202305/d9ab697dc9b58d812f1835f93fb7163e.jpg"></p>
<p>
原本宿主机是通过网卡eth0连接外部网络的,网桥模式会新创建一个网桥br0,接管eth0来连接外部网络,然后将宿主机和虚拟机的网卡eth0都绑定到网桥上。</p>
<p>
使用桥接模式需要进行以下操作:</p>
<p>
编辑<code>/etc/network/interfaces</code>,增加如下内容</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterplain" id="highlighter_793814">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="plain plain">auto br0</code>
</div>
<div class="line number2 index1 alt1">
<code class="plain plain">iface br0 inet dhcp # 网桥使用dhcp模式,从dhcp服务器获取ip</code>
</div>
<div class="line number3 index2 alt2">
<code class="plain plain">bridge_ports enp3s0 # 网卡名称,网桥创建前连接外部的网卡,可通过ifconfig命令查看,有ip地址的就是</code>
</div>
<div class="line number4 index3 alt1">
<code class="plain plain">bridge_stp on # 避免数据链路出现死循环</code>
</div>
<div class="line number5 index4 alt2">
<code class="plain plain">bridge_fd 0 # 将转发延迟设置为0</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
接下来需要重启networking服务(如果是通过ssh连接到宿主机上的,这一步会导致网络中断,如果出现问题可能导致连不上宿主机,最好在宿主机上直接操作)</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterplain" id="highlighter_63301">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="plain plain">systemctl restart networking.service</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
使用ifconfig命令查看ip是否从enp3s0(网桥创建前的网卡)变到了br0上,如果没有变化则需要重启。如果宿主机ip已经成功变到网桥上,并且宿主机能正常上网而虚拟机获取不到ip,可能是ufw没有允许ip转发导致的,编辑<code>/etc/default/ufw</code>允许ip转发。</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterplain" id="highlighter_267452">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="plain plain">default_forward_policy="accept"</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
重启ufw服务让设置生效</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterplain" id="highlighter_674496">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="plain plain">systemctl restart ufw.service</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
<span><strong>nat(network address translation)模式</strong></span></p>
<p>
nat模式是kvm默认的网络模式,kvm会创建一个名为virbr0的虚拟网桥,但是宿主机和虚拟机对于网桥来说不是平等的了,网桥会把虚拟机藏在背后,虚拟机会被分配一个内网ip,而从外网访问不到虚拟机。</p>
<p>
<img style="max-width:100%!important;height:auto!important;"title="Ubuntu 18.04 LTS安装KVM虚拟机的方法步骤" alt="Ubuntu 18.04 LTS安装KVM虚拟机的方法步骤" src="https://zhuji.jb51.net/uploads/img/202305/ac562366161494f06a8550e03becac03.jpg"></p>
<p>
<strong>安装linux虚拟机</strong></p>
<p>
使用如下命令安装安装linux虚拟机</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_218935">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">virt-</code><code class="bash functions">install</code> <code class="bash plain">-n ubuntu_3</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash spaces"> </code><code class="bash plain">--description </code><code class="bash string">"ubuntu_3"</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash spaces"> </code><code class="bash plain">--os-</code><code class="bash functions">type</code><code class="bash plain">=linux --os-variant=ubuntu17.10 --</code><code class="bash functions">ram</code><code class="bash plain">=1024 --vcpus=1 </code>
</div>
<div class="line number4 index3 alt1">
<code class="bash spaces"> </code><code class="bash plain">--disk path=</code><code class="bash plain">/var/lib/libvirt/images/ubuntu_3</code><code class="bash plain">.img,bus=virtio,size=50 </code><code class="bash comments"># 磁盘位置,大小50g</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash spaces"> </code><code class="bash plain">--network bridge:br0 </code><code class="bash comments"># 这里网络选择了桥接模式</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash spaces"> </code><code class="bash plain">--accelerate</code>
</div>
<div class="line number7 index6 alt2">
<code class="bash spaces"> </code><code class="bash plain">--graphics vnc,listen=0.0.0.0,keymap=en-us </code><code class="bash comments"># vnc监听端口,注意要选择en-us作为key-map,否则键位布局可能会乱</code>
</div>
<div class="line number8 index7 alt1">
<code class="bash spaces"> </code><code class="bash plain">--cdrom </code><code class="bash plain">/home/zzy/downloads/ubuntu-18</code><code class="bash plain">.04-live-server-amd64.iso </code><code class="bash comments"># 安装iso路径</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
<strong>安装windows 10虚拟机</strong></p>
<p>
安装windows 10虚拟机会出现没有virtio驱动的问题,导致安装程序找不到硬盘,需要先下载virtio驱动。</p>
<p>
https://fedoraproject.org/wiki/windows_virtio_drivers</p>
<p>
创建虚拟机时,将其加入到cd-rom中</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterplain" id="highlighter_636282">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="plain plain">sudo virt-install -n win10</code>
</div>
<div class="line number2 index1 alt1">
<code class="plain spaces"> </code><code class="plain plain">--description "win10"</code>
</div>
<div class="line number3 index2 alt2">
<code class="plain spaces"> </code><code class="plain plain">--os-type=win --os-variant=win10</code>
</div>
<div class="line number4 index3 alt1">
<code class="plain spaces"> </code><code class="plain plain">--ram=4096 --vcpus=2 </code>
</div>
<div class="line number5 index4 alt2">
<code class="plain spaces"> </code><code class="plain plain">--disk path=/var/lib/libvirt/images/win_10.img,bus=virtio,size=100</code>
</div>
<div class="line number6 index5 alt1">
<code class="plain spaces"> </code><code class="plain plain">--network bridge:br0</code>
</div>
<div class="line number7 index6 alt2">
<code class="plain spaces"> </code><code class="plain plain">--accelerate</code>
</div>
<div class="line number8 index7 alt1">
<code class="plain spaces"> </code><code class="plain plain">--graphics vnc,listen=0.0.0.0,keymap=en-us</code>
</div>
<div class="line number9 index8 alt2">
<code class="plain spaces"> </code><code class="plain plain">--cdrom =/home/zzy/downloads/cn_windows_10_consumer_editions_version_1803_updated_march_2018_x64_dvd_12063766.iso</code>
</div>
<div class="line number10 index9 alt1">
<code class="plain plain">--cdrom=/home/zzy/downloads/virtio-win.iso</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
<strong>使用vnc客户端连接虚拟机</strong></p>
<p>
执行以下命令查看虚拟机的列表</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterplain" id="highlighter_54678">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="plain plain">sudo virus list</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
通过上一步查处的虚拟机列表,查看单台机器的vnc端口</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_171292">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">virsh vncdisplay ubuntu_3 </code><code class="bash comments"># ubuntu_3是虚拟机名称</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
知道了vnc端口号,就可以使用vnc客户端连接到虚拟机完成安装了。</p>
<p>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。</p>
<p>
原文链接:https://segmentfault.com/a/1190000015418876</p>
頁:
[1]