Ansible简介

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

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

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

(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

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

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

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

简而言之ansible有如下的特点:

(一)批量管理工具

(二)模块

(三)python

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

(五)也支持主从模式

(六)也支持playbook

Ansible的安装

可以直接使用yum进行安装,前提是你已经配置了epel源

第一步:yum安装ansible

  1. [root@ken ~]# yum install ansible -y

第二步:查看ansible的版本信息

可以看到我的安装版本是2.6.2的

  1. [root@ken ~]# ansible --version
  2. ansible 2.6.2
  3. config file = /etc/ansible/ansible.cfg
  4. configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  5. ansible python module location = /usr/lib/python2.7/site-packages/ansible
  6. executable location = /usr/bin/ansible
  7. python version = 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]

第三步:查看ansible配置文件

我们接下来各个节点的管理主要是配置/etc/ansible/hosts文件

  1. [root@ken ~]# rpm -qc ansible
  2. /etc/ansible/ansible.cfg
  3. /etc/ansible/hosts

Ansible使用基本配置

第一步:把需要管理的节点的IP地址加入到/etc/ansible/hosts文件中

在文件末行添加如下三行信息,第一行是定义了一个主机组,下面两行只要把需要管理的IP地址即可填写进去即可

  1. [root@ken ~]# vim /etc/ansible/hosts
  2. ...
  3. # Here's another example of host ranges, this time there are no
  4. # leading 0s:
  5.  
  6. ## db-[99:101]-node.example.com
  7. ##############在末行添加如下信息#################
    [ken]
  8. 10.220.5.138
  9. 10.220.5.139

第二步:发送秘钥至被操控节点

ansible是基于sshd服务,所以如果我们需要管理其他节点的话,需要给各个节点发送秘钥

在主节点生成秘钥,发送至各个被监控节点

使用如下脚本即可进行批量安装

  1. #!/bin/bash
  2. . /etc/init.d/functions
    #author:技术流ken
    #date:2018.11.16
    #desc:this script for ssh key
  3. #下载expect
  4. yum install expect -y &>/dev/null
  5. if [ $? -eq 0 ];then
  6. echo -n "download expect"
  7. success
  8. echo ""
  9. else
  10. echo -n "download expect"
  11. failure
  12. echo ""
  13. exit 8
  14. fi
  15. #删除保存的秘钥信息
  16. if [ -f id_rsa -o -f id_rsa.pub -o known_hosts ];then
  17. rm -rf /root/.ssh/id*
  18. rm -rf /root/.ssh/known*
  19. fi
  20. #自动生成秘钥对
  21. /usr/bin/expect<<eof
  22. spawn ssh-keygen
  23. expect {
  24. "(/root/.ssh/id_rsa)" {send \r;exp_continue}
  25. "passphrase" {send \r;exp_continue}
  26. "again" {send \r}
  27. }
  28. expect eof
  29. exit
  30. eof
  31. #在各个节点分发秘钥
  32. for i in 37 38 39
  33. do
  34. ken=10.220.5.1$i
  35. /usr/bin/expect<<eof
  36. spawn ssh-copy-id $ken
  37. expect {
  38. "yes/no" {send yes\r;exp_continue}
  39. "password" {send o\r}
  40. }
  41. expect eof
  42. exit
  43. eof
  44. done

Ansible使用基本格式

ansible使用格式

可以输入一个ansible回车即可看到使用格式

  1. [root@ken ~]# ansible
  2. Usage: ansible <host-pattern> [options]

ansible常用使用选型

你可以输入ansible回车看到很多的选型,这里选取几个比较常用的选项进行说明

  1. -m:指定模块名称
  2. -a:指定模块的具体参数
  3. -s:以sudo的方式运行操作
  4. -i:指定被管理节点的主机列表
  5. -f:一批连接几个主机进行操作(默认是5个主机)

Ansible模块使用帮助

正如我们前文介绍的,ansible是基于模块来工作的,所以要想使用ansible,必须对ansible的模块有个清晰的认识。

查看模块

可以使用如下命令进行查看所支持的模块

  1. [root@ken ~]# ansible-doc -l

获取模块使用帮助

