http://cloudinit.readthedocs.io/en/latest/topics/examples.html
介绍:
    cloud-init是专为云环境中虚拟机的初始化而开发的工具,它从各种数据源读取相关数据并据此对虚拟机进行配置。
    向一台数据服务器获取元数据(meta data)和用户数据(user data),前者是指VM的必要信息,
    如主机名、网络地址等;后者是系统或用户需要的数据和文件,如用户组信息、启动脚本等。
    当cloud-init获取这些信息后,开始使用一些模块对数据进行处理,如新建用户、启动脚本等。常见的配置包括:设定虚拟机的hostname、hosts文件、设定用户名密码、更新apt -get的本地缓存、调整文件系统的大小(注意不是调整分区的大小)等。
工作原理:
    首先,数据服务器开启HTTP服务,cloud-init会向数据服务器发送请求,确认数据源模块,依次获取版本、数据类型和具体数据内容信息。
    
    功能:
    用户可配置性
        可以通过用户数据配置Cloud-init的行为。
        用户数据可以给用户在实例启动时输出
        例如,这可以通过--user-data或--user-data-file参数到ec2-run-instances
        
    特征
    设置默认域
    设置一个实例的主机名
    生成实例SSH秘钥
    将SSH密钥添加到用户的.ssh / authorized_keys,以便他们可以登录
    设置临时挂载点
    配置网络设备

可用性:
    它目前安装在Ubuntu Cloud Images中,还有在EC2,Azure,GCE和许多其他云端上提供的官方Ubuntu映像。
    支持诸多linux发行版本,ubuntu、fedora、debian、rhel、centos等等

Gzip压缩:
    发现gzip压缩的内容将被解压缩。 然后将使用未压缩的数据,如同未压缩的数据一样。 
    这通常是有用的,因为用户数据被限制在〜16384 [1]个字节。

用户数据:
    配置文件(Cloud Config Data),类型为Content-Type: text/cloud-config,系统配置文件,如管理用户等,与/etc/cloud下的cloud.cfg最后合并配置项
    启动任务(Upstart Job),类型为Content-Type: text/upstart-job,建立Upstart的服务
    用户数据脚本(User-Data Script),类型为Content-Type: text/x-shellscript,用户自定义的脚本,在启动时执行
    包含文件(Include File),类型为Content-Type: text/x-include-url,该文件内容是一个链接,这个链接的内容是一个文件, (Cloud Boothook),类型为Content-Type: text/cloud-boothook
    压缩内容( Gzip Compressed Content),
    处理句柄(Part Handler),类型为Content-Type: text/part-handler,内容为python脚本,根据用户数据文件的类型做相应的处理
    多部分存档(Mime Multi Part archive),当客户端需要下载多个上述用户数据文件时,可用Mime编码为Mime Multi Part archive一次下载

目录结构:
启动阶段:
    
    Generator
    Local
    Network
    Config
    Final
当在systemd下引导时,将运行一个生成器,以确定cloud-init.target是否应包含在引导目标中。
默认情况下,此生成器将启用cloud-init。 它不会启用cloud-init,如果:
    
    Generator:
        当在systemd下引导时,将运行一个生成器,以确定cloud-init.target是否应包含在引导目标中。 
        默认情况下,此生成器将启用cloud-init。 它不会启用cloud-init,如果:A file exists: /etc/cloud/cloud-init.disabled
         /proc/cmdline contains cloud-init=disabled
    
    local:
        cloud-init-local.service
        找到本地的数据源
        对系统应用及网络进行配置
        网络配置:
            数据源
            网卡dhcp
            禁用网络
    
    Network:
        cloud-init.service
        http
        解压gzip
        格式化磁盘、分区
        bootcmd
    
    Config:
        cloud-config.service
        配置模块modules
    Final:
        cloud-final.service
        启动最后阶段rc.local
        包的安装
        配置管理插件、chef、puppet
        用户脚本,runcmd

