Cloud init入门 - AaronPei/blog GitHub Wiki
Cloud-init介绍
cloud-init 是linux 的一个工具,当系统启动时,cloud-init 可从 nova metadata 服务或者 config drive 中获取 metadata,完成包括但不限于下面的定制化工作:
- 设置 default locale
- 设置 hostname
- 添加 ssh keys到 .ssh/authorized_keys
- 设置用户密码
- 配置网络
- 安装软件包
简单的说:将cloud-init的配置构建在镜像中可以让instance启动时完成一系列配置,让你登录即可使用自己想要的系统。
Cloud-init 相关信息
配置文件: /etc/cloud/cloud.cfg 日志:/var/log/cloud-init.log 存放关键数据的目录: /var/lib/cloud/
工作原理
cloudinit分四个阶段执行,具体它们以4个服务的形式注册到系统中按如下顺序依次运行:
- local - cloud-init-local.service # 从云平台获取配置信息,配置网络等
- init - cloud-init.service # 系统启动,分区,设置主机名,SSH配置等
- config - cloud-config.service # 执行一些配置模块
- final - cloud-final.service # 安装包等,做一些收尾工作
实列介绍
在制作系统镜像的时候会用到cloud.cfg,cloud.cfg这部分步骤很简单,不过要配合镜像构造的要求来配置和使用。 1.安装cloud-init cloud-utils
# centos / Fedora/ redhat 等
yum install cloud-init cloud-utils -y
# or ubuntu等
apt-get install cloud-init cloud-utils -y
- 修改cloud-init配置 以下一个完整的虚机cloud-init配置,
$ vim /etc/cloud/cloud.cfg
users:
- default
disable_root: 0
ssh_pwauth: 1 # 启用密码登录方式
chpasswd:
list: | # list里可以设置一个用户列表和对应密码
root:xxxxxx # 默认root用户密码为‘xxxxxx’
expire: true # instance启动时如果没有注入密码,第一次登录后会提示修改密码
mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']
resize_rootfs_tmp: /dev
ssh_deletekeys: 0
ssh_genkeytypes: ~
syslog_fix_perms: ~
cloud_init_modules:
- migrator
- bootcmd
- write-files
- growpart
- resizefs # resize文件系统,适配新的大小。 默认对根目录执行
- disk_setup # disk_setup&mounts两个模块用于分区磁盘和挂载
- mounts
- set_hostname # 根据元数据设置主机名
- update_hostname
- update_etc_hosts
- rsyslog
- users-groups # 根据cloud.cfg的配置创建用户组和用户
- ssh # 配置sshd
cloud_config_modules:
- locale
- set-passwords
- rh_subscription
- yum-add-repo
- package-update-upgrade-install
- timezone
- 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
- power-state-change
device_aliases:
{'ephemeral0': '/dev/vdb'} # 添加/dev/vdb磁盘的别名ephemeral0,此处需注意平台vm的磁盘name
disk_setup:
ephemeral0:
table_type: 'gpt' # 设置Disklabel type
layout: True
overwrite: True
fs_setup:
- label: data0
filesystem: 'ext4'
device: '/dev/vdb1'
partition: 'auto'
overwrite: True
mounts:
- [ ephemeral0, null ]
- [ /dev/vdb1, /data0, "ext4"] # 挂载/dev/vdb1 到/data0目录
system_info:
default_user: # 设置默认用户为root并可以密码登录
name: root
lock_passwd: false
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
参考
源码: https://github.com/cloud-init/cloud-init 文档: https://cloudinit.readthedocs.io/en/latest/ cloud-init学习笔记