使用-s指定获取shell模块的使用帮助

  1. [root@ken ~]# ansible-doc -s shell
  2. - name: Execute commands in nodes.
  3. shell:
  4. chdir: # cd into this directory before running the command
  5. creates: # a filename, when it already exists, this step will *not* be run.
  6. executable: # change the shell used to execute the command. Should be an absolute path to the executable.
  7. free_form: # (required) The shell module takes a free form command to run, as a string. There's not an
  8. actual option named "free form". See the examples!
  9. removes: # a filename, when it does not exist, this step will *not* be run.
  10. stdin: # Set the stdin of the command directly to the specified value.
  11. warn: # if command warnings are on in ansible.cfg, do not warn about this particular line if set to
  12. no/false.

Ansible管理节点的三种方法

还记得刚才在hosts文件添加的三行内容吗?

  1. [ken]
  2. 10.220.5.138
  3. 10.220.5.139

在使用ansible的时候你可以指定主机组名,也可以指定一个IP,也可以用all来表示全部,因为你的配置文件里面可能不止一个主机组名,想要实现批量管理,就要用到了all.

所以这里有三种使用方法

(一)指定主机组名

通过如下的命令就可以获取到了整个主机组节点的信息

  1. [root@ken ~]# ansible ken -m command -a "hostname"
  2. 10.220.5.138 | SUCCESS | rc=0 >>
  3. ken
  4.  
  5. 10.220.5.139 | SUCCESS | rc=0 >>
  6. ken

(二)指定一个特定IP

指定ip 10.220.5.138获取特定节点的信息

  1. [root@ken ~]# ansible 10.220.5.138 -m command -a "ip a"
  2. 10.220.5.138 | SUCCESS | rc=0 >>
  3. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  4. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  5. inet 127.0.0.1/8 scope host lo
  6. valid_lft forever preferred_lft forever
  7. inet6 ::1/128 scope host
  8. valid_lft forever preferred_lft forever
  9. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
  10. link/ether 00:0c:29:a9:90:16 brd ff:ff:ff:ff:ff:ff
  11. inet 10.220.5.138/24 brd 10.220.5.255 scope global noprefixroute eth0
  12. valid_lft forever preferred_lft forever
  13. inet6 fe80::20c:29ff:fea9:9016/64 scope link
  14. valid_lft forever preferred_lft forever

(三)使用all

因为在配置文件里面我只定义了一个主机组,所以这里呈现的效果和使用ken是一样的,大家可以尝试定义多个主机组,再使用all.

  1. [root@ken ~]# ansible all -m command -a "ls /tmp"
  2. 10.220.5.138 | SUCCESS | rc=0 >>
  3. ansible_TpWP26
  4. hsperfdata_root
  5. hsperfdata_zabbix
  6. systemd-private-495d844cb6f24a5fa04192c973de9274-chronyd.service-SVap94
  7. systemd-private-495d844cb6f24a5fa04192c973de9274-httpd.service-Grw0SF
  8. systemd-private-79452c683402427e944cc4959183f774-httpd.service-DENLXJ
  9. systemd-private-79452c683402427e944cc4959183f774-ntpd.service-cH4QGP
  10. systemd-private-f0243ed42bf34679b61e0687522914f6-chronyd.service-DADZWt
  11. systemd-private-f0243ed42bf34679b61e0687522914f6-httpd.service-lCPw92
  12. vmware-root
  13.  
  14. 10.220.5.139 | SUCCESS | rc=0 >>
  15. ansible_bxGz8A
  16. systemd-private-2e376cd91398450f85a81bc060207ef8-chronyd.service-TxdhUO
  17. systemd-private-2e376cd91398450f85a81bc060207ef8-httpd.service-k8IZOZ
  18. systemd-private-5c9f32d6cff64520b10075e086d943ab-chronyd.service-iAH3c0
  19. systemd-private-5c9f32d6cff64520b10075e086d943ab-httpd.service-dsAqeg
  20. systemd-private-65ded84926e64a90b0a201a805f752ca-chronyd.service-eSj3iR
  21. systemd-private-6706ba5361284cd4a0c91f3c8b68c606-chronyd.service-sLgAei
  22. systemd-private-6706ba5361284cd4a0c91f3c8b68c606-httpd.service-op5Yg7
  23. vmware-root
  24. yum_save_tx.2018-11-15.16-02.KHC9kd.yumtx

