2.4. 对 cloud-init 很重要的文件和目录


红帽支持 cloud-init 工具、cloud-init 模块和默认的目录和文件。通过使用目录和文件,您可以执行诸如以下的任务:

  • 配置 cloud-init
  • cloud-init 运行后找到有关配置的详情
  • 检查日志文件
  • 查找模板

根据您的要求和数据源,可能会有其它对您的配置很重要的文件和目录。

Expand
表 2.1. cloud-init 目录和文件
目录或文件描述

/etc/cloud/cloud.cfg

cloud.cfg 文件包含基本的 cloud-init 配置,您可以了解到模块会在哪个阶段运行。

/etc/cloud/cloud.cfg.d

cloud.cfg.d 目录,您可以在其中为 cloud-init 添加附加指令。

/var/lib/cloud

cloud-init 运行时,它会在 /var/lib/cloud 下创建一个目录布局。布局包括特定于您的实例配置的目录和文件。

/usr/share/doc/cloud-init/examples

examples 目录包含多个示例。您可以使用它们来帮助建模您自己的指令。

/etc/cloud/templates

这个目录包括您可以在特定情况下,在 cloud-init 中启用的模板。模板提供启用的指示。

/var/log/cloud-init.log

cloud-init.log 文件提供了有助于调试的日志信息。

/run/cloud-init

/run/cloud-init 目录包含有关数据源和 ds-identify 脚本的日志信息。

2.4.1. 默认的 cloud.cfg 文件

/etc/cloud/cloud.cfg 文件列出了 cloud-init 的基本配置中包含的模块。这些模块是 cloud-init 的默认模块。您可以根据要求配置或删除模块。

  • 要在一个 cloud-init 阶段中执行操作,您需要单独配置每个模块,并在 cloud.cfg 文件中列出它们。模块按照 cloud.cfg 中给出的顺序运行。您通常不会更改这个顺序。但是,如果红帽支持您要添加的模块,您可以在 cloud.cfg 中添加额外的模块。
  • cloud.cfg 指令可以被用户数据覆盖。手动运行 cloud-init 时,您可以使用命令行选项覆盖 cloud.cfg
  • 每个模块都有其自身的配置选项,您可以在其中添加特定信息。
  • 为确保配置的最佳功能,请使用下带有下划线(_)而不是横线(-)的模块名称。
  • Red Hat Enterprise Linux 的文件的默认内容如下:
users: 
1

 - default

disable_root: true 
2

resize_rootfs_tmp: /dev
ssh_pwauth:   false 
3


mount_default_fields: [~, ~, 'auto', 'defaults,nofail,x-systemd.requires=cloud-init.service', '0', '2'] 
4

ssh_deletekeys:   true 
5

ssh_genkeytypes: ['rsa', 'ecdsa', 'ed25519'] 
6

syslog_fix_perms: ~ 
7

disable_vmware_customization: false 
8


cloud_init_modules: 
9

  - migrator
  - seed_random
  - bootcmd
  - write_files
  - growpart
  - resizefs
  - disk_setup
  - mounts
  - set_hostname
  - update_hostname
  - update_etc_hosts
  - ca_certs
  - rsyslog
  - users_groups
  - ssh

cloud_config_modules: 
10

  - ssh_import_id
  - locale
  - set_passwords
  - rh_subscription
  - spacewalk
  - yum_add_repo
  - ntp
  - timezone
  - disable_ec2_metadata
  - runcmd

cloud_final_modules: 
11

  - package_update_upgrade_install
  - write_files_deferred
  - puppet
  - chef
  - ansible
  - mcollective
  - salt_minion
  - reset_rmc
  - rightscale_userdata
  - scripts_vendor
  - scripts_per_once
  - scripts_per_boot
  - scripts_per_instance
  - scripts_user
  - ssh_authkey_fingerprints
  - keys_to_console
  - install_hotplug
  - phone_home
  - final_message
  - power_state_change

system_info:
  default_user: 
12

    name: cloud-user
    lock_passwd: true
    gecos: Cloud User
    groups: [adm, systemd-journal]
    sudo: ["ALL=(ALL) NOPASSWD:ALL"]
    shell: /bin/bash
   distro: rhel 
13

   network:
    renderers: ['sysconfig', 'eni', 'netplan', 'network-manager', 'networkd']
  paths:
    cloud_dir: /var/lib/cloud 
14

    templates_dir: /etc/cloud/templates 
15

  ssh_svcname: sshd 
16


