• Linux中级之ansible概念及hoc命令行调用模式


    一、Ansible简介

    ansible是新出现的开源的自动化运维工具,基于Python开发,集合了众多运维工具(puppetcfenginecheffuncfabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

    ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:

    (1)connection plugins:连接插件,AnsibleHost通信使用,负责和被监控端实现通信;

    (2)host inventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载;指定操作的主机,是一个配置文件里面定义监控的主机;

    (3)、各种模块核心模块、command模块、自定义模块;

    Core ModulesAnsible执行任何管理任务都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Lnventory中的主机,就可以完成管理主机。

    Custom Modules:自定义模块,完成Ansible核心模块无法完成的功能,此模块支持任何语言编写。

    (4)、借助于插件完成记录日志邮件等功能;

    (5)playbooks:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

    (6)AnsibleAnsible的核心程序

    ansible的特点:

    (一)批量管理工具

    (二)模块

    (三)python

    (四)无终端,是基于ssh实现管理的

    (五)也支持主从模式

    (六)也支持playbook

    Ansible的优点:

    1Stupied Simple ,上手简单,学习曲线平滑

    2SSH by default ,安全,无需安装客户端

    3)配置简单、功能强大、扩展性强

    4)支持API(应用程序接口)及自定义模块,可通过Python轻松扩展

    5)通过Playbooks来定制强大的配置、状态管理

    6)提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台(收费产品,一般很少用)

    7幂等性:一种操作重复多次结果相同

    二、ansible的安装

    1、安装

    yum install epel-release           #需要安装epel

    yum install ansible -y

    2、查看ansible的版本信息

    ansible --version

    3、查看ansible配置文件

    [root@ren5 ~]# rpm -qc ansible

    /etc/ansible/ansible.cfg

    /etc/ansible/hosts

    4、调用模块(python

    paramiko   #模拟ssh协议批量管理主机

    jinja2            #模板语言,主要用来传递变量

    yaml             #相当于是一种编程语言

    5、控制方式:

    1)免密钥:key-gen

    server: ssh-keygen

    scp id_rsa.pub root@192.168.254.25:/root/.ssh/authorized_keys

    2)用户密码:

    参数形式:ansible_ssh_user=root; ansible_ssh_pass=root ansible_ssh_port=22

    host inventory:记录着客户端的ip信息

    [root@ren5 ~]# vim /etc/ansible/hosts

    在文件最后添加:

    [test_ren1]

    192.168.11.4 ansible_ssh_user=root ansible_ssh_pass=0304 ansible_ssh_port=22

    192.168.11.6 ansible_ssh_user=root ansible_ssh_pass=0304 ansible_ssh_port=22

    注意:/root/.ssh/known_hosts需在此文件中有ssh连接的记录才可

    或者取消/etc/ansible/ansible.cfg文件中#host_key_checking = False的注释

    如果用了密钥登录,则密码登录无效;也就是说这两种方式无法混合使用

    6、调用ansible的三种模式:

    hoc:命令行

    playbooks:剧本|脚本

    roles:角色

    三、Ansible使用基本格式

    1、使用格式

    [root@ren5 ~]# ansible

    Usage: ansible <host-pattern> [options]

    2、参数:

    -m:(--module-name=MODULE_NAME)指定模块名称

    -a:(--args=MODULE_ARGS)指定模块的具体参数

    -s:以sudo的方式运行操作

    -i:(--inventory=INVENTORY)指定被管理节点的主机列表

    -f:(--forks=FORKS)一批连接几个主机进行操作(默认是5个主机,最高255)控制并发数

                 线程是最小的调度单位,进程是最小的管理单元

    ansible-doc -l                          #查看所支持的模块

    ansible-doc -s MODEL_NAME   #模块的具体用法和参数

    ansible all --list-hosts    #查看所有主机

    四、ansible管理节点的三种方法

    1、指定主机组名

    [root@ren5 ~]# ansible test_ren1 -a "ip a"         #默认调用command模块

    2、指定一个特定IP

    [root@ren5 ~]# ansible 192.168.11.4 -a "ls"

    3、使用all

    [root@ren5 ~]# ansible all -a "date"

    五、配置文件

    ansible配置文件:(/etc/ansible/ansible.cfg)

         14#inventory      = /etc/ansible/hosts                主机管理资产清单

          15#library        = /usr/share/my_modules/         ansible操作的动作,无论是本地或者远程,都使用一小段代码来执行,这小段代码称之为模块,这个library就是用来存放这些模块的路径

          16#module_utils   = /usr/share/my_module_utils/             

          17#remote_tmp     = ~/.ansible/tmp

          18#local_tmp      = ~/.ansible/tmp

          20#forks          = 5                            ansible默认操作主机的并发数

          21#poll_interval  = 15                                                 

          22#sudo_user      = root                    这是默认的执行命令的用户,也可以在playbook中重新设置这个参数

          23#ask_sudo_pass = True                 用来控制Ansible playbook 在执行sudo之前是否询问sudo密码.默认为no

          24#ask_pass      = True                     Ansible 剧本playbook 是否会自动默认弹出弹出密码.默认为no

          25#transport      = smart

          26#remote_port    = 22                     这个指定连接被管理节点的端口,默认是22,除非设置了特殊的ssh端口

          27#module_lang    = C                       默认模块和系统之间通信的计算机语言,默认为’C’语言

          28#module_set_locale = False                  

          61#host_key_checking = False            这是设置是否检查ssh秘钥,可以设置为FalseTrue

          103#timeout = 10                                ssh连接超时时间

          111#log_path = /var/log/ansible.log        ansible默认是不记录日志的,如果想把ansible系统输出的日志存放到文件中可以开启这个选项

          136#private_key_file = /path/to/file         使用ssh公钥私钥登录系统的时候,使用的秘钥路径

          .......

          还有更多的配置项,大家可以参考官方文档,如下:             http://docs.ansible.com/ansible/latest/intro_configuration.html#private-key-file

    六、常用模块

    1ping模块:指定ansible serverclient的连通性,测试成功会返回“pong

    [root@ren5 ~]# ansible all -m ping

    2command模块:命令模块,默认模块,用于在远程执行命令(不支持正则和管道符)

    [root@ren5 ~]# ansible test_ren1 -m command -a "date '+%F %T'"

    3cron模块:管理定时任务

          state:(prsent:安装;absent:移除)

          dayenvhourjobminutemonthnamestateuserweekday

    [root@ren5 ~]# ansible test_ren1 -m cron -a "minute=*/5 job='echo HELLO' state=present name=cron_test1"

    [root@ren5 ~]# ansible test_ren1 -a "crontab -l"

    [root@ren5 ~]# ansible test_ren1 -a "crontab -r"

    4user模块:管理用户账户

          name=:指明创建的用户的名字

          remove=USERNAMEstate=absent

          state=present        #创建用户          shell=:指定用户shell类型

          #ansible testhosts -m user -a 'name=user1 uid=250 group=group250'

    5group模块:添加或者删除用户组

          #ansible testhosts -m group -a 'name=group250 gid=250'

    6copy模块:复制本地文件到远程主机

          src=:定义本地源文件路径

          dest=:定义远程目标文件路径

    [root@ren5 ~]# ansible test_ren1 -m copy -a "src=/root/a.txt dest=/root/a.txt"

          content=:取代src,表示直接用此处指定的信息生成为目标的内容

          #ansible all -m copy -a 'content=nihao dest=/root/a.txt'

    7service模块:管理程序服务,指定运行状态

    [root@ren5 ~]# ansible all -m service -a "name=httpd state=restarted"

    [root@ren5 ~]# ansible all -m shell -a "ss -tnl |grep 80"

          enabled=:是否开机自动启动,取值为true或者false

          name=:服务名称

          state=:状态,取值有started,stopped,restarted

    8shell模块:和command模块类似,在远程主机上运行命令,支持变量等符号,尤其是在用到管道符等功能的复杂命令

          [root@ren5 ~]# ansible all -m shell -a "ls /tmp |wc -l"

    9script模块:将本地脚本复制到远程主机并运行(无需加多余参数,只需要在-a后面加上本地脚本路径即可)

          ansible testhosts -m script -a '/root/a.sh'

    10yum模块:安装程序包

          [root@ren5 ~]# ansible all -m yum -a "name=httpd state=present"

          [root@ren5 ~]# ansible all -m yum -a "list=httpd"

          name=:指定要安装的程序包,可以带上版本号

          state=present,latest,installed表示安装,absent,removed表示卸载

          list=:查看安装的程序包

    11setup模块:收集远程主机的facts

          每个被管理的节点在接受并运行管理命令之前,会将自己主机相关信息,如操作系统版本,ip地址等报告给远程ansible主机

          [root@ren5 ~]# ansible all -m setup

    12file模块:设置文件属性

    [root@ren5 ~]# ansible all -m file -a "state=touch path=/root/test.txt"

  • 相关阅读:
    20172315 2017-2018-2 《程序设计与数据结构》第一周学习总结
    预备作业03
    寒假作业02
    寒假作业01
    2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周
    20172310 2017-2018-2 《程序设计与数据结构》第八周学习总结
    2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第一周
    20172310 《程序设计与数据结构》实验二报告
    20172310 2017-2018-2 《程序设计与数据结构》第七周学习总结
    20172310 2017-2018-2 《程序设计与数据结构》第六周学习总结
  • 原文地址:https://www.cnblogs.com/renyz/p/11401252.html
Copyright © 2020-2023  润新知