本文旨在阐述如何使用virt-sysprep制作kvm的qcow2格式的模板,以及一些感想。
0x00 前言
许久没有更新博客,正在花时间将手上的几台HomeLab机器整合划分不同的域,写blog素材upup,而kvm的各项工具正在蓬勃发展,现已不再需要osp和rhev也能够获得比较良好的虚拟机管理体验了。
0x01 工具介绍
这次的主角是virt-sysprep,以下方法适用于制作Ubuntu1804,Ubuntu2004,CentOS7,Centos Stream 8的模板。
0x02 制作过程
新建模板
- 使用lvm,并且设置确保/home目录没有使用
- 设置普通用户并赋予sudo权限
- Ubuntu选择live-server, CentOS选择minimal
清除标记
安装完成后使用virt-sysprep清除以下
- 默认的日志项
- 重置ssh相关
- 清除machine-id
- 时区设定
1 | # virt-sysprep -d ubuntu2004_server --timezone 'Asia/Shanghai' --operations machine-id --no-logfile -v -x |
打包
我安装时直接通过qcow2本身的稀松性(sparse)来生成,qcow2是具有稀松性的存储格式,会预划分磁盘大小,所以ls -hl看的大小是预划分的大小,只有du和ls -hls看的才准确。单纯地scp它们,稀松性不会被很好地保留,可能会出现以原先大小存储的可能性。因此应该用tar预先处理稀松性。
1 | # tar -cv --sparse -f ubuntu2004_server.tar ubuntu2004_server.qcow2 |
0x03 不同发行版
最近有不少不同Linux发行版的各种新闻,CentOS Stream 8取代CentOS 8,国家机关强推统信、麒麟OS等各种关乎不同OS的新闻出现,趁这篇博文撰写的时候谈一下自己粗浅的见解。我认为没有最好的Linux发行版,只有最适合自己的发行版。每种发行版于我而言,它们所做的一些开箱即用的优化以及一些特性都让我爱不释手。
区别
- CentOS Stream:Stream的出现,我认为顺应了云原生浪潮。小版本的取消,使得CentOS上的创新能够以最低、最快的门槛适配RHEL。CentOS过去的角色,Rocky、Almalinux、TencentOS这些发行版可以轻松填补,但是CentOS Stream的角色它们却不能填补。这对开源软件界进入企业流行无疑是一大利好。
- RHEL: 集最多硬件支持、最优开源软件编译参数实践、最优商业支持于一身的Linux发行版。
- Rocky,Almalinux、统信UOS服务器版、TencentOS、OpenAlios: 现今的CentOS角色,并且也推出了便宜的支持策略,像Oracle linux一样,更低的商业成本享受rpm系,Oracle linux做的只是对自己Oracle数据库的一些简单优化参数,而OpenAlios目前的信息看来是旨在针对国内的硬件适配兼容。
- Debian:apt系的最上游,拥有比RHEL更“自由”的发行版,提供了进入Linux流行的更低门槛。毫无疑问会被更多不旨在进入企业流行盈利的软件爱好者所喜爱,须知也不是所有的开源应用都热衷于进入到企业盈利。
- Ubuntu:apt系的扛把子,漂亮优雅的桌面风格,更新的内核。现在也采取了和RHEL一样的“十年”支持。额外使用了cloud-init来实现更易分发的特性,但是这也带来了一定侵入性,可选的apt系商业支持。
- Kali、deepin、统信UOS桌面版: 拥有很多适合特定场景的软件集合,提供开箱即用的桌面大杂烩工具集。
- openEular:结合了Ubuntu发行策略优势,以自身小版本为上游的rpm系产物。一方面背靠rpm系可以获得成熟的企业支持经验和古稀硬件的支持经验,一方面采用更新内核,可以更好地衔接上游的开源成果。也隐去了人们对CentOS Stream的担忧。
- RHCOS、RancherOS、Photon OS:专为容器而生的OS,从机器的角度提供更加可控的K8S运行时的OS,但从人类的角度更加可控性更差。它们应用在物理机上能节省更多的资源给上层,但也意味着更多的开源特性依赖厂商支持。
- 其他:没有体验不做评价。
选择原则
- 商业成本&业务中断容忍度(高?中?低?)
- 安全要求(高?中?低?)
- 虚拟化程度?(高?中?低?容器化?虚拟机?物理机?)
- 技术栈支持度(高?中?低?内核依赖?组件依赖?特性依赖?)
个人癖好
- 当无可避免地需要运行不可信代码时,会优先考虑拥有selinux的rpm系。
- 当需要开箱即用的软件环境时,会优先根据其支持程度选择apt系。
- 当有稀奇古怪的硬件时,会优先考虑rpm系。
- 当容器化程度很高,底层os需要及时更新及时,会考虑CentOS Stream、openEular这种不以牺牲人类可控性但又不至于更新太慢的OS。
0x04 总结
- virt-sysprep挺好用的,把我暂时地从cloud-init的苦海拯救了出来。
- virt-sysprep制作模板时背后调用virt-customize启用临时kvm制作,足够优雅。
- 各大发行版都有自己的使用场景,应结合使用场景,相互借鉴,大家好才是真的好。“无他,唯手熟尔”。
- 有机会搞一个混杂各种发行版的K8S玩玩。
- 更多的厂商参与,对于客户来说是好事,并且眼睛足够多,开源特性能使得它们变得更好,互相学习。
- 能够在这么纷繁复杂的世界中诞生Linux,已经是很了不起的事情了。