KVM - 虚机内核配置

news2024/12/28 19:26:17

缘起

笔者最近分别购买了一台腾讯云和百度云的机器,都是一年期的,配置和价格分别如下:

腾讯云百度云
配置2 核,2G 内存,40G 硬盘2 核,4G 内存,80G 硬盘
价格50 元78 元

似乎性价比都差不多,但是,用 "lscpu" 命令一看就会发现,腾讯云机器的 "Thread(s) per core" 这一项为 1,而百度云为 2,这意味着后者是开启了 hyper-threading 的,性能一般只相当于 1.1-1.2 个 CPU(大家注意以后避免踩坑),而腾讯的是真两核(要不然怎么叫良心云呢)。

另外从控制台上,虽然是轻量应用版本,但是腾讯云也支持 snapshot 功能,而百度云好像没有。不能打快照的话,都不敢在上面做过多的试验性操作。

有时想想,这么低的价格,怕是连电费都不够,还别说为了保持产品的竞争力,隔几年就需要对昂贵的 CPU 进行升级换代,这可是一笔不小的开销。

云服务器普遍存在“超卖”的情况,毕竟不可能售出的所有虚机都同时使用(银行也是无法同时满足每一个储户的取现需求)。会不会是像航空公司一样,多卖出去的一个座位,只是几十元的「边际成本」(比如这两年的“随心飞”产品)。当使用一年之后,由于数据迁移的不便,加上习惯和黏性,赌你还会接着续费使用?

采用虚拟机模式构建的云服务,算是一种共享经济了,但根据目前了解到的一些信息,在公司级项目的层面,由于各种各样的原因,目前购买云主机的成本并不见得比自建机房低。

不过“云”还有一个好处,就是随时随地的访问,周末写文章常常需要一个 Linux 的访问环境,买台云服务器的话,可以省去背电脑回家的麻烦。

在到手的这 2 台机器上,笔者都基于 5.17.0 内核,使用 menuconfig 默认配置进行了编译,结果生成的镜像占用空间较多。由于磁盘空间受限,笔者就想着能不能精简下配置,把不必要的模块都去掉。前提一是能在采用 KVM 的虚机上运行,二是虚机里能跑 docker。

动手

笔者最开始使用的是 defconfig,为了加快后续编译,make 时加上了 ccache(参考这篇文章)。替换内核是高危操作,所以保险的做法是在 make install 之前打个快照,并且用 "grubby --set-default" 将老内核作为默认启动项(因为启动失败后,网页版的 VNC 界面很可能无法切换内核)。

支持 KVM

之后,切到新内核的启动卡在了 "System hang after output: Reached target Basic System",这可能是 initramfs 里的磁盘驱动缺失导致。

因为目前 KVM 普遍采用 VIRTIO 作为虚机的驱动,所以得在配置里包含相关部分,主要是 BLK, SCSI, PCI 和 NET,以 block 为例,配置路径如下:

Device Drivers ---> Block devices --> Virtio block driver

此外,作为 guest 虚机,还需加上 "KVM_GUEST" 的配置:

Processor type and features ---> Linux guest support

注意,"Virtualization --> Kernel-based Virtual Machine (KVM) support" 这个并不需要,因为它是用来支持虚机运行的,是给宿主机内核用的。

煞费周章后,新内核终于可以正常启动了。其实后来才知道,Linux 针对 KVM 虚机提供了一个现成的配置,在拥有一个基础的 ".config" 文件后,直接 "make kvm_guest.config" 即可("kvm_guest" 这个 config 文件并不是内核编译所需的完整配置文件,它只有几十行,所以中间其实自动进行了一个和基础配置文件 merge 的过程)。

支持 docker

启动后试着输入 "docker ps" 命令,dockerd 守护进程都没起来:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. 
Is the docker daemon running?

那为啥没 run 呢,是没有设置开机自启么?用 "systemctl is-enabled docker",结果显示为 "enabled",再用 "systemctl status docker":

只有最后一部分日志,看不出来具体原因,完整的还得用 "journalctl -u docker",然后从里面找到端倪:

