news 2026/4/16 11:06:16

云平台生成自定义虚拟机镜像

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
云平台生成自定义虚拟机镜像

定制云镜像场景

私有云平台上常见的虚拟机镜像厂商提供免费的,常规之外的业务镜像需要提供官方ISO镜像由云厂商定制化完成。那具体云平台使用的镜像和ISO标准镜像有什么不同呢,为什么需要要重新定制化虚拟机镜像呢?云平台镜像并不是使用原版标准iso镜像来生成虚拟机,为了适应云平台的管理、监控、动态配置网络、注入ssh公钥、创建用户和设置密码、执行自定义脚本、动态扩容等功能性要求,需要执行镜像虚拟化操作。cloud-init就是用于云环境中虚拟机初始化工具,他的核心作用是在虚拟机首次启动时,自动完成系统配置

了解cloud-init

Cloud-init是一种开源的Linux虚拟机初始化工具,它可以快速地在AWS和OpenStack等云平台上创建虚拟机,并完成系统初始化任务,例如用户设置、密码设定、磁盘扩展、安装软件包等。启动系统时,cloud-init会从nova metadata服务或config drive中获取metadata,实现定制任务,包括但不限于:设置默认语言环境、设置实例主机名、添加ssh keys到.ssh/authorized_keys、设置用户密码、配置网络以及安装软件包等。

安装包下载地址:

Centos7下载地址: http://cloud.centos.org/centos/7/images/

Debian10下载地址: http://cdimage.debian.org/cdimage/cloud/OpenStack/current-10/ Ubuntu18下载地址: https://cloud-images.ubuntu.com/bionic/current/

在kvm环境实现虚拟机镜像制作

通过ISO生成虚拟机,然后在可以通外部网络的环境下,安装配置对应系统版本的镜像源(默认的基础repo就行),然后安装下列程序。对应的telegraf直接从本地上传一个安装即可。

前期条件
  • 准备一台KVM机器,用于制作初始的centos7镜像
  • 已为Linux云服务器绑定弹性IP。
  • 已登录Linux云服务器。
  • Linux云服务器的网卡属性为DHCP方式。

1.下载cloud-init

yum install cloud-init -y rpm -qa |grep cloud-init cloud-init -v #根据镜像原yum源来安装cloud-init比较好,或者epel中有该rpm程序包。 [root@localhost ~]# cloud-init -v /usr/bin/cloud-init 19.4 #开启cloud-init cloud-init init --local //设置开机自启动 systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

2.配置cloud-init工具

编辑配置文件

配置文件中的disable_root字段为1表示为禁用,为0表示不禁用。true表示禁用,false表示不禁用。

ssh_pwauth为1,设置开放root密码远程登录并开启root用户的ssh权限。

设置disable_root值为0

lock_passwd 设置为false,false表示不锁住用户密码。

[root@centos7-2 ~]# cat /etc/cloud/cloud.cfg users: - default disable_root: 0 #是否禁用root用户 ssh_pwauth: 1 #ssh秘钥认证 #手动添加openstack列和主机名称管理 datasource_list: [ 'OpenStack' ] datasource: OpenStack: metadata_urls: ["http://169.254.169.254"] timeout: 5 max_wait: 60 preserve_hostname: flase #是否保留主机名称 manage_etc_hosts: true #管理hosts文件 #建议提前配置好网卡配置文件为dhcp获取,否则在私有云上创建的实例可能会导致获取不到IP地址; #原因是cloud-init中的自动配置网卡文件可能会导致mac地址不一致 network: config: disabled #disabled:为不透传ip,需要手动写入;enable:cloud-init会自动配置ip,需要去掉该参数 #自定义用户登录显示。 runcmd: - [ sh, -c, echo "=========Welcome To OpenStack'=========" > /root/runcmd.log ] cloud_init_modules: - ssh - migrator - bootcmd - write-files - growpart - resizefs - set_hostname - update_hostname - update_etc_hosts - rsyslog - users-groups cloud_config_modules: - mounts - locale - set-passwords - yum-add-repo - package-update-upgrade-install - timezone - puppet - chef - salt-minion - mcollective - disable-ec2-metadata - runcmd - ntp-conf cloud_final_modules: - rightscale_userdata - scripts-per-once - scripts-per-boot - scripts-per-instance - scripts-user - ssh-authkey-fingerprints - keys-to-console - phone-home - final-message - power-state-change system_info: distro: centos paths: cloud_dir: /var/lib/cloud/ templates_dir: /etc/cloud/templates/ ssh_svcname: sshd # vim:syntax=yaml chpasswd: list: | root:Cl0ud-init #设置要修改的密码,这里可以去掉root用户密码固定,False expire: False

