cloud-init

cloud-init 是一个系统配置工具,当系统起来时,cloud-init会从固定分区或者url读取数据,然后执行定制化操作。

cloud-init 有四个执行阶段:

  • local: cloud-init-local.service
  • init: cloud-init.service
  • config: cloud-config.service
  • final: cloud-final.service

配置

cloud-init 各阶段完成哪些工作可以在 /etc/cloud/cloud.cfg 中查看

  1. local 阶段: 作为 cloud-init 的初始阶段,此时主要完成网口的配置
    /usr/bin/cloud-init init –local
  2. init 阶段
  3. config 阶段
  4. final 阶段

cloud-init 脚本生成

社区提供了write-mime-multipart工具来生成cloud-init脚本。使用方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$ cat my-boothook.txt
#!/bin/sh
echo "Hello World!"
echo "This will run as soon as possible in the boot sequence"

$ cat my-user-script.txt
#!/usr/bin/perl
print "This is a user script (rc.local)\n"

$ cat my-include.txt
# these urls will be read pulled in if they were part of user-data
# comments are allowed. The format is one url per line
http://www.ubuntu.com/robots.txt
http://www.w3schools.com/html/lastpage.htm

$ cat my-upstart-job.txt
description "a test upstart job"
start on stopped rc RUNLEVEL=[2345]
console output
task
script
echo "====BEGIN======="
echo "HELLO From an Upstart Job"
echo "=====END========"
end script

$ cat my-cloudconfig.txt
#cloud-config
ssh_import_id: [smoser]
apt_sources:
- source: "ppa:smoser/ppa"

$ write-mime-multipart --output=combined-userdata.txt \
my-boothook.txt:text/cloud-boothook \
my-include.txt:text/x-include-url \
my-upstart-job.txt:text/upstart-job \
my-user-script.txt:text/x-shellscript \
my-cloudconfig.txt

User Data 输入格式

  • Gzip Compressed Content
  • Mime Multi Part archive
  • User-Data Script
    #!Content-Type: text/x-shellscript开头。
    存放用户脚本,可以是 python, shell, perl 等。user data 里的脚本执行比较晚,类似 rc.local, 而且只在第一次启动时 执行。
  • Include File
    #includeContent-Type: text/x-include-url开头。
    includ file 的内容是一串 url, 每行一个,cloud-init 启动时会 读取 url 链接的内容。
  • Cloud Config Data
    #cloud-configContent-Type: text/cloud-config开头,内容按规定格式编写。
  • Upstart Job
    #upstart-jobContent-Type: text/upstart-job开头,
    文件内容会存放在/etc/init ,以供其它 job 使用。
  • Cloud Boothook
    以#cloud-boothook 或 Content-Type: text/cloud-boothook 开头。
    boothook 数据会保存到 /var/lib/cloud ,然后立刻执行。boothook 每次上电都会执行,没有机制指定只运行一次。
  • Part Handler