# vim:syntax=yaml
Copy to Clipboard Toggle word wrap
1
指定系统的默认用户。详情请参考 用户和组群
2
启用或禁用 root 登录。如需更多信息,请参阅认证密钥
3
指定 ssh 是否配置为接受密码身份验证。详情请参考设定密码
4
配置挂载点 ; 必须是一个包含六个值的列表。详情请参考挂载
5
指定是否删除默认主机 SSH 密钥。详情请参考主机密钥
6
指定要生成的密钥类型。详情请参考主机密钥。请注意,对于 RHEL 8.4 和更早版本,此行的默认值为 ~
7
cloud-init 在引导过程的多个阶段运行。设置这个选项,以便 cloud-init 可以将所有阶段记录到其日志文件中。在 usr/share/doc/cloud-init/examples 目录中的 cloud-config.txt 文件中查找有关这个选项的更多信息。
8
启用或禁用 VMware vSphere 自定义
9
本节中的模块是在引导过程早期,在 cloud-init 服务启动时运行的服务。
10
这些模块在 cloud-init 配置期间运行,在初始引导后运行。
11
这些模块在配置完成后在 cloud-init 的最终阶段中运行。
12
指定默认用户的详情。详情请参考用户和组群
13
指定发布
14
指定包含 cloud-init 特定子目录的主目录。如需更多信息,请参阅 目录布局
15
指定模板所处的位置
16
SSH 服务的名称

2.4.2. 默认的 cloud.cfg.d 目录

cloud-init 遵循您提供和配置的指令。通常,这些指令包含在 cloud.cfg.d 目录中。

注意

虽然您可以通过在 cloud.cfg 文件中添加用户数据指令来配置模块,但基于最佳实践,最好不要修改 cloud.cfg。将您的指令添加到 /etc/cloud/cloud.cfg.d 目录中。在这个目录中添加指令可方便将来的修改和升级。

有关如何将用户脚本添加为 *.cfg 的详情,请参考 User-Data 格式

2.4.3. 默认的 05_logging.cfg 文件

05_logging.cfg 文件为 cloud-init 设置日志信息和默认的日志记录配置文件。/etc/cloud/cloud.cfg.d 目录包含此文件,以及其他 cloud-init 指令。RHEL 的文件的默认内容如下:

## This yaml formatted config file handles setting
## logger information.  The values that are necessary to be set
## are seen at the bottom.  The top '_log' are only used to remove
## redundancy in a syslog and fallback-to-file case.
##
## The 'log_cfgs' entry defines a list of logger configs
## Each entry in the list is tried, and the first one that
## works is used.  If a log_cfg list entry is an array, it will
## be joined with '\n'.
_log:
 - &log_base |
   [loggers]
   keys=root,cloudinit

   [handlers]
   keys=consoleHandler,cloudLogHandler

   [formatters]
   keys=simpleFormatter,arg0Formatter

   [logger_root]
   level=DEBUG
   handlers=consoleHandler,cloudLogHandler

   [logger_cloudinit]
   level=DEBUG
   qualname=cloudinit
   handlers=
   propagate=1

   [handler_consoleHandler]
   class=StreamHandler
   level=WARNING
   formatter=arg0Formatter
   args=(sys.stderr,)

   [formatter_arg0Formatter]
   format=%(asctime)s - %(filename)s[%(levelname)s]: %(message)s

   [formatter_simpleFormatter]
   format=[CLOUDINIT] %(filename)s[%(levelname)s]: %(message)s
 - &log_file |
   [handler_cloudLogHandler]
   class=FileHandler
   level=DEBUG
   formatter=arg0Formatter
   args=('/var/log/cloud-init.log',)
 - &log_syslog |
   [handler_cloudLogHandler]
   class=handlers.SysLogHandler
   level=DEBUG
   formatter=simpleFormatter
   args=("/dev/log", handlers.SysLogHandler.LOG_USER)

log_cfgs:
# Array entries in this list will be joined into a string
# that defines the configuration.
#
# If you want logs to go to syslog, uncomment the following line.
# - [ *log_base, *log_syslog ]
#
# The default behavior is to just log to a file.
# This mechanism that does not depend on a system service to operate.
 - [ *log_base, *log_file ]
# A file path can also be used.
# - /etc/log.conf

# This tells cloud-init to redirect its stdout and stderr to
# 'tee -a /var/log/cloud-init-output.log' so the user can see output
# there without needing to look on the console.
output: {all: '| tee -a /var/log/cloud-init-output.log'}
Copy to Clipboard Toggle word wrap

2.4.4. /var/lib/cloud 目录布局

cloud-init 启动时,它会创建一个带有实例详情和 cloud-init 配置的目录布局。此目录可以包含可选目录,如 /scripts/vendor。以下是 cloud-init 的目录布局的一个示例:

/var/lib/cloud/
    - data/
       - instance-id
       - previous-instance-id
       - previous-datasource
       - previous-hostname
       - result.json
       - set-hostname
       - status.json
    - handlers/
    - instance
       - boot-finished
       - cloud-config.txt
       - datasource
       - handlers/
       - obj.pkl
       - scripts/
       - sem/
       - user-data.txt
       - user-data.txt.i
       - vendor-data.txt
       - vendor-data.txt.i
    - instances/
        f111ee00-0a4a-4eea-9c17-3fa164739c55/
          - boot-finished
          - cloud-config.txt
          - datasource
          - handlers/
          - obj.pkl
          - scripts/
          - sem/
          - user-data.txt
          - user-data.txt.i
          - vendor-data.txt
          - vendor-data.txt.i
    - scripts/
       - per-boot/
       - per-instance/
       - per-once/
       - vendor/
    - seed/
    - sem/
       - config_scripts_per_once.once
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat