云服务器初始化神器:Cloud-Init 全解析

3 分钟阅读

云计算的规模化发展,让“快速交付、批量交付”成为基础设施的硬需求。传统手动配置模式下,每台实例的初始化都要经历主机名设置、网络参数配置、用户权限分配、SSH 密钥部署、软件包安装等一系列步骤;不仅耗时,还会因为人工操作差异导致一致性难以保障。

Cloud-init 是一款开源的云实例初始化工具,专为虚拟化与云环境下的操作系统实例提供自动化配置能力,被广泛集成于 AWS、Azure、Google Cloud 的公有云服务中。它的核心作用是在实例首次启动时,自动完成系统层面的批量配置工作,无需人工登录干预,大幅提升云资源部署的效率与标准化程度。

核心能力介绍

  1. 多云适配
    构建跨平台的统一配置接口,兼容 AWS、Azure、Google Cloud 等公有云,以及 OpenStack、KVM、PVE 等私有云/虚拟化环境。通过标准化抽象层屏蔽底层差异,实现“一份配置,多处运行”。

  2. 全流程自动化
    覆盖实例生命周期关键节点:从网络初始化到元数据获取,从核心配置执行到收尾清理,形成闭环自动化链条。支持按阶段编排任务,便于按需拆分与复用。

  3. 声明式配置
    采用 YAML 构建配置清单,用清晰的键值结构表达“你想要什么”。你只需要声明目标状态,Cloud-init 会按模块完成依赖处理与执行。

场景化配置示例

用户与用户组

常见需求包括:创建用户、下发 SSH 公钥、配置用户组与账号策略等。

1
2
3
4
5
6
7
8
9
#cloud-config
users:
  - name: foobar # 用户的登录名
    gecos: Foo B. Bar # 用户的真实姓名,例如 "Bob B. Smith"
    groups: users # 额外添加到用户的组
    expiredate: '2032-09-01' # 用户账户过期日期,格式为 "YYYY-MM-DD"
    sudo: "ALL=(ALL) NOPASSWD:ALL" # 接受 sudo 规则字符串、字符串列表或 False 显式拒绝 sudo 权限
    lock_passwd: false # 锁定密码以禁用密码登录
    passwd: $6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/ # 用户的密码哈希值,使用 `mkpasswd -m sha-512` 生成

软件安装与命令执行

通常把“安装依赖”交给 packages,把“执行落地动作”交给 runcmd

1
2
3
4
5
6
7
8
9
#cloud-config
package_update: true
packages:
  - ansible
  - git

runcmd:
  - git clone https://github.com/company/infra-playbooks.git /opt/playbooks
  - ansible-playbook /opt/playbooks/web-server.yml

Kubernetes 节点初始化

安装必要的软件包(如 containerdkubeadm),并配置 runcmd 执行初始化命令。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#cloud-config
packages:
  - containerd
  - kubeadm

runcmd:
  - systemctl enable --now containerd
  - kubeadm join 192.168.0.100:6443 \
      --token abcdef.0123456789abcdef \
      --discovery-token-ca-cert-hash sha256:${ca_hash}

总结

Cloud-init 已成为云主机初始化的事实标准。它把自定义的初始化配置转化为系统级设置与命令执行,实现“开机即就绪”的零接触部署。无论单机还是大规模集群,都能将重复性操作沉淀为可复用模板,让交付过程更稳定、更可控。

维度传统手动配置Cloud-init 自动化
部署效率10+分钟/实例30秒/实例
一致性保障依赖人工操作规范100%模板复用
维护成本分散配置难以管理集中式YAML配置
扩展能力逐个节点修改批量参数化更新

Tips

Orbstack 支持 Cloud-init,在使用 Cloud-init 批量部署云服务器前,可以先使用 Orbstack 在本地环境中测试配置,验证无误后再在公有云环境中部署。