Skip to main content

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 私钥和公钥,避免重新生成随机密钥,支持 rsadsaecdsa 等类型。
  • 示例:此处给出 rsadsa 公私钥的详细示例,格式遵循标准 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-instancealways 等。
  • 示例
    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 默认设置,取值有 usersystemdisable 等,分别对应不同的启用、禁用策略。
  • 示例
    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 则自动调整;设为 Falsenoblock 可禁用或并行执行调整操作。

21. preserve_hostnamehostnamefqdnmanage_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. passwordchpasswdssh_pwauth

  • 功能:这组配置用于用户密码管理:
    • password:设置默认用户密码,设为 RRANDOM 则生成随机密码并输出到控制台,同时密码会过期,首次登录需修改。
    • chpasswd:可为多个用户设置密码,通过 expire 控制是否过期,还支持设置哈希密码。
    • ssh_pwauth:设为 TrueFalse 可更新 sshd_config 文件,决定是否启用密码登录 ssh

26. ssh_svcnamessh_deletekeysssh_genkeytypes

  • 功能:这几个配置用于 ssh 服务相关设置:
    • ssh_svcname:设定重启 ssh 守护进程的命令名称,fedora 系统常用 sshd
    • ssh_deletekeys:设为 True 则删除实例的现有 ssh 密钥,公共镜像建议设为 True
    • ssh_genkeytypes:指定要生成的 ssh 密钥类型列表,传递给 ssh-keygen -t 命令。

27. ssh_fp_console_blacklistssh_key_console_blacklist

  • 功能:用于筛选不输出到控制台的 ssh 密钥指纹和密钥类型,是一个列表形式的配置。

28. power_state

  • 功能:控制实例启动完成后的电源状态,可设置延迟 delay(格式如 now+m)、模式 modepoweroffhaltreboot)、消息 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

结论

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