数据源:
    数据源是cloud-init的配置数据源,通常来自用户(也称为用户数据)或来自创建配置驱动器(也称为元数据)的堆栈。
    型的用户数据将包括文件,yaml和shell脚本,而典型的元数据将包括服务器名称,实例ID,
    显示名称和其他云具体细节。 
    由于有多种方式来提供这些数据(每个云解决方案似乎都喜欢自己的方式)内部创建了一个数据源抽象类,
    以允许单一方式访问不同的云系统方法,以通过典型的子类使用提供此数据。
    
    支持的方式:
        Alt Cloud:
            RHEVm
            vSphere
        Azure
        CloudSigma
        CloudStack
        Config Drive
        Digital Ocean
        Amazon EC2
        MAAS
        NoCloud
        OpenNebula
        OVF
        SmartOS Datasource
        OpenStack:
            metadata_urls http://169.254.169.254返回200ok
            max_wait default 1
            timeout default 10
            retries default 5重试次数
        #cloud-config
            datasource:
                OpenStack:
                metadata_urls: ["http://169.254.169.254"]
                max_wait: -1
                timeout: 10
                retries: 5
Logging:
    支持本地和远程日志记录是通过 python 的内置-在日志记录配置并通过云 init rsyslog 模块可配置、
    默认cloud-init将其输出配置从/etc/cloud/cloud.cfg.d/05_logging.cfg加载
    默认配置将stdout和stderr从所有cloud-init阶段引导到/var/log/cloud-init-output.log

