Cloud-init.cfg 配置文件说明
概述
本文档详细介绍 cloud-init.cfg 文件的各项配置,用于在云环境实例首次启动时,自动化完成系统初始化、软件安装、网络配置、用户管理等诸多关键操作,大幅简化云实例部署流程,提升运维效率。
配置项详解
1. package_update
- 功能:决定实例首次启动时是否更新 apt软件包数据库,等同于执行apt-get update命令。
- 默认值:true,此处设为false则不执行更新操作。
2. package_upgrade
- 功能:控制实例首次启动时是否升级已安装的软件包。
- 默认值:false,设为true会启动升级流程。
3. package_reboot_if_required
- 功能:若软件包安装或升级后需要重启系统,此配置决定是否自动重启。
- 默认值:false,设为true则必要时自动重启。
4. packages
- 功能:指定实例启动时要安装的软件包列表。
- 示例:
packages:
 - pwgen
 - pastebinit
5. mounts
- 功能:用于设置实例的挂载点,遵循 /etc/fstab格式规范,是一个列表嵌套列表的结构。每个内层列表对应/etc/fstab的一行记录,格式为[ fs_spec, fs_file, fs_vfstype, fs_mntops, fs-freq, fs_passno ]。
- 示例:
mounts:
 - [ ephemeral0, /mnt, auto, "defaults,noexec" ]
 - [ sdc, /opt/data ]
 - [ xvdh, /opt/data, "auto", "defaults,nofail", "0", "0" ]
 - [ dd, /dev/zero ]
6. mount_default_fields
- 功能:填充 mounts列表中不完整的挂载项,确保每个挂载项都有完整的 7 个字段信息。
- 示例:
mount_default_fields: [ None, None, "auto", "defaults,nofail", "0", "2" ]
7. ssh_authorized_keys
- 功能:向配置用户或首个定义用户的 ~/.ssh/authorized_keys文件添加公钥,实现免密登录。
- 示例:
ssh_authorized_keys:
 - ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAGEA3FSyQwBI6Z+nCSjUUk8EEAnnkhXlukKoUPND/RRClWz2s5TCzIkd3Ou5+Cyz71X0XmazM3l5WgeErvtIwQMyT1KjNoMhoJMrJnWqQPOt5Q8zWd9qG7PBl9+eiH5qV7NZ mykey@host
 - ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA3I7VUf2l5gSn5uavROsc5HRDpZdQueUq5ozemNSj8T7enqKHOEaFoU2VoPgGEWC9RyzSQVeyD6s7APMcE82EtmW4skVEgEGSbDc1pvxzxtchBj78hJP6Cf5TCMFSXw+Fz5rF1dR23QDbN1mkHs7adr8GW4kSWqU7Q7NDwfIrJJtO7Hi42GyXtvEONHbiRPOe8stqUly7MvUoN+5kfjBM8Qqpfl2+FNhTYWpMfYdPUnE7u536WqzFmsaqJctz3gBxH9Ex7dFtrxR4qiqEr9Qtlu3xGn7Bw07/+i1D+ey3ONkZLN+LQ714cgj8fRS4Hj29SCmXp5Kt5/82cD/VN3NtHw== smoser@brickies
8. ssh_keys
- 功能:向服务器发送预先生成的 ssh私钥和公钥,避免重新生成随机密钥,支持rsa、dsa、ecdsa等类型。
- 示例:此处给出 rsa和dsa公私钥的详细示例,格式遵循标准ssh密钥格式。
9. disable_ec2_metadata
- 功能:若设为 true,实例启动早期通过添加空路由的方式,禁用对EC2元数据服务的访问;可通过route del -host 169.254.169.254 reject(需root权限)命令手动移除空路由恢复访问。
- 默认值:false,即默认启用服务。
10. runcmd
- 功能:定义实例启动时要执行的命令列表,支持列表或字符串两种形式。列表形式会像 execve(3)调用那样精确执行命令;字符串形式则由sh解析执行。
- 示例:
runcmd:
 - [ ls, -l, / ]
 - [ sh, -xc, "echo $(date) ': hello world!'" ]
 - [ sh, -c, echo "=========hello world'=========" ]
 - ls -l /root
 - mkdir /run/mydir
 - [ wget, "http://slashdot.org", -O, /run/mydir/index.html ]
11. bootcmd
- 功能:与 runcmd类似,但命令在启动过程极早期执行,紧跟boothook之后;bootcmd会在每次启动时运行,还可借助INSTANCE_ID变量获取当前实例 ID,cloud-init-per命令能控制命令仅执行一次。
- 示例:
bootcmd:
 - echo 192.168.1.130 us.archive.ubuntu.com > /etc/hosts
 - [ cloud-init-per, once, mymkfs, mkfs, /dev/vdb ]
12. cloud_config_modules
- 功能:指定要运行的云配置模块,模块可以是字符串形式的模块名,也可以是数组形式 [ name, frequency, arguments ],frequency取值有once-per-instance、always等。
- 示例:
cloud_config_modules:
 - mounts
 - ssh_import_id
 - ssh
 - grub_dpkg
 - [ apt_update_upgrade, always ]
 - puppet
 - disable_ec2_metadata
 - runcmd
 - byobu
