一、简介
cloud-init是一个在启动的时候定制你的Iaas平台中虚拟机的包,它可以帮助你重新定义你的虚拟机而不需要重新安装,只需要加入对应的配置项即可。在Ec2中有很多镜像都安装了cloud-init来方便用户定制自己的虚拟机。它可以让你在虚拟机启动的时候设置语言环境,设置主机名,甚至生成私钥,添加用户自己的ssh公钥到虚拟机.ssh/authorized_keys, 设置临时挂载点等等。
二、 实现方式
cloud-init的这些功能都是通过user-data实现的。
三、user-data的几种形式
1. gzip这种被压缩过的形式
2. user-data 脚本(bash, sh)
3. multipart
4. include其他文件
5. 启动脚本,会放入/etc/init中, #upstart-job
6. part handler, 用来处理当有多个部分时候,对每个部分进行解析和取舍的功能
四、 user-data功能详解
1. 一般的user-script
1 #!/bin/sh 2 cat <<EOF 3 ============================ 4 My name is ${0} 5 I was input via user data 6 ============================ 7 EOF
2. 每一次重启以后都会运行的脚本
1 #upstart-job 2 description "My test job" 3 start on cloud-config 4 console output 5 task 6 script 7 echo "====BEGIN=======" 8 echo "HELLO WORLD: $UPSTART_JOB" 9 echo "=====END========" 10 end script
3. cloudconfig配置,#cloud-config
3.1 用include包括多个文件
#include http://www.ubuntu.com/robots.txt http://www.w3schools.com/html/lastpage.htm
3.2 用cc_ready_cmd,当启动完成以后所进行操作,可以用作提醒用户已经初始化完成
cc_ready_cmd: [ initctl, emit, cloud-config, CLOUD_CFG=/var/lib/instance/cloud-config.txt ]
3.3 用timezone设置用户时区
timezone: US/Eastern
3.4 设置locale
locale: en_US.UTF-8 locale_configfile: /etc/default/locale
3.5为server设置一个自己常用的private key
ssh_keys: rsa_private: | -----BEGIN RSA PRIVATE KEY----- MIIBxwIBAAJhAKD0YSHy73nUgysO13XsJmd4fHiFyQ+00R7VVu2iV9Qcon2LZS/x 1cydPZ4pQpfjEha6WxZ6o8ci/Ea/w0n+0HGPwaxlEG2Z9inNtj3pgFrYcRztfECb 1j6HCibZbAzYtwIBIwJgO8h72WjcmvcpZ8OvHSvTwAguO2TkR6mPgHsgSaKy6GJo PUJnaZRWuba/HX0KGyhz19nPzLpzG5f0fYahlMJAyc13FV7K6kMBPXTRR6FxgHEg L0MPC7cdqAwOVNcPY6A7AjEA1bNaIjOzFN2sfZX0j7OMhQuc4zP7r80zaGc5oy6W p58hRAncFKEvnEq2CeL3vtuZAjEAwNBHpbNsBYTRPCHM7rZuG/iBtwp8Rxhc9I5w ixvzMgi+HpGLWzUIBS+P/XhekIjPAjA285rVmEP+DR255Ls65QbgYhJmTzIXQ2T9 luLvcmFBC6l35Uc4gTgg4ALsmXLn71MCMGMpSWspEvuGInayTCL+vEjmNBT+FAdO W7D4zCpI43jRS9U06JVOeSc9CDk2lwiA3wIwCTB/6uc8Cq85D9YqpM10FuHjKpnP REPPOyrAspdeOAV+6VKRavstea7+2DZmSUgE
3.6为server设置公钥
ssh_authorized_keys: - ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAGEA3FSyQwBI6Z+nCSjUUk8EEAnnkhXlukKoUPND/RRClWz2s5TCzIkd3Ou5+Cyz71X0XmazM3l5WgeErvtIwQMyT1KjNoMhoJMrJnWqQPOt5Q8zWd9qG7PBl9+eiH5qV7NZ mykey@host - ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA3I7VUf2l5gSn5uavROsc5HRDpZdQueUq5ozemNSj8T7enqKHOEaFoU2VoPgGEWC9RyzSQVeyD6s7APMcE82EtmW4skVEgEGSbDc1pvxzxtchBj78hJP6Cf5TCMFSXw+Fz5rF1dR23QDbN1mkHs7adr8GW4kSWqU7Q7NDwfIrJJtO7Hi42GyXtvEONHbiRPOe8stqUly7MvUoN+5kfjBM8Qqpfl2+FNhTYWpMfYdPUnE7u536WqzFmsaqJctz3gBxH9Ex7dFtrxR4qiqEr9Qtlu3xGn7Bw07/+i1D+ey3ONkZLN+LQ714cgj8fRS4Hj29SCmXp5Kt5/82cD/VN3NtHw== smoser@brickies
3.7修改用户名和密码,或者添加多个用户
chpasswd: list: | user1:password1 user2:RANDOM expire: True ssh_pwauth: [ True, False, "" or "unchanged" ] password: passw0rd chpasswd: { expire: False } ssh_pwauth: True
其中Random代表自动生成密码并且在log中输出
expire代表是不是立即激活
以上是cloud-init的基本使用教程,接下来一段时间我会写一个cloud-init源码级别的分析