当前位置:首页 > 技术 > 正文内容

cloud-init 配置深度解析与 OpenStack 集成实践

访客 技术 2026年6月5日 1

cloud-init 是 Linux 云镜像启动时的初始化工具,负责完成实例的首次配置。通过调整 /etc/cloud/cloud.cfg 中的参数,可以精细控制实例的初始化流程。

核心配置项调整

启用 root 直接登录

默认情况下 root 账户禁止密码登录,如需开放:

disable_root: false

允许 SSH 密码认证

默认仅支持密钥登录,开启密码验证:

ssh_pwauth: true

持久化主机名

默认每次重启会重置 hostname,如需保留自定义主机名,从 cloud_init_modules 列表中移除以下两项:

cloud_init_modules:
  - migrator
  - bootcmd
  - write-files
  # - set_hostname      # 注释或删除
  # - update_hostname   # 注释或删除
  - update_etc_hosts
  - users-groups
  - ssh

用户密码管理

通过 chpasswd 模块批量设置账户凭证:

#cloud-config
chpasswd:
  list: |
    admin:Secret@789
    deploy:AutoGenPwd
    guest:RANDOM
  expire: false

配置说明:

  • expire: false — 密码永不过期
  • expire: true — 强制用户首次登录后修改密码
  • RANDOMR — 自动生成随机密码

随机密码可在以下位置查看:

  • 虚拟控制台日志:nova console-log <instance>
  • 本地日志文件:/var/log/cloud-init-output.log
重要:cloud-init 仅在系统首次启动时执行密码修改。若需重新触发,必须清理实例标识后重启(如删除 /var/lib/cloud/instance 并重新引导)。

完整配置示例

users:
  - default

disable_root: false
ssh_pwauth: true

locale_configfile: /etc/sysconfig/i18n
resize_rootfs_tmp: /dev
ssh_deletekeys: false
ssh_genkeytypes: ~
syslog_fix_perms: ~

cloud_init_modules:
  - migrator
  - bootcmd
  - write-files
  - growpart
  - resizefs
  - set_hostname
  - update_hostname
  - update_etc_hosts
  - rsyslog
  - users-groups
  - ssh

cloud_config_modules:
  - mounts
  - locale
  - set-passwords
  - yum-add-repo
  - package-update-upgrade-install
  - timezone
  - puppet
  - chef
  - salt-minion
  - mcollective
  - disable-ec2-metadata
  - runcmd

cloud_final_modules:
  - rightscale_userdata
  - scripts-per-once
  - scripts-per-boot
  - scripts-per-instance
  - scripts-user
  - ssh-authkey-fingerprints
  - keys-to-console
  - phone-home
  - final-message

system_info:
  default_user:
    name: root
    lock_passwd: true
    gecos: Cloud User
    groups: [wheel, adm, systemd-journal]
    sudo: ["ALL=(ALL) NOPASSWD:ALL"]
    shell: /bin/bash
  distro: rhel
  paths:
    cloud_dir: /var/lib/cloud
    templates_dir: /etc/cloud/templates
  ssh_svcname: sshd

chpasswd:
  list: |
    root:Temp#Pass123
  expire: true

OpenStack 集成注意事项

配置驱动(Config Drive)的关联机制

镜像状态nova.conf 配置行为结果
无 cloud-initforce_config_drive = true忽略元数据,正常启动
有 cloud-init未配置/force_config_drive = false尝试获取元数据,可能产生延迟和报错
有 cloud-initforce_config_drive = true正常读取配置驱动

典型故障场景

当计算节点从"无 cloud-init 镜像"迁移到"有 cloud-init 镜像"环境时,若 nova.conf 中启用了 force_config_drive = true,原有实例重启后可能出现 ERRORNO STATE 状态。

现象分析:

# 正常实例磁盘
rbd ls vms | grep instance-uuid
instance-uuid_disk

# 启用 config drive 后的磁盘结构
instance-uuid_disk
instance-uuid_disk.config  # 新增的配置驱动卷

旧实例因缺少 .config 卷,cloud-init 无法定位元数据源,导致初始化失败。

修复方案

  1. 临时修复:更新 Nova 数据库中实例的 config_drive 字段,关闭实例后冷启动
  2. 长期建议:统一镜像标准,避免混合使用 cloud-init 与非 cloud-init 镜像
最佳实践:生产环境中应标准化镜像构建流程,确保所有计算节点 force_config_drive 配置与镜像 cloud-init 状态保持一致,避免运行时冲突。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。