华为私有云HCS 8.1.1镜像制作与云主机发放实战指南
2026/9/19 3:55:20 网站建设 项目流程

1. 项目背景与整体设计思路

华为私有云HCS(Huawei Cloud Stack)8.1.1这套方案,我在过去两年里前前后后部署过六七套,从最小的三节点测试环境到几十节点的生产集群都摸过一遍。很多人第一次接触HCS,最头疼的不是装底座,而是镜像制作云主机发放这两个环节——底座装完了,ServiceOM能登录了,结果发现手里没有可用的镜像,或者镜像传上去了却发放不出虚拟机。这套流程看起来只是“做个镜像、点几下发放”,实际上中间涉及虚拟化格式转换、驱动注入、Guest OS兼容性、存储池对接、网络平面规划等一大堆细节,任何一个环节没对齐,最后都会卡在“创建中”或者“错误”状态。

这篇内容就是把我自己踩过的坑和验证过的流程完整梳理一遍。核心目标是:让你从零开始,把一台普通Linux或Windows系统做成HCS可用的镜像,再通过ServiceOM成功发放出一台能正常登录、网络可达的云主机。适合谁看?刚接手HCS运维的工程师、需要给业务方交付云主机的实施人员、以及想搞清楚私有云镜像底层逻辑的技术爱好者。不需要你事先精通OpenStack,但至少要能登录ServiceOM、看得懂基本的网络和存储概念。

整体设计思路我按“先做镜像、再传镜像、最后发主机”这条主线走。为什么是这个顺序?因为HCS的云主机发放强依赖镜像,镜像不对,后面全是白费。而镜像制作又分两条路:一条是用官方提供的ISO自己装一台再转格式,另一条是拿现成的qcow2或vhd直接改。我推荐第一条路,虽然慢一点,但可控性最强,尤其是需要注入virtio驱动的时候,自己装能确保驱动版本和HCS底层KVM匹配。第二条路适合批量场景,但前提是你已经有一套验证过的模板。

在方案选型上,我坚持几个原则:镜像格式统一用qcow2(HCS底层基于KVM,qcow2是原生支持最好的),磁盘总线用virtio(性能比IDE强太多,但Windows必须提前注入驱动),网卡模型用virtio(同理),系统盘大小控制在40G到60G之间(太小装不下驱动和补丁,太大浪费存储且发放慢)。这些选择背后都有原因,后面章节会逐个拆开讲。

另外要提前说清楚:HCS 8.1.1的ServiceOM界面和早期版本比有变化,镜像上传入口在“服务列表 > 镜像服务”下面,但有些局点会把它归到“资源 > 镜像”里,具体看你的部署模式。我下面描述的路径以标准Region Type I为准,如果你的是边缘小站或者特殊形态,菜单可能略有差异,但核心逻辑一样。

2. 镜像制作前的环境准备与关键参数

2.1 制作环境的选择与工具链

做镜像不要直接在HCS的管理节点上搞,也不要在生产业务虚拟机上搞。我的习惯是找一台独立的Linux物理机或者VMware Workstation里的虚拟机,装一个干净的CentOS 7.9或者Ubuntu 20.04作为“制作机”。为什么强调干净?因为你要在里面装虚拟化工具、挂载镜像、转换格式,如果制作机本身一堆乱七八糟的服务,容易干扰。制作机配置不用太高,4核8G、100G系统盘足够,但必须支持嵌套虚拟化(如果你要在制作机里再跑虚拟机来装系统的话)。如果制作机本身是物理机,那就更简单,直接用它当宿主机。

工具链方面,核心就几个:qemu-img(格式转换和查看)、virt-install(创建虚拟机装系统)、libguestfs-tools(离线修改镜像,比如注入驱动、改配置)、guestfish(libguestfs的命令行工具)。CentOS下一条命令装齐:

yum install -y qemu-kvm libvirt virt-install libguestfs-tools guestfish

Ubuntu下对应的是:

apt install -y qemu-kvm libvirt-daemon-system virtinst libguestfs-tools

