ansible 自动化运维工具

一.ansible简介

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

ansible是基于模块工作的,本身没有批量部署的能力。ansible只是提供一种框架,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块.

二.ansible的特点:

1.部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作,轻量级,没有agent,更新时,只需在操作机上进行一次更新即可;

2.默认使用SSH协议对设备进行管理

3.有大量常规运维操作模块,可实现日常绝大部分操作

4.配置简单、功能强大、扩展性强

5.支持API及自定义模块,可通过Python轻松扩展

6.通过Playbooks(剧本)来定制强大的配置、状态管理

7.提供一个功能强大、操作性强的Web管理界面和REST API接口

三.ansible的架构:

ansible 自动化运维工具_第1张图片
ansible的架构

五个组成部分:

1)ansible:核心

2)modules:包括 Ansible 自带的核心模块(core modules)及自定义模块(custom modules)

3)Plugins :完成模块功能的补充,包括连接插件、邮件插件等

4)Playbooks : 剧本;定义 Ansible 多任务配置文件,由Ansible 自动执行

5)host Inventory : 定义 Ansible 管理主机的清单

四.ansible工作流程:

ansible 自动化运维工具_第2张图片
ansible工作流程

简单流程:

1)加载默认的配置文件,默认/etc/ansible/ansible.cfg

2)查找对应的主机配置文件,找到要执行的主机或者组

3)加载自己对应的模块文件,如command

4) 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器端

5)对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件

6)给文件+x执行,执行并返回结果

7)删除临时py文件,sleep 0退出

五.安装ansible

1.需要下载epel源才能安装ansible.

yum install epel-release -y

2.yum install ansible  -y

ansible 自动化运维工具_第3张图片
版本介绍

3.主要配置文件和命令:

/etc/ansible/ansible.cfg      #主配置文件,配置ansible工作特性

/etc/ansible/hosts        #主机清单

/etc/ansible/roles/       #存放角色的目录

/usr/bin/ansible          #主程序,临时命令执行工具

/usr/bin/ansible-doc #查看配置文档,模块功能查看工具

/usr/bin/ansible-galaxy    #下载/上传代码或Roles模块的官网平台

/usr/bin/ansible-playbook   #定制自动化任务,编排剧本工具

/usr/bin/ansible-pull          #远程执行命令的工具

/usr/bin/ansible-vault       #文件加密工具

/usr/bin/ansible-console      #基于Console界面与用户交互的执行工具

3.1.ansible默认配置文件:

[defaults] 默认配置

#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 #本机的临时命令执行目录

#forks = 5 #默认并发数 

#poll_interval = 15 #时间间隔

#sudo_user = root #默认sudo用户

#ask_sudo_pass = True #每次执行ansible命令是否询问sudo用户密码

#ask_pass = True #每次执行ansible命令是否询问ssh密码

#transport = smart #传输方式

#remote_port = 22 #远程端口号

#module_lang = C

#module_set_locale = False

host_key_checking = False  #检查对应服务器的host_key,建议取消注释.

log_path=/var/log/ansible.log #记录日志及位置,默认不记录 建议取消注释

4.免秘钥登录被管理的服务器:

操作步骤:ssh免秘钥登录

如果出现ssh链接较慢的现象,这里则需要修改sshd服务的两个参数来解决该问题:

UseDNS no

GSSAPIAuthentication no

5.ansible主要参数详解

ansible  [-f forks] [-m module_name] [-a args]

-v :打印详细模式

-i PATH :指定host文件路径

-f NUM:指定fork开启同步进程的个数,默认是5

-m NAME:指定module模块,默认为command模块

-a MODULE_ARGS:module模块的参数或者命令

-k:输入远程被管理端root的密码,

-sudo:基于sudo执行

-K:提示输入sudo密码与sudo一起使用

-u USERNAME:执行执行用户

-C:测试执行过程,不改变真实内容,相当于预演

-T TIMEOUT:执行命令超时事件,默认为10s

--version:查看Ansible软件的版本信息

ansible-doc -l --------->查看模块列表

ansible-doc  -s 模块名称 --------->查看相关模块参数

6.测试连接被控制服务器:

ansible  -m ping  ip地址

测试连接被控制服务器

