zoukankan      html  css  js  c++  java
  • ansible 介绍

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

    Ansible的与节点有关的重要术语包括控制节点,受管节点,清单和主机文件:

     

    控制节点(Control node):指安装了Ansible的主机,也叫Ansible服务器端,管理机

    Ansible控制节点主要用于发布运行任务,执行控制命令。

    Ansible的程序都安装在控制节点上,控制节点需要安装Python和Ansible所需的各种依赖库。注意:目前Ansible还不能安装在Windows下。

     

    受控节点(Managed nodes):也叫客户机,就是想用Ansible执行任务的客户服务器。

     

    清单(Inventory):受控节点的列表,就是所有要管理的主机列表。

    host文件:清单列表通常保存在一个名为host文件中。默认是/etc/ansible/hosts文件

    在host文件中,可以使用IP地址或者主机名来表示具体的管理主机和认证信息,并可以根据主机的用户进行分组。

    缺省文件:/etc/ansible/hosts,可以通过-i指定自定义的host文件。

     

    模块(Modules):模块是Ansible执行特定任务的代码块。

    比如:添加用户,上传文件和对客户机执行ping操作等。Ansible现在默认自带450多个模块,

    Ansible Galaxy公共存储库则包含大约1600个模块。

     

    任务(Task):是Ansible客户机上执行的操作。可以使用ad-hoc单行命令执行一个任务。

     

    剧本(Playbook):是利用YAML标记语言编写的可重复执行的任务的列表,
    playbook实现任务的更便捷的读写和贡献。比如,在Github上有大量的Ansible playbooks共享,
    你要你有一双善于发现的眼睛你就能找到大量的宝藏。

    角色(roles):角色是Ansible 1.2版本引入的新特性,用于层次性、结构化地组织playbook。
    roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。

     

    安装:
    yum install ansible 或者dnf install ansible

     

     

    1.Ansible Inventory文件

    1.1基于密码连接

    [root@ansible ~]# vim /etc/ansible/hosts
    # 方法一 主机+端口+用户名+密码
    [webserver]
    192.168.1.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"
    192.168.1.32 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"
    192.168.1.33 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"
    192.168.1.36 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"
    
    
    # 方法二 主机+用户名+密码
    [webserver]
    192.168.1.3[1:3] ansible_ssh_user=root ansible_ssh_pass="123456"
    
    
    # 方法二 主机+端口+密码
    [webserver]
    192.168.1.3[1:3]
    [webserver:vars]
    ansible_ssh_pass="123456"

     

    1.2基于秘钥连接

    首先配置公私钥,私钥拷贝到客户端服务器

    [root@ansible ~]# vim /etc/ansible/hosts # 方法一 主机+(端口) [webserver] 192.168.1.31:22 192.168.1.32 192.168.1.33 192.168.1.36 # 方法二 别名主机+地址+端口 [webserver] node1 ansible_ssh_host=192.168.1.31 ansible_ssh_port=22 node2 ansible_ssh_host=192.168.1.32 ansible_ssh_port=22 node3 ansible_ssh_host=192.168.1.33 ansible_ssh_port=22 node6 ansible_ssh_host=192.168.1.36 ansible_ssh_port=22

     

    1.3主机组的使用

    # 主机组变量名+主机+密码
    [apache]
    192.168.1.36
    192.168.1.33
    [apache.vars]
    ansible_ssh_pass='123456'
    
    # 主机组变量名+主机+密钥
    [nginx]
    192.168.1.3[1:2]
    
    # 定义多个组,把一个组当另外一个组的组员
    [webserver:children]  #webserver组包括两个子组:apache nginx
    apache
    nginx

     

    1.4.临时指定inventory

    1)先编辑一个主机定义清单
    [root@ansible ~]# vim /etc/dock
    [dock]
    192.168.1.31 ansible_ssh_pass='123456'
    192.168.1.32
    192.168.1.33
    2)在执行命令是指定inventory
    [root@ansible ~]# ansible -i /etc/dock all -m ping 

     

    1.5  指定组中的一台机器

    只对web组中192.168.1.2主机操作,通过—limit参数限定主机的变更。
    # ansible web -m command -a "systemctl status httpd" --limit "192.168.100.20"

    通过IP限定主机
    # ansible 192.168.100.20 -m command -a "systemctl status httpd"

    使用到通配符来限定主机
    # ansible 192.168.1.* -m command -a "systemctl status httpd"

     

    2.Ansible Ad-Hoc

    ad-hoc —— 临时的,在ansible中是指需要快速执行,并且不需要保存的命令。
    说白了就是执行   一条命令。
    对于复杂的命令则为playbook,类似于saltstackstate sls状态文件。

    [root@ansible ~]# ansible -h
    Usage: ansible <host-pattern> [options]
    -a MODULE_ARGS #模块参数 -C, --check #检查语法 -f FORKS #并发 --list-hosts #列出主机列表 -m MODULE_NAME #模块名字 -o 使用精简的输出
    [root@ansible ~]# ansible webserver -m shell -a 'uptime' -o
    192.168.1.36 | CHANGED | rc=0 | (stdout)  13:46:14 up 1 day,  9:20,  4 users,  load average: 0.00, 0.00, 0.00
    192.168.1.33 | CHANGED | rc=0 | (stdout)  21:26:33 up 1 day,  8:51,  3 users,  load average: 0.00, 0.01, 0.05

     

    命令说明

    ansible webserver -m shell -a "ls -a"

     

    #  一台目标主机
    [root@ansible ~]# ansible 192.168.1.31 -m ping
    
    # 多台目标主机
    [root@ansible ~]# ansible 192.168.1.31,192.168.1.32 -m ping
    
    # 所有目标主机
    [root@ansible ~]# ansible all -m ping

     

     组的配置信息如下:这里定义了一个nginx组和一个apache组
    [root@ansible ~]# ansible nginx --list
      hosts (2):
        192.168.1.31
        192.168.1.32
    [root@ansible ~]# ansible apache --list
      hosts (3):
        192.168.1.36
        192.168.1.33
        192.168.1.32
    
    # 一个组的所有主机匹配
    [root@ansible ~]# ansible apache -m ping
    
    # 匹配apache组中有,但是nginx组中没有  的所有主机
    [root@ansible ~]# ansible 'apache:!nginx' -m ping -o
    192.168.1.36 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
    192.168.1.33 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
    
    # 匹配apache组和nginx组中都有  的机器(并集)
    [root@ansible ~]# ansible 'apache:&nginx' -m ping -o
    192.168.1.32 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
    
    # 匹配apache组nginx组两个组所有  的机器(并集);等于ansible apache,nginx -m ping
    [root@ansible ~]# ansible 'apache:nginx' -m ping -o
    192.168.1.32 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
    192.168.1.31 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
    192.168.1.33 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
    192.168.1.36 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}

     

     

     

     

     

     

     

  • 相关阅读:
    P2P理财友情提示
    P2P理财友情提示
    如何在Chrome development tool里查看C4C前台发送的请求细节
    CRM和ERP的Sales Organization的映射关系
    如何从ERP将Material的Batch信息下载到CRM并存储在settype COMM_PR_BATCH里
    CRM中间件里的发布-订阅者模式
    CRM订单状态的Open, In process和Completed这些条目是从哪里来的
    如何证明CRM WebClient UI上的应用是有状态(Stateful)的
    如何使用代码获得一个function module的Where Used List
    观察者模式在One Order回调函数中的应用
  • 原文地址:https://www.cnblogs.com/centos2017/p/12712838.html
Copyright © 2011-2022 走看看