ansible 学习笔记(上)

运维工具

当前常见的运维工具(Configuration)有以下一种
puppret(ruby)
saltstack(python)
chef
cfengine
....

Command and Control;

fabricfunc

程序发布:

手动发布
脚本发布
发布程序(运维程序)

程序发布要求:1、不能影响用户体验;2、系统不能停机;3、不能导致系统故障或造成系统完全不可用;

灰度发布模型(考虑以下两种维度):1、主机;2、用户;

发布思路:
/webapps/tuangou
/webapps/tuangou-1.1/webapps/tuangou-1.2将程序解压缩,解压缩后进行文件链接,近期版本不删除,
一边后期能够出问题能够进行回滚;

在调度器上先下线一批主机(标记为维护模式)-->关闭服务-->部署新版本-->启动服务-->在调度器上启用这一批主机;

运维工具的分类

agent:puppet,func,...agentless(ssh):ansible,fabric

Ansible

轻量化运维工具
能够提供Configuration和Command and Control的功能

Ansible的特性:
    模块化:调用特定的模块,完成特定的任务;
    基于Python语言实现,由paramiko,PyYAML和jinja2三个关键模块;
    部署简单:agentless;
    支持自定义模块;
    支持playbook;   
    幂等性:一个命令执行一边和多边的效果是一样的。

Ansible的安装及应用:

yum的epel源,
配置文件:/etc/ansible/ansible.cfg
主机清单:/etc/ansible/hosts
主程序:
    ansible
    ansible-playbook
    ansible-doc
ansible的简单使用格式:
    ansible HOST-PATTERN -m MOD_NAME -a MOD_ARGS
    ansible-doc -s MOD_name
ansible的常用模块:
    获取模块列表:
        ansible-doc -l
        command模块:在远程主机运行命令,不支持“|”
            ansible websrvs -m command -a "useradd user1"
        shell模块:远程主机在shell进程中中运行
            ansible websrvs -m shell - a "echo magedu | password --stdin user1"
        copy模块:复制文件至远程主机;
            用法:(1)src=\‘#\‘" /etc/fstab dest=/tmp/fstab"
                  (2)content= dest=   //直接把内容作为数据流传输至文件;
                        ansible all -m copy -a "content=‘hello world\n‘ dest=/tmp/testfile"
                  owner,group,mode
        cron模块:manage cron.d and crontab entries
            minute=
            hour=
            day=
            weekday=
            job=
            *name=    //必须有此参数            state=
                present //默认为添加
                absent  //删除crontab
            ansible all -m cron -a "minute=*/5 job=‘/sbin/ntpdate 172.16.0.1 &> /dev/null‘ name=Synctime"
        fetch模块:从远程主机拉去文件至当前机器;
        file模块:修改文件属性;
            *path=     //必须有此参数
            用法:(1)创建连接文件
                        ansible all -m file -a "src=/tmp/fstab path=/tmp/fstab.link state=link"
                  (2)修改属性:path= owner= mode= group=
                  (3)创建目录:path= state=directory
                        ansible all -m file -a "path=/tmp/tmpdir state=directory"
        hostname模块:manage hostname
            name=
        ping模块:
        pip模块:用来管理Python的依赖模块;
        yum模块:用yum来管理程序包
            *name=:指明程序包名称,可以带版本号      //必须有此参数            state=
                present,latest(安装),absent(卸载);
                ansible all -m yum -a "name=httpd state=latest"  
        service模块:管理服务
            *name=      //必须有此参数            state=
                started,stopped,restarted;
            enabled= 1|0    //开机自启动;
            runlevel= 
                ansible all -m service -a "name=httpd state=started"
        uri模块:uri的访问管理        user模块:管理用户账户;
            *name 
            system= yes|no    //yes是系统账户
            uid=
            shell=            group=
            groups=
            comment=
            home=
            move_home=
            remove=   //当state=agent是删除家目录
                ansible all -m user -a "name=user3 system=yes state=present uid=306"
        setup模块:用于获取facts;        group模块:添加或删除组
            *name=  //必须给的参数            state
            system
            gid=
        scipt模块:把本地脚本传递到远程主机后进行执行;
            ansible -m script -a "/path/to/script_file"