7.主机清单中增加被控端主机,需要注意的是,主机清单也支持分组模式,这里将三台主机分为web_ceshi组

主机清单中增加被控端主机

/etc/ansible/host中存在三类主机:未分组的主机,有组的主机(一组属于"webservers"组的主机)和数据库有关("dbservers"组中的数据库服务器集合)

六.模块的使用

1.ping模块的使用:

测试分组服务器进行存活性检测:

ansible 自动化运维工具_第4张图片
分组服务器进行存活性检测

2.command模块:

选项:

1)chdir    # 在执行命令之前,先切换到该目录

ansible 自动化运维工具_第5张图片
改变目录

2)creates  # 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断

存在不创建文件

removes      # 一个文件名,这个文件不存在,则该命令不执行,与creates相反的判断

不存在不执行

3.shell模块: -a 的参数就是shell命令

ansible 自动化运维工具_第6张图片
shell模块

4.copy模块

报错:Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!

解决方法(被控制端操作):

yum install libselinux-python -y  

关闭selinux

1)指定文件复制

ansible 自动化运维工具_第7张图片
文件复制

2)指定内容复制:

ansible 自动化运维工具_第8张图片
指定文件复制

5.file模块

1)创建目录: 

-a 'path=目录位置 state=directory group=属组 ower=属主  mode=权限'

2)创建链接:

-a 'path=链接文件位置  src=源文件位置 state=link '

-a ' src=源文件位置  dest=链接文件位置 state=hard '   ------>硬链接

3)删除文件:

-a 'path=文件位置  state=absent'

6.fetch

1)拉取远程主机文件到本地:

ansible 自动化运维工具_第9张图片
拉取文件

7.cron计划任务模块:

参数:

1)action:

cron backup=  #如果设置,创建一个crontab备份 【yes|no】

cron_file=    #如果指定, 使用这个文件cron.d,而不是单个用户

2)crontab

  day=    #日应该运行的工作(1-31, *, */2, )

  hour=  # 小时 (0-23, *, */2, )

  minute=    #分钟(0-59, *, */2, )

  month=    #月(1-12, *, /2, )

  weekday  # 周 ( 0-6forSunday-Saturday,, )

  job=      #指明运行的命令是什么

  name=  #定时任务描述

  reboot    # 任务在重启时运行,不建议使用,建议使用special_time

  special_time  #特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)

  state  #指定状态,present表示添加定时任务,也是默认设置,absent表示删除定时任务

  user    #以哪个用户的身份执行

实例:

ansible web-ceshi  -m cron -a "name='Clear the iptable' minute=*/5  job='/sbin/iptables  -F' state=absent"

ansible web-ceshi  -m cron -a 'name="list df every hour" special_time=hourly job="/bin/df -lh >> /app/disk_total &> /dev/null"

ansible web-ceshi  -m cron -a "name='Clear the iptable' minute=*/5 job='/sbin/iptables -F'  "

8.yum模块:

实例1:ansible web-ceshi  -m yum -a "name=/app/zabbix-release-3.4-2.el7.noarch.rpm state=present disable_gpg_check=yes"

参数:

name:#所安装的包的名称

state= #present安装, latest安装最新的, absent 卸载软件。

disable_gpg_check #是否禁止GPG checking,只用于`present‘ or `latest’。

9.user模块,group模块:

创建用户along01,uid=1111,组为along,家目录在/app/along01 下

ansible web-ceshi  -m user -a 'name=along01 comment="along01 is along" uid=1111 group=along shell=/bin/bash home=/app/along01'

ansible web-ceshi  -m shell -a "cat /etc/passwd |grep along01" 查看

ansible web-ceshi -m user -a "name=along01 state=absent" 删除用户

ansible web-ceshi  -m group  -a 'name=along state=present'

10.远端执行脚本:

 ansible  -m script  web-ceshi  -a '脚本名称' 

11.setup模块

ansible 自动化运维工具_第10张图片
查询全部信息

1)ansible all -m setup --tree /tmp/facts 

将所有主机的信息输入到监控端的/tmp/facts目录下,每台主机的信息输入到主机名文件中

2)查看部分详细信息:

ansible 自动化运维工具_第11张图片
过滤信息

你可能感兴趣的:(ansible 自动化运维工具)