装完之后验证一下qemu-img --versionvirt-install --version能正常输出。这里有个坑:有些发行版自带的qemu-img版本太老,转换出来的qcow2在HCS上识别不了,建议qemu-img版本不低于4.2。查看版本用qemu-img --version,如果低于4.2,考虑从源码编译或者换一个更新的发行版。

2.2 操作系统镜像的获取与校验

官方ISO从对应发行版的官网下载,别从乱七八糟的镜像站拿,避免被篡改。下载完一定要校验SHA256,这个步骤很多人跳过,但我在实际交付中真遇到过ISO损坏导致装出来的系统有问题的案例。校验命令:

sha256sum CentOS-7-x86_64-Minimal-2009.iso

对比官网公布的哈希值,一致才用。Windows镜像同理,从微软官方渠道获取,校验哈希。这里不展开具体下载地址,避免广告嫌疑,你按自己习惯的渠道来,但校验这一步不能省

2.3 关键参数的前置规划

在动手之前,先把几个关键参数定下来,后面所有操作都围绕它们:

参数项推荐值说明
镜像格式qcow2HCS原生支持,支持稀疏文件,节省空间
磁盘总线virtio性能最优,Windows需注入驱动
网卡模型virtio同上
系统盘大小40G-60G太小不够用,太大发放慢
分区方案单根分区+swap避免LVM,简化后续扩容
文件系统ext4(Linux)/ NTFS(Windows)兼容性最好
时区Asia/Shanghai避免时间偏差导致认证失败
主机名留空或通用名发放时由Cloud-Init注入

这些参数不是拍脑袋定的。比如为什么不用LVM?因为HCS的磁盘扩容机制对LVM支持不够友好,后期扩容容易出问题。为什么系统盘不超过60G?因为qcow2是稀疏格式,实际占用取决于写入量,但发放时HCS会按虚拟大小分配存储,太大浪费资源池。为什么时区要设对?我遇到过因为时区差8小时导致Token过期、ServiceOM登录失败的案例,排查了半天。

提示:如果你要做Windows镜像,系统盘建议至少60G,因为Windows更新和驱动占空间大,40G很容易满。

3. Linux镜像制作全流程实操

3.1 用virt-install安装基础系统

制作机上启动libvirtd:

systemctl start libvirtd systemctl enable libvirtd

然后创建虚拟机装系统。我习惯用命令行,因为参数可控:

virt-install \ --name hcs-template-centos7 \ --ram 4096 \ --vcpus 2 \ --disk path=/var/lib/libvirt/images/hcs-template-centos7.qcow2,size=40,format=qcow2,bus=virtio \ --network network=default,model=virtio \ --graphics vnc,listen=0.0.0.0 \ --cdrom /path/to/CentOS-7-x86_64-Minimal-2009.iso \ --os-variant centos7.0 \ --boot cdrom,hd

这里--diskbus=virtio很关键,确保系统盘走virtio总线。--networkmodel=virtio同理。装系统过程中,分区方案选“自动配置分区”,但要把LVM取消掉,直接用标准分区。具体操作:在安装界面的“安装目的地”里,选“我要配置分区”,然后手动创建/boot(1G)、/(剩余全部)、swap(4G)。文件系统选ext4。

装完后重启,进入系统,做几件必做的事:

  1. 关闭SELinux:编辑/etc/selinux/config,设SELINUX=disabled,然后setenforce 0临时生效。
  2. 关闭防火墙:systemctl stop firewalld && systemctl disable firewalld。HCS发放时会通过Cloud-Init注入网络配置,防火墙开着容易挡掉。
  3. 安装Cloud-Init:yum install -y cloud-init cloud-utils-growpart。这是HCS发放时注入主机名、密码、网络配置的关键组件,不装的话发放出来的主机可能无法登录。
  4. 配置Cloud-Init数据源:编辑/etc/cloud/cloud.cfg,确保datasource_list包含ConfigDriveOpenStack。HCS用的是ConfigDrive方式注入元数据。
  5. 清理网络持久化规则:删除/etc/udev/rules.d/70-persistent-net.rules(如果有),避免网卡名绑定导致新主机网络起不来。
  6. 清空/etc/machine-idecho -n > /etc/machine-id,让每台发放的主机有唯一ID。
  7. 安装qemu-guest-agent:yum install -y qemu-guest-agent,然后systemctl enable qemu-guest-agent。这个agent让HCS能获取虚拟机内部信息,比如IP地址,不装的话ServiceOM里看不到IP。

