在云平台中,创建云主机的时候希望能够对主机进行一些初始化操作,如配置ip,主机名,密码,ssh登录等,下面具体介绍cloud-init。
要实现在云主机中的初始化配置,首先就要让云主机获取到用户输入的配置数据,在cloud-init中以cdrom方式读取,即openstack将用户数据打包成iso挂载给云主机,云主机启动后内部的cloud-init默认从cdrom里面读取数据,然后进行初始化操作。
这里画个简图,可以看下数据注入流程:
首先在云管理平台上,用户输入数据,密码,主机名,或者是可选ip(如果没有dhcp)等,然后发起对openstack调用,中间层将数据传入openstack,到nova层创建主机,命令行处以user-data方式进行注入,调用到计算节点利用driver创建虚机时,会先将用户数据大包成iso,这部分由configdrive完成,然后将iso直接挂给虚拟机作为cdro使用,虚机系统启动后运行cloud-init服务,会先找cdrom来读取数据,然后再根据模块来进行初始化,配置ip,主机名,ssh登录等。
上述流程中,在nova的user-data处,要注入的文件格式应为yaml格式,cloud-init默认读取的数据格式就是yaml格式。虚拟机中,cloud-init的配置文件为/etc/cloud/cloud.cfg,里面定义了系统启动过程中不同阶段所执行的模块,如下等:
user: root
disable_root: 0
manage_etc_hosts: True
preserve_hostname: False
cloud_init_modules:
- bootcmd
- resizefs
- set_hostname
- update_hostname
- update_etc_hosts
- ca-certs
- rsyslog
- ssh
在制作镜像的时候,安装完cloud-init可以进行配置,将不需要的模块去掉,以加快启动速度,具体个模块含义见:
cloud-init模块说明
将用户数据打包成iso是在计算节点上进行的,需要mkisofs工具,在计算节点上安装:
yum install genisoimage
或是
apt-get install genisoimage
nova的配置文件里也要配置:
force_config_drive=always
然后重启下nova-compute服务即可,可以通过nova命令行来进行测试:
nova boot --flavor flavor_id --image image_id --nic net-id=net_id --user-data config.yaml --availability-zone nova-compute:node_name vm_name
小笨驴在吃草的时候创建了微信公众号,为方便更多觅食的“小笨驴”,为大家准备了大量的免费基础教学资料以及技术解决方案,还会定时发布一些好的技术文章,当然也会扯扯蛋、谈谈人生、呵呵,希望我们这群乐于分享技术的“小笨驴”团队越来越大!