YAML:

YAML简介:

YAML是一个可读性高的用来表达资料序列的格式。YAML参考了其他多种语言,
包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822等。Evans在2001年首次发表了这种语言,
另外Ingy dot Net 与 Ben-kiki也是这种语言的共同设计者;YAML Ain`t Markup Language,即YAML不是XML。
不过,在开发的这种语言时,YAML的意思是:“Yet Another Markup Language”(仍是一种标记语言)。
其特性:
    YAML的可读性较好;
    YAML和脚本语言的交互性很好;
    YAML有一个一致的信息模型;
    YAML易于实现;
    YAML可以基于流来处理;
    YAML表达能力强,扩展性好;

YAML语法:

YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表、标量等数据结构。
其结构(structure)通过空格来展示,序列(Sequence)里的项用“-”来代表,Map里的键值对用“:”分隔。

Playbook:
Playbook的核心元素:
    Hosts:主机
    Tasks:任务
    variables:
    Templates:包含了模板的文本文件;
    Handlers:由特定条件出发任务;
    Roles:
    
    playbook的基础组件
        Hosts:运行指定任务的目标主机;
        remoute_user:在远程主机上执行任务的用户;
            sudu_user:
        tasks:任务列表
            模块,模块参数;
            格式:
                (1)action:module arguments
                (2)module:arguments
        handlers:
            任务,在特定条件下触发;
            接收到其他任务的通知时被触发;  
        variables:
            (1)facts:可直接调用;
            (2)ansible-playbook命令行中的自定义变量;
                -e VARS,--extra-vars=VARS            
            (3)通过role传递变量;
            (4)Host Inventory
                (1)向不同的主机传递不同的变量;
                    ip/hostname varaiable=value var2=value2
                (2)向组中主机传递相同的变量
                    [groupname:vars]
                    variable=value
            invertory参数:
                用于定义ansible远程连接目标主机时的参数,而非传递给playbook的变量;
                    ansible_ssh_host
                    ansible_ssh_port
                    ansible_ssh_user
                    ansible_ssh_pass
                    ansible_sudo_pass
                ....
        **注意:shell和command模块后直接跟命令即可**
        **某任务的状态在运行后为changed时,可通过“notify”通知给相应的handlers;**
        **任务可以通过“tags”打标签,而后可在ansible-playbook命令上使用-t指定进行调用;**
    playbook的使用方法:
        ansible-playbook在执行命令时,第一个任务执行完成后执行第二个任务,第二个执行完成后,执行第三个任务;
        ansible-playbook 
            --list-host      //显示执行的主机列表;            
            --check          //在目标主机进行检测可能会发生改变,但并不执行;            
            -t tags          //指明任务                
            ansible-palybook -t instconf web.yml  //进行标签为instconf的项目;
        playbook示例1:编写sample.yaml
            - hosts:            remote_user:root
            tasks:
                - name: create a user user3                  
                  user: name=user3 system=true uid=307
                - name: creare a user user4                  
                  user: name=user4 system=true uid=308
        playbook示例2:编写web.yml  
            - hosts: websrvs              remote_user: root
              tasks:
              - name: install httpd package                yum: name=httpd state=present
              - name: install configure file 
                copy: src=files/httpd.conf dest=/etc/httpd/conf/    //src为相对路径
                tags: instconf
                notify: restart httpd
              - name: start httpd.service 
                serivce: name=httpd state=started
              -name: execute ss command                
                shell: ss -tnl | grep 8080
            - handlers:              
              - name: restart httpd                
                service: name=httpd state=restarted
时间: 2024-10-23 21:12:00

ansible 学习笔记(上)的相关文章

运维自动化工具ansible学习笔记

利用五一假期的时间学习了下ansible,看了一天的官方文档,对其中需要注意的地方,做下笔记整理下思绪. 一.简介 Ansible是与puppet.saltstack类似的集群管理工具,其优点是仅需要ssh和Python即可使用,而不像puppet.saltstack那样都需要客户端.puppet与saltstack这2个软件都需要安装客户端,而saltstack与ansible很相似,都是属于python流的,但saltstack不是很稳定:puppet虽然稳定,但命令执行的时候,需要配置模块

Bootstrap学习笔记上(带源码)

做好笔记方便日后查阅o(╯□╰)o bootstrap简介: ?  简单灵活可用于架构流行的用户界面和交互接口的html.css.javascript工具集. ?  基于html5.css3的bootstrap,具有大量的诱人特性:友好的学习曲线,卓越的兼容性,响应式设计,12列格网,样式向导文档. ?  自定义JQuery插件,完整的类库,基于Less等. bootstrap模板为使IE6.7.8版本(IE9以下版本)浏览器兼容html5新增的标签,引入下面代码文件即可. <script sr

[ansible学习笔记]Error: ansible requires the stdlib json or simplejson module, neither was found!

1.执行ansible命令的时候客户端rhel56-192.168.209.133 出现以下错误: [[email protected] ansible]# ansible all -m command -a "python -V" -u reed SSH password: rhel56-192.168.209.133 | FAILED | rc=0 >> Error: ansible requires the stdlib json or simplejson modu

ansible学习笔记

一.ansible的基本简介: ansible式什么? Ansible 是一个适用于成百上千规模的受控节点的配置管理.应用程序部署.内部服务编排等诸多功能于一身的极为简单的IT运维自动化工具引擎,基于Python开 发.她无需代理,很容易部署,除SSH外没有其他安全基础设施/配置要求.她使用了一个非常简单的语言(YAML),让你可以编写自己的自动化作业脚本. ansible式怎样工作的? Ansible连接到受控机,并推送一个称为"Modules"的应用程序到受控机上,Ansible然

ansible学习笔记(一)

最近在学习使用ansible,为了未来的大规模部署应用做准备,这东西比我之前用过的puppet,saltstack都简便一点,没有client端,也不需要额外配置,基本上手技能用,据说在国外的热门程度目前也超过saltstack了. 下面就开始零星的记录吧. 确保服务在running状态 tasks:   - name: make sure apache is running     service: name=httpd state=running 写web server的vhost配置文件可

我的Ansible学习笔记

Ansible常见错误 http://afewbug.com/article/26官方文档 http://docs.ansible.com/ansible/安装配置 http://sofar.blog.51cto.com/353572/1579894 目录一.介绍二.yum安装三.Ansible配置四.模块五.playbook六.实战演练--用Ansible实现LANMP的安装 注意:以下实验环境均为关闭selinux和清空防火墙配置,需要把/etc/my.cnf 改为/etc/my.cnf.b

ansible学习笔记1-Inventory文件

Inventory文件 Ansible可同时操作属于一个组的多台主机.组合主机之间的关系通过inventory文件配置,默认的文件路径为/etc/ansible/hosts 除了默认文件外,你还可以同时使用多个inventory文件,也可以从动态源或云上拉取inventory配置信息 ------------------------------------------------------------------------ 主机与组 /etc/ansible/hosts文件的格式与windo

Ansible 学习笔记

最近因为需要管理很多台机器,而这些机器又需要频繁重新安装,实在受不了Puppet需要在每个客户机上都安装一遍,于是转头开始学些Ansible.根据这段时间的使用,这个确实是神器,唯一的感觉就是相见恨晚. 下面纪录一下最近的学习心得. Ansible是基于单客户端,多服务器端的模式.这可能是和Puppet等基于单服务器端,多客户端的最大不同. Ansible是用Python编写的,易于扩展,便于调试 下面以最常见的需要客户端和所有服务器建立ssh信任关系为例,看看ansible多么简单.首先建立h

ansible学习笔记(二):ansible for CentOS6安装

### 最近有点儿时间了,再继续学习Asible,本节尝试使用pip安装ansible for CentOS6.5,其中OS是最小化安装. 2.2 Installing ansible on CentOS 6.5 2.2.1 pip安装Ansible ###(1) 准备环境: # python -V       # 版本:Python 2.6.6 # yum install gcc gcc-c++ # yum install git -y # yum install python-devel p