退休笔记本改造家用服务器(3)-- 保姆级KVM+WebVirtMgr部署流程
前言
之前的文章:
2019年的折腾 -- 退休笔记本改造家用服务器(1) -- 硬件篇
退休笔记本改造家用服务器(2)- KVM、ESXi还是Hyper-V?
本文主要内容为介绍如何部署KVM虚拟化。目前任何主流的Linux发行版基本都能够提供KVM的功能。KVM的全称是Kernel-based Virtual Machine,其本质是属于Linux内核的一个功能模块,具体的介绍就不再赘述了,网上关于KVM技术的介绍也很多。
WebVirtMgr是一个基于网页的VM管理平台,免去了远程管理虚拟机需要敲命令的烦恼,详情见其Github页面。
本文会尽量采用简单的方法去部署KVM,尽量保证文中方案的可重现性,虽然我自己使用VM重新走了一遍流程确认流程的准确性,但是无法保证不会有用户本身的硬件原因导致的额外步骤。
全文命令的内容说明:命令前有‘#‘表示该命令需要超级用户身份执行(root),命令前有'$'表示该命令不需超级用户权限。切换用户权限有两种方法:1、sudo指令,有效范围一条指令(对于最小化安装的系统,sudo工具需要额外安装和修改配置文件)2、su指令,直接切换当前用户身份。因为本文的权限切换次数不算多,使用su指令完成即可。方法为:由'$'切换到'#'时,直接键入su回车,然后输入正确的root账户密码(不是你当前账户的密码),即可完成切换。由’#‘切换到’$‘时,直接键入exit回车即可。
命令行下文本编辑器说明:Debian标准系统组件自带nano文本编辑器,比如命令nano /root/test 即打开nano进行编辑。编辑完后使用ctrl+x退出,退出时按Y进行保存。
操作系统部署
KVM是基于Linux内核的功能,其本身十分精简。KVM主要提供的是底层和原理的实现,所以并不像ESXi那样直接下载一个镜像,安装后就什么都有了,需要自己去选择Linux发行版并做配置。本次选择Debian 9.6作为VM Host,安装选择最小化就好了,能够节省本来就不太宽裕的内存空间。(作为VM Host,系统越简单越好了,详细的应用去VM Guest内实现就好了)
首先是下载系统镜像,这里使用网络安装映像,安装过程需要连接网络的,x86-64架构 - 官方下载地址,其他架构的网络安装映像可以去官方下载页面自行下载。下载下来为iso映像文件,需要使用UltraISO写入U盘。UltraISO工具可以自行去寻找,这里就不提供下载地址了。
用UltraISO打开下载的光盘映像文件
通过菜单选择,写入映像
硬盘驱动器选择你插入的U盘,然后点击写入。完成后关闭软件,安全弹出U盘就好
然后插入服务器,U盘启动。至于如何通过U盘启动,每个主板的设置都不一样,我这里没办法做说明。
这里选择Install
接下来是语言选择界面,语言如果选择中文,会提示如下
那行吧,没翻译就没翻译咯。
一路顺着走下去就行了,就不截图浪费篇幅了。主机名随意,域名可以手动填写localhost,用户名和密码配置就不必赘述了。
磁盘配置就需要看个人情况了,如果你不太了解Linux,直接使用整个磁盘即可,配置和维护LVM是很麻烦的事情。
我这里只有一个磁盘,选择你想安装系统的磁盘即可
不太了解Linux的用户,分区也放在同一分区吧
最后确认一下配置后就会开始安装一部分系统文件
这里选择否即可
镜像这里选择中国 - 推荐mirrors.163.com,公网下163开源的镜像还是比较给力的。
在选择软件包的时候,只需要选择SSH Server和标准系统工具就行了。个人使用SSH的主要原因是可以在能够上网的机器上,copy网上的指令,免得手打 没错,我就是懒。
接着就是等待安装了。安装完成后重启,进入CLI,最好使用配置的root用户登陆,因为后面需要提权的动作。
为了登录SSH,需要先获取IP地址,可以直接去路由器的DHCP lease分配里面去看,或者使用命令
# apt install net-tools
安装net-tools软件包,软件包提供ifconfig命令查看网络接口信息。
这里先配置一下语言,乱码看的有点难受
# dpkg-reconfigure locales
全是乱码是不是?不要慌,这里有对应的中文
上下选择,空格打勾,tab切换。勾上en_US.UTF8和zh_CN.UTF8,确认
这里选择英语就能避免乱码,选择中文就能在远程SSH时在支持的软件中显示中文(比如putty),自己选择喜好吧,我这里就先切换英文了。
接着回到ifconfig,使用ifconfig命令获取当前的IP地址。
值得一提的是,在debian中,非root用户是默认没有sbin的环境变量的,也就是说如果你以普通用户身份运行ifconfig,它会告诉你
-bash: ifconfig: command not found
所以使用debian的时候,发现command not found不一定是没有安装软件包
正确的ifconfig命令,应该会返回如下图的信息
这里的eth0就是机器上目前唯一的网卡,lo是Linux系统的本地回环,不用去管。这里就可以看到inet 192.168.1.102 意思就是我这台机器的IP就是192.168.1.102。接下来就可以使用SSH工具登录了。Windows端可以使用putty作为ssh的客户端,mac自带ssh客户端,linux即使没有也可以通过包管理软件安装。
这里以mac作为例子(Windows用putty其实也是一个样),打开Terminal,键入ssh username@ip,但是用户名只能使用非root用户,可以使用安装过程中创建的普通用户进行ssh会话。例如在我这里
MacBook:~ mac$ ssh user1@192.168.1.102
回车之后会返回,询问是否信任主机
The authenticity of host '192.168.1.102 (192.168.1.102)' can't be established.
ECDSA key fingerprint is SHA256:e3XsQJFgEZ8TGTQBZbuTeSlaq78lu0RPARIS3Asuxtg.
Are you sure you want to continue connecting (yes/no)?
键入yes后回车就可以正常登录了。
如果需要配置允许root通过ssh登录,需要更改sshd的相关配置文件,有需求的可以直接百度搜索。不过其实没必要。在普通用户登录时,使用su命令,输入root密码,即可顺利提权到root用户,这个操作在ssh中也可以使用。所以没有必要开放root的ssh登录。
配置KVM和WebVirtMgr
接下来使用自己的笔记本登录这台设备,开始配置KVM。
首先得安装KVM相关组件和设备,使用su命令切换至root用户。
其实在WebVirtMgr的Github页面中已经提供了一个便利的KVM安装脚本,但是由于众所周知的原因 ,Github存在一些访问性问题。如果直接下载那个shell脚本,会很不幸的告诉你Connection reset by peer。解决方法是使用https。需要键入如下命令
# wget -O - https://retspen.github.io/libvirt-bootstrap.sh | sh
等待进度走完之后,接着运行如下命令
# apt install git python-pip python-libvirt python-libxml2 novnc nginx supervisor
使用systemctl查看服务状态是不是active(running),确定是否启动成功。
# systemctl status libvirtd.service
如果没有启动,使用systemctl start libvirtd.service启动
接下来安装WebVirtMgr。首先clone git上的源代码
# cd ~
# git clone git://github.com/retspen/webvirtmgr.git
然后安装python依赖
# cd webvirtmgr
# pip install -r requirements.txt
之后根据交互添加用户,初始化各种配置,这个用户名和密码是用来登录webvirtmgr的。
# ./manage.py syncdb
# ./manage.py collectstatic
# cd ..
# mv webvirtmgr /var/www/
然后在/etc/nginx/conf.d目录下添加webvirtmgr.conf
# nano /etc/nginx/conf.d/webvirtmgr.conf
文件内容如下:
server {
listen 80 default_server;
server_name $hostname;
#access_log /var/log/nginx/webvirtmgr_access_log;
location /static/ {
root /var/www/webvirtmgr/webvirtmgr; # or /srv instead of /var
expires max;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
client_max_body_size 1024M; # Set higher depending on your needs
}
}
复制配置文件后,还还需要注释掉nginx默认的服务器配置,因为会和WebVirtMgr冲突。Debian的在/etc/nginx/sites-enabled/default 内,注释掉该文件内的整个server区段即可(即在server区段的每一行前面加上#,包括“server { ”这一行)。之后修复文件权限
# chown -R www-data:www-data /var/www/webvirtmgr
重启nginx服务
# systemctl restart nginx
接下来配置supervisor服务
# nano /etc/supervisor/conf.d/webvirtmgr.conf
添加如下文件内容到/etc/supervisor/conf.d/webvirtmgr.conf 中
[program:webvirtmgr]
command=/usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/$
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr.log
redirect_stderr=true
user=www-data
[program:webvirtmgr-console]
command=/usr/bin/python /var/www/webvirtmgr/console/webvirtmgr-console
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr-console.log
redirect_stderr=true
user=www-data
之后重启supervisor服务
# systemctl restart supervisor
到此为止,webvirtmgr网页就应该能够正常访问了!在内网浏览器中输入你的机器的IP地址,例如我这里是192.168.1.102,就会进入如下界面:
输入你之前创建的webvirtmgr用户,点击sign in,即可登录到网页,在网页的右上角点击Add Connection
选择Local Socket连接本地服务器,Label随便写,之后Add
点击你创建的label名称,进入管理页面
此时会告诉你缺少权限,还需要对用户授予访问权限
此时再输入如下命令,将www-data用户加入libvirt组
# usermod -a -G libvirt www-data
此时刷新页面,可以看到红色的提示已经消除。此时选择storage创建新的储存池,点击New Storage
首先选择ISO,创建磁盘映像的存放位置
点击upload ISO上传虚拟机要安装的系统映像,这里就不加图片了
之后再点击storage,新建一个储存池,类型选择DIR(这个是用来放虚拟机的硬盘文件的)。
之后在这个新建立的储存池中增加一块新的虚拟硬盘image,格式就是qcow2,大小根据个人需求选择。
然后点击Network,选择default,点击state里的start,需要开机自启动这个NAT网卡的,点击Autostart的Enable即可开机自动启动该虚拟网卡。
之后点击New Instance建立新的虚拟机。选择custom instance
磁盘选择之前创建好的qcow2文件(文件后缀名就是.img,不用管),选择default网络,填好名字然后新建
VirtIO的选项,请酌情勾选,在有些的情况下,会出现无法引导的情况,例如本次的debian安装镜像,使用VirtIO会导致在系统安装完成重启的流程中,无法引导进入系统,原因未知,可能和debian的安装器有关系。请谨慎考虑
在instance里点击实例名,进入设置页面
点击settings - media - connect 连接光盘映像
然后点击power下的start开机,之后点击access下的console,就能顺利连接虚拟机并安装系统:
大功告成!
小结
总的来说,webvirtmgr是一个相对来说比较方便的网页管理虚拟机的方式,对于高级用户,也可以直接更改虚拟机配置文件的XML。但是相对于GUI的VIrtual Machine Manager管理工具,webvirtmgr能够配置的选项相对比较少,KVM是一个很需要调教的平台,调教的好能够得到出色的性能和良好的可拓展性,配合诸多软件工作。要知道,目前商用的虚拟机VPS提供商,基本都采用的是KVM作为虚拟化方案。不过好的是其内存的占用真的少。不开虚拟机的情况下,实机基本只占用不到500M的内存,能够很大程度上节省内存的开销。要知道像Gnome这种桌面环境,可是内存消耗的大户!
l1992130
校验提示文案
長瀬湊
校验提示文案
弱鱼
校验提示文案
弱鱼
校验提示文案
長瀬湊
校验提示文案
l1992130
校验提示文案