news 2026/9/19 16:00:33

华为HCS 8.1.1私有云实战:镜像制作、上传与云主机发放全流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
华为HCS 8.1.1私有云实战:镜像制作、上传与云主机发放全流程

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

华为私有云HCS(Huawei Cloud Stack)8.1.1这套东西,我在过去两年里前前后后部署过四五套,从最小的三节点实验室环境到几十节点的生产资源池都摸过一遍。说实话,第一次接触的时候,光是搞清楚"镜像从哪来、怎么传、云主机怎么发"这条链路就花了我整整一周。官方文档写得很全,但全不等于好用——它把每个组件的功能讲得很细,却很少告诉你"实际动手时先做哪一步、哪一步容易卡住"。

这篇内容就是把我踩过的坑和总结出来的流程完整梳理一遍。核心链路其实就四步:制作或获取镜像 → 上传镜像到HCS → 通过ServiceOM配置资源 → 发放云主机并验证。听起来简单,但每一步里面都有不少细节。比如镜像格式不对导致上传失败、ServiceOM里资源池没关联上导致云主机发不出来、网络平面配错了导致虚机起来了但不通网——这些问题我都遇到过。

这篇文章适合谁看?如果你是刚接触HCS的运维工程师,或者正在做私有云项目的实施人员,再或者你是开发同学需要自己发一台云主机来跑测试,那这篇内容应该能帮你省下不少时间。我不打算照搬官方手册的目录结构,而是按照实际操作的顺序,把每个环节的关键点、容易出错的地方、以及我自己的经验都揉进去讲。

整个流程的设计思路是这样的:镜像是一切的基础,没有可用的镜像就发不了云主机,所以第一步必须把镜像准备好;镜像准备好之后需要通过特定的通道上传到HCS的镜像服务里;然后要在ServiceOM里确认计算资源、存储资源、网络资源都就绪;最后才是发放云主机并做连通性验证。这个顺序不能乱,乱了就会反复返工。

2. 镜像制作的核心细节与实操要点

2.1 镜像格式选择与制作工具

HCS 8.1.1支持的镜像格式主要有几种:qcow2vhdzvhd2raw。其中zvhd2是华为自有的格式,在FusionCompute时代用得比较多;qcow2是KVM生态里最通用的格式,HCS底层基于KVM,所以qcow2是最稳妥的选择。我一般优先用qcow2,兼容性好,制作工具也多。

制作镜像的工具链,我常用的是virt-manager + virt-sysprep + qemu-img这套组合。virt-manager用来创建和安装虚拟机,virt-sysprep用来做镜像的通用化处理(清除机器ID、SSH host key、日志等),qemu-img用来做格式转换和压缩。如果你习惯用命令行,也可以直接用qemu-img create创建磁盘、用virt-install安装系统。

注意:制作镜像时一定要用精简置备(thin provisioning)的磁盘,否则镜像文件会非常大。qcow2格式天然支持精简置备,但如果你从其他格式转换过来,记得用qemu-img convert -O qcow2重新转换一次。

2.2 操作系统安装与通用化处理

安装操作系统这一步,有几个关键设置必须注意。第一,磁盘分区建议用LVM或者简单的单分区方案,不要搞太复杂的分区结构,否则镜像在不同硬件规格的云主机上可能会有问题。第二,网卡配置建议用DHCP,因为云主机的IP是发放时动态分配的,如果你在镜像里写死了静态IP,发出来的云主机网络就不通。第三,SELinux和防火墙建议在镜像里就关掉或者设成permissive,不然云主机起来之后各种服务被拦截,排查起来很烦。

系统装完之后,必须做通用化处理。这一步很多人会忽略,但不做的话,用同一个镜像发出来的多台云主机可能会有相同的machine-id、相同的SSH host key,导致冲突。具体操作:

# 清除machine-id echo -n > /etc/machine-id rm -f /var/lib/dbus/machine-id ln -s /etc/machine-id /var/lib/dbus/machine-id # 清除SSH host key rm -f /etc/ssh/ssh_host_* # 清除日志 rm -rf /var/log/* rm -rf /tmp/* rm -rf /var/tmp/* # 清除bash历史 history -c cat /dev/null > ~/.bash_history

如果你用的是virt-sysprep,可以直接一条命令搞定:

virt-sysprep -a /path/to/disk.qcow2 --operations defaults,-ssh-userdir

2.3 镜像格式转换与压缩

系统安装和通用化做完之后,磁盘文件可能是raw格式或者qcow2格式。如果是raw格式,需要转换成qcow2:

qemu-img convert -f raw -O qcow2 /path/to/disk.raw /path/to/disk.qcow2

转换完成之后,建议做一次压缩,减小镜像体积:

qemu-img convert -O qcow2 -c /path/to/disk.qcow2 /path/to/disk-compressed.qcow2

-c参数表示压缩,对于qcow2格式,压缩后体积通常能减少30%到50%。压缩完之后用qemu-img info确认一下镜像信息:

qemu-img info /path/to/disk-compressed.qcow2

输出里会显示virtual size和disk size,virtual size是云主机看到的磁盘大小,disk size是实际占用的存储空间。确认没问题之后,镜像制作这一步就算完成了。

实操心得:我建议在镜像里预装一些常用的工具,比如cloud-initqemu-guest-agent。cloud-init用于云主机首次启动时的初始化配置(比如注入密码、配置网络),qemu-guest-agent用于HCS平台和云主机之间的通信(比如查询IP、优雅关机)。这两个东西不装的话,云主机的很多功能会受限。

3. 镜像上传与ServiceOM资源配置

3.1 通过ServiceOM上传镜像

镜像制作好之后,下一步是上传到HCS。HCS 8.1.1里上传镜像的入口在ServiceOM(Service Operation Management)控制台。登录ServiceOM之后,找到"镜像服务"或者"镜像管理"菜单,点击"创建镜像"。

上传的时候有几个参数需要填写:

参数说明建议值
镜像名称镜像的显示名称按规范命名,如CentOS-7.9-x86_64
镜像类型公共镜像或私有镜像测试用私有镜像,生产用公共镜像
操作系统类型Linux或Windows根据实际选择
镜像格式qcow2/vhd/zvhd2/rawqcow2
最小磁盘云主机的最小磁盘大小建议≥镜像virtual size
最小内存云主机的最小内存建议≥1GB

上传方式有两种:本地文件上传URL拉取。本地文件上传适合小镜像(几个GB以内),大镜像建议先传到对象存储或者HTTP服务器,然后用URL拉取的方式,速度更稳定。

注意:上传镜像时如果报"格式不支持"或者"镜像文件损坏",先检查镜像格式是否在支持列表里,再用qemu-img check检查镜像文件是否完整。我遇到过一次因为传输过程中文件损坏导致上传失败的情况,重新传一遍就好了。

3.2 ServiceOM里的资源池配置

镜像上传成功之后,还需要确认ServiceOM里的资源池配置是否就绪。资源池包括计算资源池存储资源池网络资源池

计算资源池就是物理主机的集群,在ServiceOM里可以看到每个集群的CPU和内存总量、已分配量、剩余量。发放云主机之前,确认目标集群的剩余资源足够。存储资源池就是后端存储,可能是本地盘、SAN存储或者分布式存储。网络资源池就是可用的网络平面,包括管理平面、业务平面、存储平面等。

在ServiceOM里,这几个资源池需要提前配置好并关联到对应的可用分区(AZ)。如果资源池没有关联到AZ,发放云主机的时候会看不到可选的资源。

# 在ServiceOM的命令行界面(如果有SSH权限)可以查看资源池状态 # 查看计算资源 nova hypervisor-list nova hypervisor-show <hypervisor-id> # 查看存储资源 cinder service-list cinder pool-list # 查看网络资源 neutron net-list neutron subnet-list

这些命令需要在HCS的OpenStack环境里执行,ServiceOM的底层就是OpenStack,所以大部分OpenStack命令都能用。不过HCS对OpenStack做了不少定制,有些命令的输出格式和原生OpenStack不太一样,这个要注意。

3.3 镜像注册与元数据配置

镜像上传到HCS之后,还需要在OpenStack的Glance服务里注册(如果是通过ServiceOM上传的,通常会自动注册)。注册的时候需要指定镜像的元数据,比如hw_disk_bushw_vif_modelos_type等。

