zoukankan      html  css  js  c++  java
  • Ansible安装 入门教程

     learn一门新技术咯:

    ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
     
    ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
    (1)、连接插件connection plugins:负责和被监控端实现通信;
    (2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
    (3)、各种模块核心模块、command模块、自定义模块;
    (4)、借助于插件完成记录日志邮件等功能;
    (5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

     参考文章: https://blog.csdn.net/dylloveyou/column/info/22050https://ansible-tran.readthedocs.io/en/latest/docs/intro_installation.html

    1. ansible安装

    # 首先配置一下源 (不必要)
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
    # 安装
    yum install -y ansible

    2. ansible 命令格式

    Usage: ansible <host-pattern> [options]
    -a MODULE_ARGS # 模块参数
    -C, --check #不做任何改变,但是会执行
    -f FORKS, --forks=FORKS # 用来指定并发
    --list-hosts  #列出主机列表
    -m MODULE_NAME #模块 名
    --syntax-check #语法检查
    -k, --ask-pass #输入密码

    3. ssh 生成密钥

    ansible 底层是通过ssh来实现的,  ping 走的是ICMP协议

    ssh-keygen   # 生成密钥对
    ssh-copy-id ip地址  # 将密钥对复制到远程机器

     使用ssh-copy-id批量拷贝公钥到远程主机 https://segmentfault.com/a/1190000009832597

    4. host-pattern 格式 配置

    vi /etc/ansible/hosts
    ## 被管理机ip
    192.168.14.144
    192.168.14.164
    192.168.14.165
    
    
    ## 分组 ( 所有, 开发, 数据库 )
    [all]
    192.168.14.144     
    192.168.14.164        
    192.168.14.165  
    
    [web]
    192.168.14.144     
    192.168.14.164        
    
    [db]
    192.168.14.164        
    192.168.14.165 
    • 单个主机

    • 多个主机,用逗号做分割

    • 全部主机,用all表示

    • 单个组

    • 多个组

      • 交集 ‘db:&web’

      • 并集

        • web,db

        • ‘web:db’

      • 差集 ‘web:!db’

    5. ansible的第一个命令

    ansible 192.168.14.144 -m ping
    
    ###
    192.168.14.144 | SUCCESS => {
        "changed": false, 
        "ping": "pong"
    }
    [root@localhost ~]# ansible all -m ping  # all
    192.168.14.165 | SUCCESS => {
        "changed": false, 
        "ping": "pong"
    }
    192.168.14.164 | SUCCESS => {
        "changed": false, 
        "ping": "pong"
    }
    192.168.14.144 | SUCCESS => {
        "changed": false, 
        "ping": "pong"
    }
    ansible 10.0.0.143 -m ping
    ansible 10.0.0.143,10.0.0.144 -m ping
    ansible all -m ping
    ansible web -m ping
    ansible web,db -m ping
    ansible "web:&db" -m ping 
    ansible 'web:!db' -m ping
    ansible 'web:db' -m ping

    6. ansible-doc 查看模块的帮助信息

    ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
    -j json的方式返回模块内容
    -l 以列表的形式返回模块内容
     -s, --snippet 以片段式的方式显示模块的帮助信息
     # 直接显示模块的全部信息
     ansible-doc -l |wc -l 统计ansible提供的模块

     

    二、关于幂等性

    ansible 具有幂等性,幂等性能够保证我们重复的执行一项操作时,得到的结果是相同的,下面详细介绍一下幂等性的概念。

    举个例子,你想把一个文件拷贝到目标主机的某个目录上,但是你不确定此目录中是否已经存在此文件,当你使用 ansible 完成这项任务时,就非常简单了,因为如果目标主机的对应目录中已经存在此文件,那么 ansible 则不会进行任何操作,如果目标主机的对应目录中并不存在此文件,ansible 就会将文件拷贝到对应目录中。说白了,ansible 是”以结果为导向的”,我们指定了一个”目标状态”,ansible 会自动判断,”当前状态”是否与”目标状态”一致,如果一致,则不进行任何操作,如果不一致,那么就将”当前状态”变成”目标状态”,这就是”幂等性”,”幂等性”可以保证我们重复的执行同一项操作时,得到的结果是一样的。

    现在我们就来实验一下,看看重复执行相同的 ansible 命令时,会得到什么效果,如下图所示: 这里写图片描述 从上图可以看出,返回信息仍然包含”SUCCESS”字样,证明 ansible 命令执行成功,不过很明显,这次的返回信息为”绿色”,而且细心的你一定发现了,这次绿色的返回信息中,”changed” 字段的值为false,而之前黄色的返回信息中,”changed” 字段的值为 true。

    当返回信息为绿色时,”changed” 为 false,表示 ansible 没有进行任何操作,没有”改变什么”。
    当返回信息为黄色时,”changed” 为 true,表示 ansible 执行了操作,”当前状态”已经被 ansible 改变成了”目标状态”。

    这就是幂等性的体现,当第一次执行上述命令时,ansible 发现当前主机中并没有我们需要的 testfile1文件,ansible 就会按照我们指定的操作,拉取 testfile1 文件,也就是说,ansible “改变”了”当前状态”,将当前”没有 testfile1 文件的状态”变为了”有 testfile1 文件的状态”。当我们再次执行同样的命令时,ansible 发现对应文件已经存在于对应目录中,于是 ansible 并没有做出任何操作,也没有进行任何改变,因为”当前状态”与我们预期的”目标状态”一致,没有必要再做出重复的无用功。

    看到这里,你应该已经明白,为什么执行 ansible 命令时,会返回黄色的成功信息或者绿色的成功信息了吧?我们可以通过返回信息的颜色,更加精准的判断执行命令之前的状态是否与我们预期的一致。

    从返回信息中可以看到,当 ansible 进行 fetch 操作时,会对对应文件进行哈希计算,算出文件哈希值,也就是说,如果我们改变了文件中的内容,哈希值也将随之发生改变,这个时候,即使对应目录中存在同名的文件,ansible 也会判断出两个文件属于不同的文件,因为它们的哈希值并不相同,我们来实验一下,操作如下:
    这里写图片描述

    如上图所示,我们在 /testdir/ansible/ansible-demo2/testdir/testfile1文件的尾部加入一个”空格”,以改变文件内容,然后又执行了 fetch 命令,结果发现,ansible-demo2 的返回信息为黄色,ansible-demo3 主机的返回信息为绿色,证明 ansible 已经做出了正确的判断,将修改过的文件替换为重新拉取的文件。

  • 相关阅读:
    pecl install swoole 安装php扩展swoole
    RBAC
    mysql数据类型
    ES6——Proxy的this问题
    ES6——Proxy实现链式操作
    ES6——Symbol内置值
    ES6——yield例子
    ES6——Generator的next()方法
    ES6——Thunkify用法
    Linux学习day1
  • 原文地址:https://www.cnblogs.com/niuli1987/p/10552483.html
Copyright © 2011-2022 走看看