zoukankan      html  css  js  c++  java
  • cloud-init简介及组件说明

    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>

  • 相关阅读:
    最大的错误就是没有把自己的软件开发事业当 作一桩生意来看待
    python:open/文件操作
    Python 之ConfigParser
    Python 之ConfigParser
    Python 之ConfigParser
    python的time模块使用
    python的time模块使用
    python的time模块使用
    国外、国内各大OJ
    国外、国内各大OJ
  • 原文地址:https://www.cnblogs.com/gushiren/p/9511234.html
Copyright © 2011-2022 走看看