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
结论
文件完整的配置说明,合理调整各项配置,能精准定制云实例启动行为,满足多样的云部署需求。在实际应用中,需结合云平台特性、实例用途以及安全规范细致斟酌每个配置项取值,确保云实例稳定、高效运行。