Cloud-init 使用以及优化项
cloud-init简介
Cloud-init是开源的云初始化程序,能够对新创建弹性云服务器中指定的自定义信息(主机名、密钥和用户数据等)进行初始化配置。通过Cloud-init进行弹性云服务器的初始化配置,将对您使用弹性云服务器、镜像服务和弹性伸缩产生影响。简单地讲,cloud-init是一个Linux虚拟机的初始化工具,被广泛应用在AWS和OpenStack等云平台中,用于在新建的虚拟机中进行时间设置、密码设置、扩展分区、安装软件包等初始化设置。
cloud-init的安装部署
Ubuntu
apt install -y cloud-init
Centos
yum install -y cloud-init
#在centos系列的发行版本中,最好将gdisk growpart等磁盘初始化工具单独安装,用于后续的硬盘扩容
yum install -y gdisk
yum install -y cloud-utils
yum install -y cloud-utils-growpart
cloud-init的配置
cloud-init 系统服务配置文件位置如下:
/lib/systemd/system/cloud-init-local.service
/lib/systemd/system/cloud-init.service
/lib/systemd/system/cloud-config.service
/lib/systemd/system/cloud-final.service
实例数据与数据源
实例数据(Instance data)是cloud-init用来处理并配置实例的数据集合。根据用途,可以将实例数据划分为如下三类:
metadata:一系列字典格式的元数据,用作模板渲染、模块运行等等。
userdata:启动实例时用户能够指定的数据(单实例数据)
vendordata:云基座传入的数据(全局数据)
在openstack中,metadata、userdata均在用户创建实例时通过相应参数传入,而vendordata则由nova-api-metadata服务启动时指定。
这些数据可能来源于许多地方,cloud-init使用数据源一词表示实例数据的来源,目前内置的数据源有:OpenStack、ConfigDrive、Amazon EC2、Azure等等,不同的数据源也表明了不同的实例数据搜索方式。cloud-init在实例内部启动时并不知道从哪里才能够找到实例数据,它会根据预设的一个数据源的列表一个一个查找实例数据,而首个能够找到实例数据的数据源将成为这次启动的数据源
如果cloud-init指定了OpenStack数据源,那么实例数据将均通过HTTP API请求获取,不同类别的实例数据有着不同的获取方式:
metadata:http://169.254.169.254/openstack/latest/meta_data.json
userdata:http://169.254.169.254/openstack/latest/user_data
vendordata:http://169.254.169.254/openstack/latest/vendor_data.json、http://169.254.169.254/openstack/latest/network_data.json
执行流程如下:
cloud-config是cloud-init的配置文件,它用于控制cloud-init的行为,比如说该运行哪些功能,以及每个功能如何运行等等。和其他软件的配置文件相比,cloud-config具有高度定制化的特点,除了云服务器本身的cloud-config以外,cloud-init还能够从vendordata、userdata甚至内核参数中获取cloud-config,从而使得用户能够方便地利用cloud-init定制自己的云服务器。
模块(Modules)是cloud-init运行的主体,所有我们需要的用来初始化云服务器的功能都是通过执行模块而实现的。以set_hostname模块为例,该模块的功能是设置主机名,当运行该模块时,它会读取cloud-config中的hostname参数,并将其中值设置为云实例的主机名。
参考文章
https://www.cnblogs.com/frankming/p/16281447.html