做完这些,关机:poweroff

3.2 镜像格式转换与压缩

关机后,找到qcow2文件,通常在/var/lib/libvirt/images/下。先查看信息:

qemu-img info /var/lib/libvirt/images/hcs-template-centos7.qcow2

确认格式是qcow2,虚拟大小40G。然后做一次“压缩转换”,把稀疏文件里未使用的块去掉,减小实际体积:

qemu-img convert -c -O qcow2 \ /var/lib/libvirt/images/hcs-template-centos7.qcow2 \ /tmp/hcs-centos7-final.qcow2

-c表示压缩,-O qcow2指定输出格式。转换完再看一下大小,通常能从几十G降到几G。这一步不是必须的,但能显著减少上传时间,尤其是网络带宽有限的时候。

3.3 用libguestfs做离线检查与微调

有时候需要在不上虚拟机的情况下改镜像里的文件,比如确认Cloud-Init配置对不对。用guestfish:

guestfish --rw -a /tmp/hcs-centos7-final.qcow2 -i

进入交互界面后,可以cat /etc/cloud/cloud.cfg查看配置,ls /etc/sysconfig/network-scripts/看网卡配置。改完exit退出。注意--rw表示可写,不加的话是只读模式,改了不生效。

注意:libguestfs对qcow2的兼容性很好,但如果镜像里有LVM,挂载可能麻烦一点,所以前面强调不用LVM。

3.4 镜像上传到ServiceOM

登录ServiceOM,找到“镜像服务”或“资源 > 镜像”,点“创建镜像”。填写:

  • 名称:比如CentOS7.9-Base-40G
  • 格式:qcow2
  • 架构:x86_64
  • 最小磁盘:40G(必须和镜像虚拟大小一致或更小)
  • 最小内存:1024M
  • 是否支持Cloud-Init:是
  • 虚拟化类型:KVM

然后选择刚才做好的qcow2文件上传。上传时间取决于文件大小和网络,几G的文件通常几分钟到十几分钟。上传完状态变成“正常”就可以用了。

这里有个坑:最小磁盘不能填得比镜像虚拟大小大,否则发放时会报错。比如镜像虚拟大小40G,你填60G,HCS会认为镜像需要60G磁盘,但实际镜像只有40G,发放时可能失败。填一样或者略小都行。

4. Windows镜像制作的特殊处理

4.1 驱动注入是核心难点

Windows镜像比Linux麻烦的地方在于virtio驱动。默认Windows安装盘不带virtio驱动,如果你直接用virtio磁盘装系统,安装程序会找不到硬盘。解决办法有两个:一是装系统时用IDE磁盘,装完再注入virtio驱动改成virtio;二是直接用注入好驱动的ISO装。我推荐第二种,省事。

制作注入驱动的ISO:从Fedora官网下载virtio-win的ISO(搜“virtio-win iso”就能找到),然后用mkisofs或者直接挂载这个ISO,把里面的驱动文件夹复制出来。装Windows时,在“加载驱动”界面指向对应版本的驱动文件夹(比如viostor/w10/amd64),加载后就能识别virtio磁盘。

装完系统后,还要装NetKVM驱动(网卡)、Balloon驱动(内存气球)、vioserial驱动等。这些都在virtio-win ISO里,进系统后运行里面的virtio-win-guest-tools.exe一键装齐。

4.2 Windows镜像的通用化处理

Windows发放前必须做sysprep通用化,否则每台主机的SID一样,域环境会出问题。在Windows里运行:

C:\Windows\System32\Sysprep\sysprep.exe /oobe /generalize /shutdown