msg="failed to mount overlay: no such device" storage-driver=overlay

"lsmod |grep overlay" 的输出为空,说明确实没有这个驱动,得增加 CONFIG_OVERLAY_FS。但重新编译后,docker 还是没能起来:

再把 cgroup 里面缺失的 controller 都补上,比如 CONFIG_CGROUP_DEVICE。现在有经验了,docker 的三要素嘛,还差一个 namespace,也一起给补了:

嗯,dockerd 总算是可以运行了,但是容器的网络不通,还是没法正常使用:

docker 网络这块的关系颇为复杂,传统上是 iptables,由于两台机器都采用和 RHEL-8 兼容的用户态,所以还涉及 nftables:

图片来源见文末链接

折腾一番后,所幸找到了一个查找容器运行依赖项的工具(具体用法见这篇文章)。对着检查出的结果, 补齐 "Generally Necessary" 里面 "missing" 的部分(比如 CONFIG_VETH),最后总算勉强跑起来了。

小结

由于在此期间需要多次重编内核,ccache 的加速作用功不可没。在配置差异的比较中,源码 "scripts" 目录下的 diffconfig 工具也是必不可少。整个探(折)索(腾)的过程,除了工具的使用,对 KVM 和 docker 底层依托的组件,也有了更深的印象。

 

除了腾出有限的存储空间,更少的配置也意味着更短的编译时间(咱这只有 1 到 2 个 CPU 的小驴,编译内核可是非常耗时的),以及更快速的启动(可以用 "systemd-analyze" 来分析启动时间的构成)。

参考:

iptables: The two variants and their relationship with nftables | Red Hat Developer

原文链接:https://zhuanlan.zhihu.com/p/523851273  原文作者:兰新宇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

802.11协议:wifi

802.11协议 博客链接:https://www.blog.23day.site/articles/71 一、协议简介 IEEE 802协议簇是指IEEE标准中关于局域网(LAN)和城域网(MAN)的一系列标准。IEEE 802中定义的服务和协议限定在OSI七层网络模型的最低两层…

m基于FPGA的NBDP系统ARQ单元模块的verilog实现

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 NBDP(窄带直接印字电报),全称Narrow-Band Direct-Printing。是GMDSS地面无线民系统中的一种重要通信技术,这个终端设备,要与MF、HF设备…

阿里云国际版代充-阿里云无影云桌面是什么?

阿里云国际版无影云桌面的原产品名为弹性云桌面,融合了无影产品技术后更名升级。它可以为用户提供易用、安全、高效的云上桌面服务,帮助快速构建、高效管理桌面办公环境,提供安全、灵活的办公体系。 阿里云国际版无影云桌面分类:…

微信商城怎么开通【微信商城】

微信商城又可以称为微商城,微信商城是很多商家企业作为线上销售的一个平台,毕竟在微信这个这么高日活量的社交平台上,自然会有很多潜在顾客。那么如果想在微信上卖货的商家企业怎么开通微信商城呢,下面给大家说说微信商城怎么开通…

计算机网络实验二:ARP欺骗

计算机网络实验二:ARP欺骗 博客链接:https://www.blog.23day.site/articles/66 一、wireshark 要求:配置并使用wireshark,在无线环境下监听非本机的数据码流,记录并解释如下集中情况下听到的数据包的意义,…

Python爬取福利图要在中午,因为早晚会出事!我才存了2000文件夹

爱美之心人皆有之,我们爬取找寻这些漂亮小姐姐的图片并不是出于什么龌龊的目的。而是欣赏美好的东西总是会让人心情愉悦的,对于美丽事物的追求是人与生俱来的天性。 爬虫成果 发现很多想要学习Python却不知道该怎么下手的朋友,正好我这里整…

基于场景的数据集------明厨亮灶数据集

为了和各位开发爱好者深入合作交流,特此准备分批次开放数据集拱大家交流学士研究使用,整理的非常细腻,有些是专业队伍标注的,主要是菲律宾那边的团队进行标注的。依据众多算法搭建的算法平台主体算法包括 人脸识别,人…

