当前位置: 首页 > news >正文

一文彻底搞懂 cloud-init:从初始化流程到 cloud.cfg 深度解析

文章目录

  • 一文彻底搞懂 cloud-init:从初始化流程到 cloud.cfg 深度解析
  • cloud-init 是什么
  • 检查系统是否已安装 cloud-init
  • 安装 cloud-init
  • cloud-init 主要服务组件
  • cloud-init 主要配置文件
  • cloud-init 的执行流程
  • cloud.cfg 配置文件解析
    • 默认用户配置
  • cloud-init 初始化模块解析
    • 初始化阶段模块
      • growpart
      • resizefs
      • users-groups
      • ssh
  • Config 阶段模块
    • 自动安装软件
    • runcmd
  • Final 阶段模块
    • scripts-user
    • final-message
  • 真实案例:自动设置主机名
  • cloud-init 常用排错命令
  • cloud-init 在自动化运维中的价值
    • 自动初始化服务器
    • DevOps 自动化部署
  • 总结

一文彻底搞懂 cloud-init:从初始化流程到 cloud.cfg 深度解析

在云计算环境中,新创建的服务器通常需要完成很多初始化工作,例如:

  • 设置主机名
  • 创建用户
  • 配置 SSH
  • 安装软件
  • 执行初始化脚本

如果这些操作全部手动完成,不仅效率低,而且容易出错。

为了解决这个问题,Linux 云镜像中普遍使用cloud-init来完成实例启动时的自动化初始化。

本文不仅会讲cloud-init 的基本使用,还会深入解析核心配置文件/etc/cloud/cloud.cfg的执行机制


cloud-init 是什么

cloud-init是 Linux 云服务器启动时执行的初始化工具。

它可以自动完成:

  • 创建用户
  • 设置 SSH Key
  • 安装软件包
  • 执行脚本
  • 配置网络
  • 设置 hostname

目前几乎所有云厂商镜像都默认集成,例如:

  • AWS
  • OpenStack
  • 阿里云
  • 腾讯云
  • Azure

检查系统是否已安装 cloud-init

先确认系统是否已经安装:

cloud-init--version

如果输出类似:

/usr/bin/cloud-init22.2

说明已经安装成功。

也可以使用:

rpm-qa|grepcloud-init

或:

dpkg-l|grepcloud-init

安装 cloud-init

CentOS / Rocky / AlmaLinux 安装 cloud-init

适用于:

  • CentOS
  • Rocky Linux
  • AlmaLinux

安装命令:

yuminstall-ycloud-init

安装完成后启动服务:

systemctlenablecloud-init systemctl start cloud-init

查看状态:

systemctl status cloud-init

Ubuntu / Debian 安装 cloud-init

安装命令:

aptupdateaptinstall-ycloud-init

安装完成后验证:

cloud-init status

cloud-init 主要服务组件

安装完成后系统会有多个服务:

systemctl list-unit-files|grepcloud

常见组件:

服务作用
cloud-init-local早期初始化
cloud-init读取数据源
cloud-config执行配置
cloud-final执行用户脚本

执行流程:

cloud-init-local ↓ cloud-init ↓ cloud-config ↓ cloud-final

cloud-init 主要配置文件

默认配置路径:

/etc/cloud/

主要文件:

文件作用
/etc/cloud/cloud.cfg主配置文件
/etc/cloud/cloud.cfg.d/扩展配置
/var/lib/cloud/运行状态数据

查看主配置:

cat/etc/cloud/cloud.cfg

cloud-init 的执行流程

cloud-init 的执行过程可以分为三个阶段

Init Stage ↓ Config Stage ↓ Final Stage

对应配置文件中的三个模块列表:

阶段模块字段
初始化阶段cloud_init_modules
配置阶段cloud_config_modules
最终阶段cloud_final_modules

这些模块定义在:

/etc/cloud/cloud.cfg

cloud.cfg 配置文件解析

来看一个真实生产环境中的 cloud.cfg 配置:

users:-defaultdisable_root:0ssh_pwauth:1

含义:

  • users:默认创建系统默认用户
  • disable_root: 0:允许 root 登录
  • ssh_pwauth: 1:允许 SSH 密码登录

默认用户配置

cloud-init 默认用户配置在:

system_info:default_user:name:centoslock_passwd:truesudo:["ALL=(ALL) NOPASSWD:ALL"]

解释:

字段说明
name默认用户
lock_passwd是否锁定密码
sudosudo 权限
shell默认 shell

因此很多云服务器创建后默认登录用户是:

centos

而不是 root。


cloud-init 初始化模块解析

初始化阶段模块

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

主要负责系统基础初始化

例如:

growpart

自动扩展磁盘分区

growpart /dev/vda 1

常见于云服务器磁盘扩容。


resizefs