选“通用化”和“关机”。执行完系统自动关机,这时候的镜像就是通用化的。注意sysprep只能执行有限次数,别反复做。

另外,Windows的Cloud-Init对应的是Cloudbase-Init,需要单独安装。从Cloudbase官网下载msi安装包,装完后配置cloudbase-init.conf,指定ConfigDrive数据源。这个配置文件和Linux的cloud.cfg类似,但格式是INI。

4.3 Windows镜像的格式转换

Windows的qcow2通常比较大,转换时同样用qemu-img convert -c -O qcow2。但Windows镜像压缩率不如Linux高,因为系统文件本身压缩过。上传前确认虚拟大小和最小磁盘设置一致。

5. 云主机发放与网络存储对接

5.1 发放前的资源池检查

在ServiceOM里发放云主机之前,先确认几件事:计算节点是否在线存储池是否有足够空间网络平面是否配置正确。我见过很多次发放失败是因为存储池满了或者网络平面没配VLAN。检查路径:ServiceOM > 资源 > 计算资源,看节点状态;资源 > 存储资源,看可用容量;网络 > 网络平面,看VLAN和IP池。

5.2 发放参数填写要点

点“创建云主机”,选刚才上传的镜像。关键参数:

  • 规格:按业务需求选,测试用2核4G足够
  • 系统盘:默认按镜像最小磁盘,可以调大,但不能小于镜像虚拟大小
  • 网络:选对网络平面,确保IP池有可用IP
  • 安全组:默认放通22/3389,或者按需配置
  • 登录方式:密码或密钥,密码要符合复杂度要求
  • 主机名:自定义,Cloud-Init会注入

填完点创建,状态从“创建中”变“正常”通常需要1到3分钟。如果卡在“创建中”超过5分钟,大概率是存储或网络有问题,去计算节点上看libvirt日志。

5.3 发放后验证与常见问题

发放成功后,先看ServiceOM里显示的IP对不对,然后尝试SSH或RDP登录。如果登录不上,按这个顺序排查:

  1. 安全组是否放通端口
  2. 网络平面VLAN是否和物理交换机一致
  3. 虚拟机内部网卡是否拿到IP(通过VNC登录进去看)
  4. Cloud-Init是否执行成功(看/var/log/cloud-init.log

我遇到过最诡异的一次是虚拟机拿到了IP但ping不通网关,最后发现是物理交换机端口没配trunk。这种问题只能一层层查。

6. 常见问题速查与避坑经验

6.1 镜像相关高频问题

问题现象可能原因解决办法
上传镜像报格式错误qemu-img版本太老升级qemu-img到4.2以上重新转换
发放时找不到镜像镜像状态不是“正常”等上传完成或重新上传
发放后无法登录Cloud-Init没装或配置错检查cloud.cfg和ConfigDrive
Windows蓝屏virtio驱动没注入重新制作镜像注入驱动
磁盘识别不到总线不是virtio制作时确保bus=virtio

6.2 网络与存储避坑

网络这块,VLAN ID一定要和物理网络对齐,我见过有人填错VLAN导致虚拟机完全不通。存储这块,qcow2文件不要放在NFS延迟高的存储上,否则发放极慢。另外,如果用的是分布式存储,确认存储池的副本数配置,副本数不够可能导致数据丢失。

6.3 我个人的几条硬核经验

第一,每次做新镜像都从干净ISO开始,别在旧镜像上改,改着改着就乱了。第二,镜像命名带日期和版本,比如CentOS7.9-Base-20240115,方便追溯。第三,发放测试用最小规格,确认没问题再上生产规格。第四,保留一份原始qcow2,别只留上传后的,万一要改还有底稿。第五,ServiceOM操作尽量用Chrome,有些浏览器兼容性不好,按钮点不动。

这套流程我反复验证过,从镜像制作到发放成功,Linux大概40分钟,Windows大概1小时。慢是慢点,但稳。你要是赶时间,可以提前做好模板镜像,后面直接克隆,那就快多了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询