13. ssh_import_id
- 功能:向 ssh-import-id工具提供用户名列表,便于从launchpad导入公钥到配置用户。
- 示例:
ssh_import_id: [smoser]
14. apt
- 功能:debconf_selections子项用于提供debconf答案、debian预配置值,可强制设置debconf优先级、覆盖前端设置等。
- 示例:
apt:
 debconf_selections:
 set1: debconf debconf/priority select critical
 set2: |
 debconf debconf/frontend select readline
 debconf debconf/frontend seen false
15. byobu_by_default
- 功能:管理 byobu默认设置,取值有user、system、disable等,分别对应不同的启用、禁用策略。
- 示例:
byobu_by_default: system
16. disable_root
- 功能:设为 true则禁用root用户的ssh登录权限;设为false则允许。
- 默认值:true。
17. users
- 功能:定义实例的用户列表,除 default用户外,还可自定义用户,通过ssh_redirect_user: true可禁用非root用户的ssh登录权限。
- 示例:
users:
 - default
 - name: blockeduser
 ssh_redirect_user: true
18. locale
- 功能:设置系统的语言环境,默认值为 en_US.UTF-8。
19. locale_configfile
- 功能:指定渲染语言环境模板的目标文件路径,示例为 /etc/default/locale。
20. resize_rootfs
- 功能:决定实例首次启动时是否自动调整根文件系统大小,设为 True则自动调整;设为False或noblock可禁用或并行执行调整操作。
21. preserve_hostname、hostname、fqdn、manage_etc_hosts
- 功能:这几个配置协同管理实例的主机名和 /etc/hosts文件:- preserve_hostname:设为- True则阻止更新- /etc/hostname,默认- False,即允许更新。
- hostname:设定实例的主机名,若不设置则采用元数据服务返回的值。
- fqdn:设定实例的完全限定域名,同样默认依元数据服务而定。
- manage_etc_hosts:设为- true则每次启动重写- /etc/hosts文件;设为- false则不修改;设为- localhost确保- 127.0.1.1条目对应主机名和- fqdn。
 
22. final_message
- 功能:系统首次启动完成后,cloud-final模块输出的提示信息,可当作模板渲染,支持jinja语法(需以## template:jinja\n开头)。
- 示例:
final_message: "The system is finally up, after $UPTIME seconds"
23. phone_home
- 功能:若配置此字典,phone_home云配置模块会按指定url回传数据,可设定post内容、尝试次数tries。
- 示例:
phone_home:
 url: http://my.example.com/$INSTANCE_ID/
 post: [ pub_key_dsa, pub_key_rsa, pub_key_ecdsa, instance_id ]
24. timezone
- 功能:设置实例的时区,取值需对应 /usr/share/zoneinfo目录下的时区名称,示例为US/Eastern。
- 示例:
timezone: Asia/Shanghai
25. password、chpasswd、ssh_pwauth
- 功能:这组配置用于用户密码管理:
- password:设置默认用户密码,设为- R或- RANDOM则生成随机密码并输出到控制台,同时密码会过期,首次登录需修改。
- chpasswd:可为多个用户设置密码,通过- expire控制是否过期,还支持设置哈希密码。
- ssh_pwauth:设为- True或- False可更新- sshd_config文件,决定是否启用密码登录- ssh。
 
26. ssh_svcname、ssh_deletekeys、ssh_genkeytypes
- 功能:这几个配置用于 ssh服务相关设置:- ssh_svcname:设定重启- ssh守护进程的命令名称,- fedora系统常用- sshd。
- ssh_deletekeys:设为- True则删除实例的现有- ssh密钥,公共镜像建议设为- True。
- ssh_genkeytypes:指定要生成的- ssh密钥类型列表,传递给- ssh-keygen -t命令。
 
27. ssh_fp_console_blacklist、ssh_key_console_blacklist
- 功能:用于筛选不输出到控制台的 ssh密钥指纹和密钥类型,是一个列表形式的配置。
28. power_state
- 功能:控制实例启动完成后的电源状态,可设置延迟 delay(格式如now、+m)、模式mode(poweroff、halt、reboot)、消息message。
- 示例:
power_state:
 delay: '+30'
 mode: poweroff
 message: Bye Bye
示例配置
# 配置时区
timezone: Asia/Shanghai
# 安装指定的软件包
packages:
 - qemu-guest-agent
# 执行特定命令切换语言
runcmd:
 - sed -i 's/# zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/' /etc/locale.gen
 - locale-gen
 - update-locale LANG=zh_CN.UTF-8 LANGUAGE=zh_CN:zh LC_ALL=zh_CN.UTF-8
 - systemctl start qemu-guest-agent.service
结论
文件完整的配置说明,合理调整各项配置,能精准定制云实例启动行为,满足多样的云部署需求。在实际应用中,需结合云平台特性、实例用途以及安全规范细致斟酌每个配置项取值,确保云实例稳定、高效运行。