Ansible基础认识及安装(1)的更多相关文章

  1. Ansible基础认识及安装使用详解(week5_day1_part1)--技术流ken

    Ansible简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量 ...

  2. ansible 基础 简介及 安装

    ansible 运维自动化工具. 没有客户端,底层通信依赖于系统软件,linux下基于openssh,win基于powershell

  3. ansible基础-安装与配置

    一 安装 1.1 ansible架构 ansible是一个非常简单的自动化部署项目,由python编写并且开源.用于提供自动化云配置.配置文件管理.应用部署.服务编排和很多其他的IT自动化需求. an ...

  4. ansible基础☞安装方法

    一 需要安装些什么 Ansible默认通过 SSH 协议管理机器. 安装Ansible之后,不需要启动或运行一个后台进程,或是添加一个数据库.只要在一台电脑(可以是一台笔记本)上安装好,就可以通过这台 ...

  5. ansible基础-理解篇

    1. 介绍 要说现在的部署工具,ansible可以说家喻户晓了. ansible是一个开源软件,用于软件供应.配置管理.应用部署.ansible可以通过SSH.remote PowerShell.其他 ...

  6. ansible基础-playbooks

    1. playbooks介绍 如果说ansible的modules是工具,inventory配置文件是原材料,那么playbook就是一封说明书,这里会记录任务是如何如何执行的,当然如果你愿意,这里也 ...

  7. ansible基础-ansible角色的使用

    ansible基础-ansible角色的使用 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们建议把多个节点都会用到的功能将其定义模块,然后谁要用到该模块就直接调用即可!而在a ...

  8. ansible基础-playbook剧本的使用

    ansible基础-playbook剧本的使用 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.YAML概述 1>.YAML的诞生 YAML是一个可读性高,用来表达数据序 ...

  9. 003.Ansible基础使用

    一 Ansible命令用法 Ansible命令行执行方式有:Ad-Hoc.Ansible-playbook两种,Web方式其官方提供付费产品Tower.Ad-Hoc主要用于临时命令的执行,Ansibl ...

随机推荐

  1. Python 批量保存word

    from docx import Document path = r'D:\pywork\12' # word信息表所在文件夹 w = Document(path + '/' + 'word模板表.d ...

  2. 读取topic数据存储到文件内

    基于python3.6 from pykafka import KafkaClient import logging logging.basicConfig(level=logging.INFO) d ...

  3. Linux命令--vi/vim复制一行,粘贴

    在光标的位置按“yy”,复制当前行: 然后再光标的行按“p”,粘贴到下一行,原来的往下顺移

  4. 第2章 Hive安装

    第2章 Hive安装 2.1 Hive安装地址 1.Hive官网地址 http://hive.apache.org/ 2.文档查看地址 https://cwiki.apache.org/conflue ...

  5. asp.net Core3.1自定义权限体系-菜单和操作按钮权限

    我们在做项目项目,经常会碰到权限体系,权限体系属于系统架构的一个最底层的功能,也是非常重要的功能,几乎在每个项目都会用到.那么我们该如何设计一个比较合理的且扩展性较强的权限体系呢? 经过多天的摸索,参 ...

  6. soso官方:搜索引擎的对检索结果常用的评测方法

    http://www.wocaoseo.com/thread-188-1-1.html       很久很久以前,搜索引擎还不象今天的百花齐放,人们对它的要求较低,只要它能把互连网上相关的网站搜出来, ...

  7. 【JAVA】生成一个32位的随机数。防止重复,保留唯一性

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985, QQ986945193 微博:http://weibo.com/mcxiaobing import ...

  8. Unity游戏Mono内存管理及泄漏

    UWA工具 https://yq.aliyun.com/articles/435553 Unity游戏Mono内存管理及泄漏 https://wetest.qq.com/lab/view/135.ht ...

  9. git 如何比较不同分支的差异

    前两天,良许在做集成的时候碰到了一件闹心事.事情是这样的,良许的一位同事不小心把一个错误的 dev 分支 merge 到了 master 分支上,导致了良许编译不通过.于是,我们需要将版本回退到 me ...

  10. [BUUOJ记录] [ACTF2020 新生赛]Include

    本题主要考查了利用php://filter伪协议进行文件包含 进入题目根据Tip进入正题,可以看到URL中存在文件包含(题目名也很直接) 首先考虑 "php://input"伪协议 ...