Iaas平台中的虚拟机启动行为控制者 cloud-init

时间:2022-09-23 19:58:56

   一、简介

        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源码级别的分析