Cobbler与cloud-init融合:自动化部署Ubuntu 22.04/24.04 LTS实战

张开发
2026/4/3 23:01:10 15 分钟阅读
Cobbler与cloud-init融合:自动化部署Ubuntu 22.04/24.04 LTS实战
1. 为什么需要Cobbler与cloud-init融合在数据中心和云环境中批量部署服务器是一项常见但繁琐的任务。想象一下如果你需要手动安装100台Ubuntu服务器每台都要经历插入U盘、选择语言、配置网络、设置密码的过程这简直是一场噩梦。而Cobbler与cloud-init的结合就像给这个场景装上了自动挡。Cobbler作为老牌的Linux系统部署工具擅长管理PXE启动、分发镜像和自动化安装。但它传统的kickstart方式在面对Ubuntu新版时显得有些力不从心——特别是从Ubuntu 20.04开始引入的subiquity安装程序完全改变了游戏规则。这时候cloud-init站了出来它原本是为云环境设计的初始化工具现在却成了解决本地自动化安装的钥匙。我去年在部署一个私有云平台时就踩过坑。当时用传统方法部署Ubuntu 22.04发现安装界面总是卡在交互确认页面。后来发现新版Ubuntu的自动安装机制已经从preseed转向了cloud-init的autoinstall格式。这种转变带来的好处是配置更结构化但同时也意味着我们需要重新设计整个自动化流程。2. 环境准备与基础配置2.1 Cobbler服务器搭建首先需要一台已经安装好Cobbler 3.3.7的服务器。如果你还没有搭建可以用以下命令快速部署dnf install cobbler cobbler-web httpd dhcp tftp-server -y systemctl enable --now httpd cobblerd安装完成后别急着操作有几个关键点需要注意确保防火墙放通了TFTP(69)、HTTP(80)、DHCP(67/68)端口/var/lib/cobbler目录要有足够空间建议至少保留20GBSELinux可能会捣乱如果遇到权限问题可以暂时设为permissive模式我建议单独划分一个LVM卷给/var/lib/cobbler因为后续要存放多个ISO镜像。曾经有个项目因为空间不足导致同步失败排查了半天才发现是这个原因。2.2 cloud-init模板准备Cobbler默认不包含cloud-init的自动安装模板我们需要手动创建。关键文件有三个/var/lib/cobbler/templates/cloud-init_user-data - 主配置文件/var/lib/cobbler/snippets/cloud-init_hostname - 主机名片段/var/lib/cobbler/snippets/cloud-init_network - 网络配置片段先处理密码问题。Ubuntu安装时需要预先设置加密密码可以用mkpasswd生成dnf install whois -y # 包含mkpasswd工具 mkpasswd -m sha-512把生成的密文复制到cloud-init_user-data的password字段。这里有个小技巧如果要在多台机器使用不同密码可以在system配置时覆盖$default_password_crypted变量。3. Ubuntu 22.04自动化部署实战3.1 镜像导入与配置准备好Ubuntu 22.04 LTS的ISO镜像后执行导入mount -t iso9660 -o loop ubuntu-22.04.5-live-server-amd64.iso /mnt cobbler import --nameUbuntu22 --path/mnt --archx86_64导入后需要调整几个关键参数cobbler distro edit --nameUbuntu22-x86_64 \ --kernel-optionsautoinstall dsnocloud-net;shttp://$http_server/cblr/svc/op/autoinstall/profile/\$profile这里有个坑要注意Ubuntu 22.04开始autoinstall配置必须通过cloud-config-url参数指定不能像以前那样直接内嵌。我在第一次尝试时没注意这点结果安装程序一直提示找不到配置。3.2 网络配置技巧网络配置是自动化部署中最容易出问题的环节。在cloud-init_network片段中我们使用了netplan格式的配置。对于静态IP需要特别注意子网掩码的转换#set $mask sum([bin(int(x)).count(1) for x in $netmask.split(.)]) addresses: - $ip/$mask这个Python表达式会把255.255.255.0这样的子网掩码转换为24。如果不做这个转换netplan会报格式错误。我在三个不同项目上都遇到过这个问题现在看到掩码转换就会条件反射地检查这段代码。4. Ubuntu 24.04的特殊适配4.1 签名文件更新Ubuntu 24.04(Noble Numbat)发布时Cobbler 3.3.7还没有内置支持需要手动添加签名。编辑/var/lib/cobbler/distro_signatures.json在jammy段落后添加noble: { signatures: [dists, .disk], version_file: Release|info, version_file_regex: Suite: noble|Ubuntu 24.04, supported_arches: [i386, amd64] }添加后切记不要运行cobbler signature update这个命令会覆盖自定义签名。我有次半夜操作时手滑运行了这个命令结果所有自定义签名都被重置不得不从头再来。4.2 内核参数调整Ubuntu 24.04对自动安装流程做了微调需要额外指定几个内核参数cobbler profile edit --nameUbuntu24-x86_64 \ --kernel-optionsconsolettyS0,115200n8 autoinstall dsnocloud-net;shttp://$http_server/cblr/svc/op/autoinstall/profile/\$profile特别是console参数对于无头服务器(没有显示器的服务器)非常重要。之前给机房部署一批服务器时因为没有指定console参数导致安装日志无法通过串口输出排查问题非常困难。5. 离线安装优化技巧5.1 本地镜像源配置在无法连接外网的环境需要修改apt配置使用本地源apt: primary: - arches: [amd64] uri: http://$http_server/cblr/links/$distro fallback: offline-install这个配置会先尝试从Cobbler服务器获取软件包如果失败则使用安装镜像中的包。建议在导入ISO后运行createrepo /var/www/cobbler/links/Ubuntu245.2 自定义软件包预装通过late-commands可以在安装完成后执行自定义操作late-commands: - curl -s http://$http_server/scripts/post-install.sh | chroot /target bash我曾经用这个功能在200多台服务器上统一部署监控代理省去了大量后续操作。不过要注意脚本中的路径都是相对于新系统的记得用chroot /target。6. 常见问题排查6.1 安装卡在cloud-init配置如果安装过程卡在Applying cloud-init configuration通常是因为网络配置有问题。可以尝试检查MAC地址是否在Cobbler中正确定义确认DHCP服务器能正常分配IP在kernel-options中添加debugtrue查看详细日志6.2 自动安装失败回退交互界面遇到这种情况首先检查/var/log/installer/autoinstall-user-data文件是否存在。如果存在说明配置已正确传递问题可能出在语法上。常见错误包括YAML格式缩进错误缺少必填字段使用了不支持的配置项建议先在虚拟机上测试配置确认无误后再部署到物理服务器。我维护了一个测试套件每次修改配置后都会用它跑一遍基本场景避免低级错误影响生产环境。

更多文章