原文地址:http://www.51gocloud.com/?p=1945
1、什么是cloudinit
cloudinit是云环境中虚拟机初始化程序,在虚拟机启动过程中,系统会自动运行cloudinit程序,cloudinit会从数据源读取相关数据并对虚拟机进行相关配置。
常见数据源:
(1)metadata service:通过http服务提供数据源,cloudinit通过169.254.169.254地址访问metadata service获取元数据,AWS和openstack都支持此方式。
相关连接:http://www.51gocloud.com/?p=1595
(2)ConfigDrive:在没有网络环境下,可将元数据放在镜像中,启动虚拟机以磁盘方式加载镜像文件,最终cloudinit通过读取本地磁盘文件获取元数据
相关连接:http://www.51gocloud.com/?p=1771
常见配置操作:
(1)meta-data:主机名称HostName、Linux SSH密钥、Windows密码(可通过cloudbase-init项目支持密码初始化配置)、 网络配置、文件系统大小调整等
(2)user-data:命令、脚本、文件、用户自定义数据
2、为什么需要cloudinit
传统私有云厂商(如VMware),虚拟机初始化配置都是在虚拟机启动过程中,将磁盘挂在到本地,然后将相关信息(主机名、密码等)注入到系统中。这种方式在私有云下没有问题,因为私有云默认都是可信的。但在公有云场景,平台修改用户磁盘文件,对于用户来说,黑盒操作,存在信息安全问题,是不可接受的。cloudinit可以有效解决这一问题,原因如下:
(1)安全、零注入:虚拟机启动过程中,cloudinit通过http请求来访问metadata service获取信息,并进行初始化配置,对用户都是可见、可控;公有云平台无需对用户磁盘文件进行修改,只需要提供metadata service,供cloudinit访问即可。
(2)业界标准:AWS、Azure等公有云大厂商都是通过cloudinit方式实现虚拟机初始化配置,当前最新主流操作系统都支持cloudinit;且新兴系统比如CoreOS都是通过cloudinit在公有云上来完成集群的构建等。
(3)灵活:支持多种配置,比如密钥、命令、用户自定义脚本、数据等
3、公有云cloudinit支持现状
4、华为公有云cloudinit体验
(1)登录华为http://www.hwclouds.com/ 进入控制台,在弹性云服务器界面上,点击“购买弹性云服务器”
(2)创建虚拟机时指定主机名称、key-pair、以及用户自定义数据(这些信息最终会保存在metadata service上)
* 主机名称
* 密钥
* 用户自定义脚本(echo字符串测试)
(3)虚拟机启动成功后,可以看到初始化配置都是通过cloudinit组件完成
* 通过证书登录:
通过169.254.169.254可以访问metadata service,查看meta-data、user-data
查看自定义脚本运行结果:
当user-data是以”#!/bin/bash”开头,cloud-init会认为其是一个脚本,在启动过程中会自动运行。最终结果如下,和期望一致。
5、总结
cloudinit是业界标准虚拟机初始化配置组件,可以有效解决挂盘注入带来的安全风险,从而增强公有云可信度;且配置灵活,给使用公有云用户带来了极大的便利。