# 查看镜像列表 glance image-list # 查看镜像详情 glance image-show <image-id> # 更新镜像元数据 glance image-update <image-id> --property hw_disk_bus=virtio --property hw_vif_model=virtio

hw_disk_bushw_vif_model这两个参数很关键。hw_disk_bus指定磁盘总线类型,建议用virtio,性能最好;hw_vif_model指定网卡模型,也建议用virtio。如果设成ide或者e1000,性能会差很多。

实操心得:如果你在发放云主机时发现磁盘识别不到或者网卡不通,大概率是这两个参数没设对。我建议在镜像注册阶段就把这两个参数设好,后面发放云主机时就不用再改了。

4. 云主机发放与全流程验证

4.1 通过ServiceOM发放云主机

资源池和镜像都就绪之后,就可以发放云主机了。在ServiceOM控制台里找到"云主机"或者"弹性云服务器"菜单,点击"创建云主机"。发放时需要填写或选择以下参数:

  • 可用分区(AZ):选择之前配置好资源池的AZ
  • 规格(Flavor):选择CPU和内存规格,比如2核4GB、4核8GB等
  • 镜像:选择之前上传的镜像
  • 磁盘:系统盘大小,建议≥镜像的virtual size
  • 网络:选择网络平面和子网
  • 安全组:选择安全组规则
  • 登录方式:密码或密钥对

填写完成之后点击创建,HCS会调度到合适的计算节点上创建云主机。创建过程通常需要几十秒到几分钟,取决于镜像大小和存储性能。

# 也可以通过OpenStack命令发放云主机 nova boot --flavor <flavor-id> --image <image-id> --nic net-id=<network-id> --security-group <sg-id> <vm-name>

4.2 云主机连通性验证

云主机创建成功之后,第一件事是验证连通性。在ServiceOM控制台里可以看到云主机的IP地址,用ping测试一下:

ping <vm-ip>

如果ping不通,先检查安全组规则是否放通了ICMP,再检查网络平面和子网配置是否正确。如果ping通了,再用SSH登录:

ssh root@<vm-ip>

登录成功之后,检查一下磁盘、网卡、DNS等是否正常:

# 检查磁盘 lsblk df -h # 检查网卡 ip addr ip route # 检查DNS cat /etc/resolv.conf nslookup www.example.com

如果这些都正常,说明云主机发放成功,整个流程就走通了。

4.3 常见问题与排查技巧

在实际操作中,我遇到过不少问题,这里整理一个速查表:

问题现象可能原因排查方法解决方法
镜像上传失败格式不支持或文件损坏qemu-img check检查文件转换格式或重新上传
云主机创建失败资源池不足或未关联AZ检查集群剩余资源扩容或调整AZ配置
云主机ping不通安全组未放通ICMP检查安全组规则添加ICMP规则
云主机SSH登录失败密码错误或密钥不对检查登录方式重置密码或更换密钥
云主机磁盘识别不到磁盘总线类型不对glance image-show检查元数据设置hw_disk_bus=virtio
云主机网卡不通网卡模型不对glance image-show检查元数据设置hw_vif_model=virtio
云主机DNS解析失败DNS配置不对cat /etc/resolv.conf配置正确的DNS服务器

避坑技巧:我建议在发放云主机之前,先用一个小规格(比如1核1GB)的云主机做测试,确认镜像、网络、存储都没问题之后,再用大规格发放生产云主机。这样可以避免因为镜像问题导致大批量发放失败。

5. 镜像与云主机的进阶优化

5.1 镜像瘦身与启动加速

镜像体积直接影响云主机的发放速度和存储占用。除了前面提到的压缩之外,还可以做以下优化:

  • 删除不必要的软件包:比如开发工具、文档、多语言包等
  • 清理缓存和临时文件yum clean allapt clean
  • 使用精简版操作系统:比如CentOS Minimal、Ubuntu Server等
  • 关闭不必要的服务:比如蓝牙、打印服务等

启动加速方面,可以在镜像里预装cloud-init并配置好初始化脚本,这样云主机首次启动时可以自动完成网络配置、密码注入等操作,减少手动干预。

5.2 云主机模板与批量发放

如果需要批量发放相同配置的云主机,可以创建云主机模板(Flavor + Image + Network + Security Group的组合),然后在ServiceOM里基于模板批量发放。这样可以避免每次发放都手动选择参数,提高效率。