Modules:
    Apt Configure配置ubuntu 源列表
    Bootcmd:在引导过程的早期运行命令,用于在引导过程中不能完成的
    Byobu:该模块控制是否启用或禁用系统范围以及默认系统用户
    CA Certs:添加CA证书
    Chef:安装chef client
    Debug:帮助调试内部数据结构
    Disable EC2 Metadata:默认禁用,该模块通过拒绝发送到169.254.169.254的路由,从而禁用ec2数据源。
    Disk Setup:配置分区和文件系统
    Emit Upstart:发出启动配置,不需要配置
    Fan:配置ubuntu网络
    Final Message:当cloud-init完成时输出最终消息
        version: cloud-init version版本
        timestamp: time at cloud-init finish 完成耗时
        datasource: cloud-init data source源数据
        uptime: system uptime系统运行时间
    Foo:示例显示模块结构,不做任何事情    
    Growpart:调整分区大小以填充可用磁盘空间
        growpart:
            mode: auto
            devices: ["/"]
            ignore_growroot_disabled: false
    Grub Dpkg:配置哪个设备用作grub安装的目标,默认情况下,此模块应正常工作无须配置。
    Keys to Console:控制哪些ssh密钥可以写入控制台
        出于安全考虑,可能不希望将ssh指纹和密钥写入控制台。 
        为了避免将ssh键的类型指纹写入控制台,可以使用ssh_fp_console_blacklist配置密钥。 
        默认情况下,所有类型的键都将其指纹写入控制台。 
        为了避免将密钥类型的密钥写入控制台,可以使用ssh_key_console_blacklist配置密钥。
        默认情况下,ssh-dss键不会写入控制台
    Landscape:
    Locale:配置系统区域设置并系统应用
    LXD:
    Mcollective:
    Migrator:该模块处理将旧版本的cloud-init数据移动到较新版本
    Mounts:配置挂载点和交换文件
    NTP:处理ntp配置
        ntp:
    pools:
        - 0.company.pool.ntp.org
        - 1.company.pool.ntp.org
        - ntp.myorg.org
    servers:
        - my.ntp.server.local
        - ntp.ubuntu.com
        - 192.168.23.2
    Package Update Upgrade Install:
        更新,升级和安装软件包
    此模块允许在引导期间更新,升级或安装软件包
     如果要安装任何软件包或执行升级,那么软件包缓存将首先更新。 
     如果软件包安装或升级需要重新启动,则如果指定了package_reboot_if_required,则可以执行重新启动。 
     可以提供要安装的软件包的列表。 
     列表中的每个条目可以是包名称或具有两个条目的列表,第一个是包名称,第二个是要安装的特定包版本。
    Phone Home:
        引导完成后,该模块可用于将数据发布到远程主机, 可以发布所有数据或发布的密钥列表。
    Power State Change:
        改变电源状态
        所有配置模块都运行后,该模块处理关机/重新启动。
    Puppet:
        安装、配置puppet
    Resizefs:调;整文件系统的大小以使用分区上的所有可用空间。
    Resolv Conf:
        manage_resolv_conf: <true/false>
    resolv_conf:
        nameservers: ['8.8.4.4', '8.8.8.8']
        searchdomains:
            - foo.example.com
            - bar.example.com
        domain: example.com
        options:
            rotate: <true/false>
            timeout: 1
        Debian / Ubuntu默认情况下会使用resovlconf,同样的RedHat也会使用sysconfig
    RedHat Subscription:
        通过用户名和密码或激活和组织注册一个RedHat系统
    Rsyslog:
        此模块使用rsyslog配置远程系统日志记录
    Runcmd:
        在类似级别的rc.local上运行任意命令,并输出到控制台
        所有的命令必须是正确的yaml,因此您必须引用yaml所符合的任何字符
        runcmd:
    - [ ls, -l, / ]
    - [ sh, -xc, "echo $(date) ': hello world!'" ]
    - [ sh, -c, echo "=========hello world'=========" ]
    - ls -l /root
    - [ wget, "http://example.org", -O, /tmp/index.html ]
    如果项目是一个列表,它将被正确执行,就好像传递给execve()(以第一个arg为命令)。 
    如果项目是一个字符串,它将被写入一个文件并使用sh进行解释
    Salt Minion:配置公钥和私钥
    Scripts Per Boot:运行启动脚本
        数据源中的scripts / per-boot目录中的任何脚本都将在系统引导时运行。
    Scripts Per Instance:实例运行脚本,系统引导时运行
    Scripts Per Once:运行一次脚本
    Scripts User:运行用户脚本
        该模块运行所有用户脚本。 
        用户脚本未在数据源中的scripts目录中指定,而是存在于实例配置中的脚本目录中。
    Scripts Vendor:数据源中脚本/供应商目录中的任何脚本将在首次引导新实例时运行。
    Seed Random:生成随机秘钥
    Set Hostname:设置主机名和fqdn
    Set Passwords:设置系统密码,启用或禁用ssh密码认证。
        chpasswd配置密钥接受一个包含两个密钥中的一个的字典,即过期或列表。 
        如果expire被指定并设置为false,那么将使用password全局配置密钥作为所有用户帐户的密码。 
        如果指定了过期密钥,并设置为true,则用户密码将过期,从而防止使用默认系统密码。
        ssh_pwauth: <yes/no/unchanged>

password: password1
        chpasswd:
        expire: <true/false>

chpasswd:
        list: |
            user1:password1
            user2:RANDOM
            user3:password3
            user4:R

