- 云计算那些事儿:从IaaS到PaaS进阶
- 陈晓宇
- 602字
- 2020-08-27 18:35:31
3.7 初始化虚拟机神器cloud-init
cloud-init是云平台为Linux操作系统的虚拟机做系统初始化配置的开源服务软件。最早的cloud-init由Ubuntu的母公司Canonical开发,当用户首次创建虚拟机时,将用户设置的主机名、密码或者秘钥等存入元数据服务(metadata server),然后cloud-init通过http接口从元数据服务获取元数据并执行对应的操作,配置主机。后来,伴随着cloud-init功能不断完善,已经成为云主机配置的行业首选,当前,AWS、阿里云、CloudStack及OpenStack等多个平台都支持cloud-init。
3.7.1 基本概念
DataSource(数据源):cloud-init数据源,即元数据服务。cloud-init将从元数据服务中获取虚拟机的元数据。每个DataSource可以理解为一个OpenStack或者AWS的元数据服务。
Metadata(元数据):虚拟机的元数据包括虚拟机ID、名称、主机名、所属机房区域、公钥、虚拟机镜像等。下文截取了AWS的EC2实例的元数据信息。
Userdata(用户数据):元数据可以理解为虚拟机固定的信息。除此之外,用户还可以自己定义数据。Userdata可以是shell脚本、cloud config配置文件等,具体支持以下几种格式:
①text/x-include-once-url;
②text/x-include-url;
③text/cloud-config-archive;
④text/upstart-job;
⑤text/cloud-config;
⑥text/part-handler;
⑦text/x-shellscript;
⑧text/cloud-boothook.
3.7.2 cloud-int原理
cloud-int采用模块化设计,在配置的各阶段通过逐个加载并执行用户指定的工作模块,从而完成用户自定义配置。cloud-int总共定义了4个阶段(准确来说,还有一个generator阶段,用于生成sytemd服务),分别是local、network、config和final,如图3-22所示。
图3-22 cloud-int定义的4个阶段
在local阶段主要配置数据源和网络;在network阶段配置磁盘分区,设置主机名及SSH等;在config阶段执行各种配置模块;在final阶段安装软件,并执行用户自定义脚本等。其中,config阶段支持非常多的模块,例如,修改root密码,配置如下所示。