运维工具:帮助简化运维
手动—>自动化(shell脚本)
批量管理机器
ansible是基于python开发的,集合众多运维工具:puppet、saltstack、cfengine、chef、func、fabric
实现批量系统配置,批量程序部署,批量运行命令等功能
ansible是基于模块工作,本身没有批量部署能力,真正具有批量部署的是ansible所运行的模块,ansbile只是提供一种框架

核心组件

image.png

  1. ansible:核心程序
  2. modules:包含ansible自带的核心模块以及自定义模块
  3. plugins:完成模块功能的补充,包括连接插件,邮箱插件
  4. playbooks:剧本:定义ansible多任务配置文件,有ansible自动执行
  5. inventory:定义ansible管理主机的清单
  6. connection plugins:负责和被监控端实现通信

    特性

  7. 不需要在被管控主机上安装任何客户端

  8. 无服务端,使用时直接运行命令即可
  9. 基于模块工作,可以使用任何语言开发自定模块
  10. 使用yaml语句定制剧本(playbooks)
  11. 基于ssh工作
  12. 可以实现多级指挥
  13. 幂等性:一种操作重复执行多次,结果是相同的

    安装及配置

    安装:pip/二进制包/yum

    yum install ansible -y
    [root@localhost ~]# rpm -qa | grep ansible
    ansible-2.9.2-1.el7.noarch

[root@localhost ~]# rpm -ql ansible | more
/etc/ansible/ansible.cfg #主配置文件
/etc/ansible/hosts #主机清单
/etc/ansible/roles #角色目录
ansible相关命令
/usr/bin/ansible #临时命令执行工具
/usr/bin/ansible-doc #模块功能查看工具
/usr/bin/ansible-playbook #定制自动化的任务编排工具

主配置文件

some basic default values…
#inventory = /etc/ansible/hosts #定义主机列表配置文件
#library = /usr/share/my_modules/ #定义库文件存放位置
#module_utils = /usr/share/my_module_utils/
#remote_tmp = ~/.ansible/tmp #生成的临时py命令文件存放在远程主机的目录
#local_tmp = ~/.ansible/tmp #生成的临时py命令文件存本地执行目录
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml
#forks = 5 #默认的并发数
#poll_interval = 15 #默认的线程池
#sudo_user = root #默认sudo用户
#ask_sudo_pass = True
#ask_pass = True
#transport = smart
#remote_port = 22
#module_lang = C
#module_set_locale = False
#一般情况下主配置文件保持默认即可

主机清单的定义方式—/etc/ansible/hosts

  1. 直接指明主机地址或者主机名
  2. 定义一个主机组,调用的时候直接指定该组即可

基于ssh免密登录

登录方:
1. 生成一对公钥和私钥文件
[root@node1 .ssh]# ssh-keygen -t rsa -P “”
/root/.ssh
2. 将公钥文件发送给被登录方
a)
[root@node1 .ssh]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node2
b)
将公钥文件写入到被登录方的authorized_keys即可
私钥加密-公钥解密
[root@node1 ~]# cd .ssh/
[root@node1 .ssh]# ls
id_rsa id_rsa.pub known_hosts
被登录方:
[root@node2 .ssh]# cat authorized_keys
—-> node1的公钥文件:
image.png

  1. 定义主机清单
  2. 实现ssh免密登录

命令说明

[root@localhost ~]# ansible —help
常用参数说明:
[-a MODULE_ARGS] 指定模块的参数
[-m MODULE_NAME] 指定模块
[-M MODULE_PATH] 指定自定义模块路径位置
-C 检查执行结果
[-e EXTRA_VARS] [—vault-id VAULT_IDS] 指明变量名
[-f FORKS] 指定并发进程数
[-i INVENTORY] 指定主机清单配置文件
[—syntax-check] 检查执行命令是否存放语法错误

命令执行过程

  1. 加载自己的配置文件 默认:/etc/ansible/ansible.cfg
  2. 加载自己对应的模块文件 模块:ping command
  3. 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器
  4. 对应执行用户的家目录的.ansible/tmp/xx.py文件
  5. 给文件+x执行
  6. 执行并将返回结果,删除临时py文件,sleep 0 退出

ansible -m [模块名] -a [模块对应的参数] PATTERN(主机组或主机名)

ansible-doc命令:查看模块的使用功能 -s参数
ping模块:
ansible-doc -s ping
- name: Try to connect to host, verify a usable python and return pong' on s<br /> ping:<br /> data: # Data to return for theping’ return value. If
this parameter is
set to `crash’,
the module will
cause an
exception.

实验

  1. 定义主机清单

image.png

  1. 实现ssh免密登录

ssh-keygen -t rsa -P “”
image.png
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.220.103
image.png
查看登录方生成文件:
image.png

  1. 测试

image.png