##
        # or as yaml list
        ##
        chpasswd:
            list:
            - user1:password1
            - user2:RANDOM
            - user3:password3
            - user4:R
            - user4:$6$rL..$ej...
    SSH:该模块处理ssh和ssh密钥的大部分配置
    SSH Authkey Fingerprints:为每个用户写入授权密钥的指纹记录日志
    SSH Import Id:此模块通过公钥钥匙服务器(通常是启动板或github)使用ssh-import-id导入ssh密钥
    Timezone:设置系统时区
        timezone: <timezone>
    Update Etc Hosts:更新/etc/hosts
        该模块将根据config中指定的主机名/ fqdn更新/ etc / hosts的内容。 
        / etc / hosts的管理使用manage_etc_hosts进行控制。 
        如果设置为false,则cloud-init将不会管理/ etc / hosts
        如果设置为true或template,cloud-init将使用位于/etc/cloud/templates/hosts.tmpl中的模板生成/ etc / hosts。 
        如果manage_etc_hosts设置为localhost,那么cloud-init将不会完全重写/ etc / hosts,而是确保/ etc / hosts中存在具有ip 127.0.1.1的fqdn的条目
        manage_etc_hosts: <true/"template"/false/"localhost">
        fqdn: <fqdn>
        hostname: <fqdn/hostname>
    Update Hostname:该模块将更新系统主机名和fqdn。
        preserve_hostname: <true/false>
        fqdn: <fqdn>
        hostname: <fqdn/hostname>
    Users and Groups:配置用户和组
            groups:
    - <group>: [<user>, <user>]
    - <group>

users:
        - default
        - name: <username>
        expiredate: <date>
        gecos: <comment>
        groups: <additional groups>
        homedir: <home directory>
        inactive: <true/false>
        lock_passwd: <true/false>
        no-create-home: <true/false>
        no-log-init: <true/false>
        no-user-group: <true/false>
        passwd: <password>
        primary-group: <primary group>
        selinux-user: <selinux username>
        shell: <shell path>
        snapuser: <email>
        ssh-authorized-keys:
            - <key>
            - <key>
        ssh-import-id: <id>
        sudo: <sudo config>
        system: <true/false>
        uid: <user id>
    Write Files:
        将任意内容写入文件,可选择设置权限。 内容可以用纯文本或二进制格式指定。 
        可以指定使用base64或二进制gzip数据编码的数据,并在写入之前对其进行解码。
            write_files:
        - encoding: b64
        content: CiMgVGhpcyBmaWxlIGNvbnRyb2xzIHRoZSBzdGF0ZSBvZiBTRUxpbnV4...
        owner: root:root
        path: /etc/sysconfig/selinux
        permissions: '0644'
        - content: |
        # My new /etc/sysconfig/samba file

SMDBOPTIONS="-D"
        path: /etc/sysconfig/samba
        - content: !!binary |
        f0VMRgIBAQAAAAAAAAAAAAIAPgABAAAAwARAAAAAAABAAAAAAAAAAJAVAAAAAA
        AEAAHgAdAAYAAAAFAAAAQAAAAAAAAABAAEAAAAAAAEAAQAAAAAAAwAEAAAAAAA
        AAAAAAAAAwAAAAQAAAAAAgAAAAAAAAACQAAAAAAAAAJAAAAAAAAcAAAAAAAAAB
        ...
        path: /bin/arch
        permissions: '0555'
    Yum Add Repo:
        将yum存储库配置添加到/etc/yum.repos.d。
        yum_repos:
            <repo-name>:
                baseurl: <repo url>
                name: <repo name>
                enabled: <true/false>

