标签:kvm cloud-init
在本地KVM中使用cloud-init
cloud-init是一个Linux虚拟机的初始化工具,被广泛应用在AWS和OpenStack等云平台中,用于在新建的虚拟机中进行时间设置、密码设置、扩展分区、安装软件包等初始化设置。本文主要研究在本地KVM虚拟机,也就是没有云平台的情况下,如何使用cloud-init进行初始化工作。示例虚拟机的操作系统是centos7.1。
在虚拟机内安装cloud-init:
yum install cloud-init -y |
安装完后,配置文件在/etc/cloud目录,主配置文件为/etc/cloud/cloud.cfg
要让cloud-init能够顺利完成初始化工作,必须把一些数据传给cloud-init,例如让cloud-init设置root密码,必须要告诉cloud-init密码是什么。Cloud-init支持很多种数据来源,常见的有metadata service、config drive和nocloud等。
l metadata service提供一个可以获取数据的url,例如OpenStack中的nova-api-metadat提供的http://169.254.169.254,虚拟机开机后cloud-init在完成网络配置后,会向这个url发起请求。因此这种模式需要先配置好网络;
l Config drive 把数据封装进一个iso9660(也支持vfat,但是不常见)文件系统的镜像中,然后把这个镜像以光驱(ide接口)的形式挂载到虚拟机中,虚拟机开机后cloud-init会自动去该镜像中获取数据。文件结构一般如下:
openstack/ - 2012-08-10/ or latest/ - meta_data.json - user_data (not mandatory) - content/ - 0000 (referenced content files) - 0001 - .... ec2 - latest/ - meta-data.json (not mandatory) |
l Nocloud 这种模式与config drive类似,只是文件结构不同,一般由user-data和meta-data两个文本文件构成。并且镜像以普通磁盘(virtio接口)的方式挂载。
本文主要试验nocloud模式。
制作镜像需要cloud-localsd命令,默认没有安装,安装命令如下:
yum install cloud-utils -y |
编写user-data:
cat << EOF > my-user-data #cloud-config chpasswd: list: | root:123456 expire: false ssh_pwauth: true EOF |
cloud-init也支持多种数据格式,我们使用的是cloud-config格式,这种格式必须是以#cloud-config开头的yaml格式。上面这段的意思是把root的密码设置为“123456”,然后配置ssh允许密码登录。
制作img:
cloud-localds -m local my-seed.img my-user-data |
-m指定的cloud-init的工作模式,local的意思是不需要依赖网络,我们没有使用metadata service,所以不需要网络。
编辑虚拟机的libvirt xml配置文件,挂载镜像:
<disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none' io='native'/> <source file='/path/to/my-seed.img'/> <target dev='vdb' bus='virtio'/> <readonly/> </disk> |
在/etc/cloud/cloud.cfg最后一行添加以下内容,这句的意思是让cloud-init接受NoCloud来源的数据:
datasource_list: ["NoCloud"] |
在虚拟机内执行rm -rf /var/lib/cloud,不删除这个目录,cloud-init不会执行。
硬重启虚拟机
virsh destroy vm virsh start vm |
虚拟机开机后,会发现root密码变成了“123456”
在虚拟机内mount /dev/vdb /mnt,可以查看数据的内容。
ls /mnt meta-data user-data cat user-data #cloud-config chpasswd: list: | root:123456 expire: false ssh_pwauth: true |
本文测试了在无云平台管理的本地KVM虚拟机上使用cloud-init修改root密码的功能。cloud-init还有很多功能和技术细节,后续会继续研究。
标签:kvm cloud-init
原文地址:http://blog.51cto.com/3646344/2110424