# 创建云主机模板(OpenStack Heat) heat stack-create -f template.yaml <stack-name>

HCS 8.1.1支持Heat编排,可以用YAML模板定义云主机的完整配置,然后一键发放。对于需要发放几十台甚至上百台云主机的场景,Heat编排是最高效的方式。

5.3 镜像版本管理与回滚

在生产环境里,镜像的版本管理很重要。我建议每次更新镜像时都保留旧版本,并且用清晰的命名规则区分,比如CentOS-7.9-v1.0CentOS-7.9-v1.1。如果新版本镜像有问题,可以快速回滚到旧版本。

在ServiceOM里,镜像可以设置"公共"或"私有"属性。公共镜像对所有租户可见,私有镜像只对创建者可见。生产环境建议用公共镜像,测试环境可以用私有镜像。

实操心得:我习惯在镜像的description字段里记录镜像的制作日期、包含的软件版本、已知问题等信息。这样过几个月之后再来看,也能快速回忆起这个镜像的来龙去脉。

6. 个人实操体会与建议

整套流程走下来,最深的体会是:镜像制作是最关键的一步,也是最容易出问题的一步。镜像做得好,后面上传、发放、验证都会很顺;镜像做得不好,后面各种奇怪的问题都会冒出来。所以我在镜像制作阶段会花比较多的时间,反复测试,确保镜像在各种规格的云主机上都能正常启动和运行。

另外,ServiceOM的界面操作虽然直观,但有些配置项藏得比较深,第一次用的时候容易找不到。我建议先把ServiceOM的菜单结构熟悉一遍,知道每个功能在哪个位置,后面操作起来会快很多。

最后分享一个小技巧:如果你在发放云主机时遇到"资源不足"的报错,但明明看到集群还有剩余资源,那大概率是资源超分比的设置问题。HCS支持CPU和内存的超分,但超分比设得太高会导致实际可用资源不足。在ServiceOM里可以查看和调整超分比,建议生产环境CPU超分比不超过1:4,内存超分比不超过1:1.5。

这个流程后续还可以扩展的方向包括:镜像的自动化制作流水线、云主机的自动化发放脚本、以及基于监控的弹性伸缩配置。这些内容等我后面再找时间整理。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 15:59:08

Flutter 3.35 Impeller花屏排查实录:从线上事故到渲染适配

1. 从一次线上事故说起&#xff1a;Impeller 在 3.35 上翻车了那天下午刚发完版&#xff0c;测试同学在群里甩了一张截图&#xff0c;画面上一片横向撕裂的彩色条纹&#xff0c;像老式电视机信号丢失那种花屏。第一反应是"是不是某个页面用了自定义 Shader"&#xff…

作者头像 李华
网站建设 2026/9/19 15:56:25

Linux路径与权限实战:从pwd到chmod的底层逻辑

简介&#xff1a;本资源是一份面向Linux初学者与高校计算机专业学生的实验报告文档&#xff0c;聚焦Linux基础命令的系统性实践与理解。内容覆盖文件权限管理&#xff08;chmod&#xff09;、目录与文件操作&#xff08;ls/pwd/cd/touch&#xff09;、用户与组管理&#xff08;…

作者头像 李华
网站建设 2026/9/19 15:56:03

Java+Vue端到端自动化测试平台:架构设计与并发实践

简介&#xff1a;这份资源面向具备Java与Vue基础的中高级研发人员&#xff0c;尤其是从事测试平台开发、质量保障与自动化测试框架设计的技术人员&#xff0c;围绕端到端自动化测试平台的设计与实现展开&#xff0c;解决复杂业务系统回归测试效率低、失败定位难、测试资产分散等…

作者头像 李华
网站建设 2026/9/19 15:51:32

基于SpringBoot+Vue的电子印章管理系统设计与实现

简介&#xff1a;这是一份基于JavaVueSpringBoot框架的EE电子印章管理系统设计与实现毕业论文&#xff0c;适配计算机软件、信息管理等专业毕业设计&#xff0c;也适合需要快速搭建同类管理系统论文框架的开发者参考。文档围绕人、设备、场景的立体连接理念&#xff0c;完整呈现…

作者头像 李华