cloud-init简介及组件说明的更多相关文章

  1. spring cloud要点简介及常用组件

    spring cloud基于spring boot spring cloud是通过包装其他技术框架实现的,例如OSS组件,实现了一套通过基于注解.java配置和基于模板开发的微服务框架. spring ...

  2. openstack cloud init set password

    设置代理和password #!/bin/bash cd /home/ubuntu wget otcloud-gateway.bj.intel.com/script.tar.gz ]; then cu ...

  3. spring cloud 2.x版本 Spring Cloud Stream消息驱动组件基础教程(kafaka篇)

    本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka-ri ...

  4. Spring Cloud全家桶主要组件及简要介绍

    一.微服务简介 微服务是最近的一两年的时间里是很火的一个概念.感觉不学习一下都快跟不上时代的步伐了,下边做一下简单的总结和介绍. 何为微服务?简而言之,微服务架构风格这种开发方法,是以开发一组小型服务 ...

  5. Netty学习笔记(一) - 简介和组件设计

    在互联网发达的今天,网络已经深入到生活的方方面面,一个高效.性能可靠的网络通信已经成为一个重要的诉求,在Java方面需要寻求一种高性能网络编程的实践. 一.简介 当前JDK(本文使用的JDK 1.8) ...

  6. Spring Cloud Eureka简介及原理

    Eureka是Netflix开发的服务发现组件,本身是一个基于REST的服务.Spring Cloud将它集成在其子项目spring-cloud-netflix中,以实现Spring Cloud的服务 ...

  7. 我们为什么要使用Spring Cloud?简介

    转载:https://blog.csdn.net/smallsunl/article/details/78778790 单体架构 在网站开发的前期,项目面临的流量相对较少,单一应用可以实现我们所需要的 ...

  8. 01_Docker概念简介、组件介绍、使用场景和命名空间

    一.简介 Docker是一个能够把开发的应用程序自动部署到容器的开源引擎.Docker在虚拟化的容器执行环境中增加了一个应用程序部署引擎.该引擎的目标就是提供一个轻量.快速的环境,能够运行开发者的程序 ...

  9. Spring Cloud 模块简介2

    前面一篇文章谈到微服务基础框架,而Netflix的多个开源组件一起正好可以提供完整的分布式微服务基础架构环境,而对于Spring Cloud正是对Netflix的多个开源组件进一步的封装而成,同时又实 ...

随机推荐

  1. Math.random()随机生成x~y间的数字

    JS如何随机产生数字呢?这就用到了Math.random()方法,它能够随机产生0~1间的数字,这个数可能为0,但会小于1. 那么,如果我想要大于等于1小于10之间的随机整数呢?需要分为以下几步: 1 ...

  2. CCF CSP 201712-2 游戏

    题目链接:http://118.190.20.162/view.page?gpid=T67 问题描述 有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐 ...

  3. CUDA中多维数组以及多维纹理内存的使用

    纹理存储器(texture memory)是一种只读存储器,由GPU用于纹理渲染的图形专用单元发展而来,因此也提供了一些特殊功能.纹理存储器中的数据位于显存,但可以通过纹理缓存加速读取.在纹理存储器中 ...

  4. jQuery UI datepicker z-index默认为1 怎么处理

    最近在维护一个后台系统的时候遇到这样的一个坑:后台系统中日期控件使用的是jQuery UI datepicker. 这个控件生成的日期选择框的z-index = 1.问题来了.页面上有不少z-inde ...

  5. ios核心动画(基础动画)

    一.简单介绍 CAPropertyAnimation的子类 属性解析: fromValue:keyPath相应属性的初始值 toValue:keyPath相应属性的结束值 随着动画的进行,在长度为du ...

  6. OB如何创建租户

    一.        先导知识: 资源隔离是保证用户间相互不受影响的重要手段.数据库的资源隔离主要有以下方式: l  服务器隔离 l  数据库隔离:sqlserver.oceanbase.oracle ...

  7. Linux下使用指定网卡进行ping操作

    目录   1. 为什么要使用知道那个网卡ping操作   2. 使用指定网卡ping操作   3. 总结 1. 为什么要使用指定网卡ping操作 现在很多服务器都拥有双网卡甚至多网卡,有些是为了保持高 ...

  8. python json.dumps raise TypeError(repr(o) + " is not JSON serializable") TypeError: 0 is not JSON serializable

    出错如题. 这个问题有可能是因为python的json.dumps没法识别dump内容里的某些数据类型导致的.我的问题是因为dict中含有numpy.int64,numpy.float等类型导致的,需 ...

  9. python分布式爬虫--房天下

    第一步安装redis redis在windows系统中的安装与启动: 下载:redis官方是不支持windows操作系统的.但是微软的开源部门将redis移植到了windows上.因此下载地址不是在r ...

  10. HDU 1384 Intervals(差分约束)

    Intervals Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...