3.安装对应软件包

监控agent等,按需安装即可,用于云平台管理云主机功能实现

yum -y install telegraf qemu-guest-agent cloud-utils-growpart acpid // ACPI服务是控制重启和关闭实例 yum -y install acpid systemctl enable acpid // 安装cloud-utils-growpart 允许分区调整 yum -y install cloud-utils-growpart //qemu-guest-agent,缩写qga。该功能支持该镜像创建的云主机可以进行修改密码和热升级的操作。 yum -y install qemu-guest-agent #自动化脚本安装有点问题,需要手动yum安装。 systemctl enable qemu-guest-agent #生成虚拟机镜像以后新建的虚拟机看这个服务启动是否成功。 // CentOS系统必须要禁用默认zeroconf路由,以便精确访问OpenStack数据源 echo "NOZEROCONF=yes" >> /etc/sysconfig/network // 配置GRUB_CMDLINE_LINUX内容 [root@centos7 ~]# vim /etc/default/grub GRUB_CMDLINE_LINUX="crashkernel=auto console=tty0 console=ttyS0,115200n8" // 保存更改 [root@centos7 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg //安装telegraf来支持云管对虚拟机的监控功能 rpm -ivh telegraf-1.0.1-1.x86_64.rpm systemctl enable telegraf //提供云主机访问云硬盘的速度,宿主机安装virtIio-win(未测试) yum -y install virtio-win

4.关闭防火墙和selinux

# 关闭selinux sed -i -r 's/^(SELINUX=).*/\1disabled/' /etc/selinux/config systemctl stop firewalld.service systemctl disable firewalld.service iptables -F

5.配置网卡动态获取ip

#cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet BOOTPROTO=dhcp NAME=eth0 DEVICE=eth0 ONBOOT=yes

更多云计算知识请关注公众号路途-在路上的订阅内容 :https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzY0MDIyMjExMQ==&action=getalbum&album_id=4288308068947279885&scene=126&sessionid=1765549598439#wechat_redirect

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

基于Web的学生成长激励系统设计与实现【高分通过】

如果你需要计算机开发、大数据、人工智能或信息安全方面的专业支持,我可以为你提供高质量、性价比突出的解决方案。 下拉到文章底部添加微信即可联系我。 高效负责、结果导向,合理收费,拒绝白嫖。 摘要 开发学生成长激励系统,既有…

作者头像 李华
网站建设 2026/4/16 11:06:14

基于实时迭代的数值鲁棒NMPC双模稳定预测模型附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 🍊个人信条:格物致知,完整Matlab代码及仿真…

作者头像 李华
网站建设 2026/4/8 21:30:14

AI辅助学习如何避免依赖陷阱?

个人首页: VON 鸿蒙系列专栏: 鸿蒙开发小型案例总结 综合案例 :鸿蒙综合案例开发 鸿蒙6.0:从0开始的开源鸿蒙6.0.0 鸿蒙5.0:鸿蒙5.0零基础入门到项目实战 本文章所属专栏:《AI从0到1:普通人…

作者头像 李华
网站建设 2026/4/1 4:28:36

基于SpringBoot的高校HIV预防宣传系统毕业设计项目源码

项目简介基于 SpringBoot 的高校 HIV 预防宣传系统,直击 “高校 HIV 科普覆盖不足、学生认知片面、咨询求助渠道不畅” 的核心痛点,依托 SpringBoot 轻量级框架优势与高校场景化运营能力,构建 “科普宣传 风险自测 在线咨询 数据管理” 的…

作者头像 李华
网站建设 2026/4/15 12:17:38

刷题日记day4(搜索)

第一篇题解 蒟蒻的第四篇题解希望大家支持 题目描述 P3915树的分解 P3915 树的分解 题目描述 给出 NNN 个点的树和 KKK,问能否把树划分成 NK\frac{N}{K}KN​ 个连通块,且每个连通块的点数都是 KKK。 输入格式 第一行,一个整数 TTT&am…

作者头像 李华