阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

在本地KVM中安装使用Cloud-init

131次阅读
没有评论

共计 1998 个字符,预计需要花费 5 分钟才能阅读完成。

Cloud-init 是一个 Linux 虚拟机的初始化工具,被广泛应用在 AWS 和 OpenStack 等云平台中,用于在新建的虚拟机中进行时间设置、密码设置、扩展分区、安装软件包等初始化设置。本文主要研究在本地 KVM 虚拟机,也就是没有云平台的情况下,如何使用 cloud-init 进行初始化工作。示例虚拟机的操作系统是 CentOS 7.1。

安装

在虚拟机内安装 cloud-init:

yum install cloud-init -y

安装完后,配置文件在 /etc/cloud 目录,主配置文件为 /etc/cloud/cloud.cfg

DataSource
要让 cloud-init 能够顺利完成初始化工作,必须把一些数据传给 cloud-init,例如让 cloud-init 设置 root 密码,必须要告诉 cloud-init 密码是什么。Cloud-init 支持很多种数据来源,常见的有 metadata service、config drive 和 nocloud 等。

metadata service 提供一个可以获取数据的 url,例如 OpenStack 中的 nova-api-metadat 提供的 http://169.254.169.254,虚拟机开机后 cloud-init 在完成网络配置后,会向这个 url 发起请求。因此这种模式需要先配置好网络;

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)

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>

修改 cloud-init 配置
在 /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 还有很多功能和技术细节,后续会继续研究。

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计1998字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中