Vue3-ElemenPlu,全栈开发后台系统-JWT方案讲解第三章-Koa架构设计接口方面实现mongdb安装配置工具函数的封装前台首页实现

第三章-Koa架构设计 #!/usr/bin/env node/*** Module dependencies.*/var app = require(../app); var debug = require(debug)

公司新来的00后真是卷王,工作没两年,跳槽到我们公司起薪18K都快接近我了

都说00后躺平了,但是有一说一,该卷的还是卷。这不,前段时间我们公司来了个00后,工作没两年,跳槽到我们公司起薪18K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。 …

【LVGL学习笔记】(一)环境搭建

LVGL全程LittleVGL,是一个轻量化的,开源的,用于嵌入式GUI设计的图形库。并且配合LVGL模拟器,可以在电脑对界面进行编辑显示,测试通过后再移植进嵌入式设备中,可以高效地进行开发。 一.嵌入式设备的移植 L…

开发Java Web项目基础储备

大家好,我是邵奈一,一个不务正业的程序猿、正儿八经的斜杠青年。 1、世人称我为:被代码耽误的诗人、没天赋的书法家、五音不全的歌手、专业跑龙套演员、不合格的运动员… 2、这几年,我整理了很多IT技术相关的教程给大家&#xff0…

互联网寒冬下奇葩公司行为艺术一览!你就是想笑死我继承我的代码

干货不少,有图有真相,大家慢慢看下去! 既然创业,我为什么不自己当老板,要去给你当合伙人?是为了那1K-2K的高薪吗? 这招的不是高级工程师与合伙人,招的怕不是个傻子! 有…

[激光原理与应用-58]:激光器 - 光学 - 常见光学镜片的特性

目录 一、纯度 二、透明度与透光率 三、均匀度 四、折射率 五、色散率 六、反射率 七、透光率 八、光线吸收率 一、纯度 光学纯度又称旋光纯度。 二、透明度与透光率 透光率,表示光线透过介质的能力,是透过透明或半透明体的光通量与其入射光…

域名停靠(域名抢注的几种形式)

域名停靠,又叫域名停放。简单来说,就是将具有一定流量的优质域名交给域名停靠服务商管理,让他们在你的域名上面投放广告。 “域名停靠”来自于英文Domain Name Parking,简称DNParking,也称域名停放。如果您有一个理想的域名或者带有流量(即&…

杂七杂八的网络安全知识

杂七杂八的网络安全知识 博客链接:https://www.blog.23day.site/articles/81 一、信息安全概述 1.信息与信息安全 信息与信息技术 信息奠基人:香农:信息是用来消除随机不确定性的东西 信息的定义:信息是有意义的数据&#xff…

python采集付费论文批量下载 并保存到文档,毕设论文再也不愁......

嗨害大家好鸭! 我是小熊猫鸭~ 大家是不是在写毕业论文的时候 需要参考某一段的内容 要用到复制粘贴,但是吧,某文库就需要付费, 就老难受了… 我们今天就来解决这个"老难受" 环境使用: python 3.8 pych…

2021年全球区块链投融资概况 美国融资量最多 数字资产相关领域依旧火热

据不完全统计,2021年,全球区块链产业共发生1812笔融资事件,从月度投资量来看,3月和4月投资量均达200笔以上,3月数量最多为239笔,其次是4月数量为214笔。1月和2月则获投量最少,均不达100笔&#…

怎么写一个树形穿梭框

图片懒加载基本原理 所谓图片懒加载,就是需要展示图片的时候再加载,当图片没有进入我们的视觉范围内的时候,图片还没有加载,只用一个占位符或者 loading 图片替代。当我们滚动页面时,占位符或者 loading 图片进入到我…

[附源码]Python计算机毕业设计Django绿色生活交流社区网站

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

部门来了个测试开发,听说是培训生,上来一顿操作给我看呆了...

📌 博客主页: 程序员二黑 📌 专注于软件测试领域相关技术实践和思考,持续分享自动化软件测试开发干货知识! 📌 公号同名,欢迎加入我的测试交流群,我们一起交流学习! 前段…