自动扩展文件系统

resize2fs

保证系统盘容量自动扩大。


users-groups

创建系统用户。


ssh

生成 SSH key。


Config 阶段模块

第二阶段:

cloud_config_modules:

示例:

- package-update-upgrade-install - timezone - runcmd

主要负责系统配置任务

例如:

自动安装软件

package-update-upgrade-install

等价于:

yum update yum install

runcmd

执行用户自定义命令。

例如:

runcmd:-yum install-y nginx-systemctl restart nginx
安装Nginx,并启动它

Final 阶段模块

最后阶段:

cloud_final_modules:

例如:

- scripts-user - final-message

含义:

scripts-user

执行用户脚本。

final-message

输出 cloud-init 完成提示。


真实案例:自动设置主机名

这份配置里有一个非常实用的 bootcmd 示例

bootcmd:-ip=$(hostname-I|awk '{print $1}')-newhost=$(echo $ip|sed 's/\./-/g')-hostnamectl set-hostname host-$newhost-echo "127.0.0.1 host-$newhost">>/etc/hosts

作用:

根据服务器 IP 自动生成 hostname。

例如:

服务器 IP

192.168.1.1

自动生成 hostname

host-192-168-1-1

最终效果:

hostname host-192-168-1-1

这种方式在批量创建服务器时非常实用


cloud-init 常用排错命令

查看状态:

cloud-init status

查看执行日志:

/var/log/cloud-init.log

查看用户脚本日志:

/var/log/cloud-init-output.log

重新执行 cloud-init:

cloud-init clean reboot

cloud-init 在自动化运维中的价值

在实际生产环境中,cloud-init 通常用于:

自动初始化服务器

例如:

  • 创建运维用户
  • 配置 SSH key
  • 安装基础软件

DevOps 自动化部署

常见组合:

Terraform + cloud-init

自动完成:

创建云服务器 ↓ 初始化配置 ↓ 部署服务

总结

cloud-init 是 Linux 云服务器初始化的核心组件。

掌握它可以实现:

  • 自动化服务器初始化
  • 批量实例统一配置
  • DevOps 自动化部署

如果你经常使用云服务器、Kubernetes、自动化运维,cloud-init 是必须掌握的一项技能。


http://www.jsqmd.com/news/488078/

相关文章:

  • 护眼灯最好的牌子是哪个?2026年护眼台灯选购全指南|深度点评书客、柏曼、霍尼韦尔、飞利浦等热门型号,揭开“越用越累眼”的真相,买前一定要看!
  • 计算机毕业设计springboot基于Vue的不动产登记系统 基于SpringBoot与Vue.js的房地产产权在线管理平台 采用前后端分离架构的房屋资产数字化登记系统
  • flutter打包ipad 并上传Appstore
  • Nacos配置监听避坑指南:configService.addListener的5个常见问题及解决方案
  • 3大创新解决90%下载难题:Adobe Downloader让macOS用户轻松获取Adobe软件
  • 嵌入式通信协议(学习)
  • YimMenu:GTA V增强工具完全指南
  • OpenWRT+SFTP保姆级教程:5分钟搞定远程文件安全传输(含cpolar配置)
  • 攻克动态页面转PDF难题:wkhtmltopdf的JavaScript交互实战策略
  • 比迪丽AI绘画Java面试实战:AIGC相关考点与解决方案
  • 免费毕业答辩PPT模板|全专业适配,新手可快速生成
  • 用 Nano Banana 生成高设计感区位图(附网站与提示词)
  • 告别图形界面:用CMD完成90%的Windows系统维护(附常用命令清单)
  • pc端网站使用微信登录全流程
  • 163MusicLyrics:音乐歌词管理的效率工具
  • 颠覆AI交互:5大创新让提示词效率提升300%
  • ArrayList之模仿外卖系统综合案例
  • 实体店生意不好,别先怪客流,先看这 3 件事做没做
  • ‌Metasploit渗透测试框架实战入门指南
  • 逻辑学起码常识让人猛醒:数学有几百年重大错误:将假R误为R
  • Anything to RealCharacters 2.5D引擎C++高性能实现解析
  • ChatGPT语音通话实时歌唱功能的技术实现与避坑指南
  • OpenClaw设置教程之安全篇
  • MATLAB箱线图绘制全攻略:从数据导入到美化输出(附常见问题解决)
  • 从“存储”到“创造”:知识库激发智能体的创新潜能
  • ChatTTS深度解析:如何实现精准停顿与多音字处理以提升语音合成效率
  • 掌握AI视频增强:从问题诊断到专业优化的实践指南
  • AI产业双轨协同战略分析报告
  • 避开5大误区:新手使用MedGemma 1.5医疗助手的正确姿势与避坑指南
  • Java 实现企业微信外部群机器人:自动化消息交互