一、概述

Ansible是新出现的自动化运维东西,根据Python开发,调集了众多运维东西(puppet、cfengine、chef、func、fabric)的长处,完结了批量系统装备、批量程序布置、批量运转指令等功用。

Ansible 特色:

  • 布置简略,只需求在主控端布置Ansible环境,被控端无需作任何操作
  • 默许运用SSH协议对设备进行办理
  • 主从集中化办理
  • 装备简略、功用强壮、扩展性强
  • 支撑API及自界说模块、能够经过Python轻松扩展
  • 经过Playbooks来定制强壮的装备、状况办理
  • 对云计算渠道、大数据都有很好的支撑

官方文档:docs.ansible.com/ansible/lat… GitHub地址:github.com/ansible/ans…

二、Ansible 架构

Ansible 介绍与实战操作演示

上图为ansible的基本架构,从上图能够了解到其由以下部分组成:

  • 中心:ansible
  • 中心模块(Core Modules):这些都是ansible自带的模块
  • 扩展模块(Custom Modules):假如中心模块不足以完结某种功用,能够添加扩展模块
  • 插件(Plugins):完结模块功用的补充
  • 剧本(Playbooks):ansible的使命装备文件,将多个使命界说在剧本中,由ansible自动履行
  • 衔接插件(Connectior Plugins):ansible根据衔接插件衔接到各个主机上,虽然ansible是运用ssh衔接到各个主机的,但是它还支撑其他的衔接方法,所以需求有衔接插件
  • 主机清单(Host Inventory):界说ansible办理的主机

三、Ansible 工作原理

Ansible 介绍与实战操作演示
从上面的图上能够了解到:

  • 办理端支撑local 、ssh、zeromq 三种方法衔接被办理端,默许运用根据ssh的衔接,这部分对应上面架构图中的衔接模块;

  • 能够按运用类型等方法进行Host Inventory(主机清单)分类,办理节点经过各类模块完结相应的操作,单个模块,单条指令的批量履行,咱们能够称之为ad-hoc;

  • 办理节点能够经过playbooks 完结多个task的调集完结一类功用,如web服务的装置布置、数据库服务器的批量备份等。playbooks咱们能够简略的理解为,系统经过组合多条ad-hoc操作的装备文件 。

四、Ansible 装置与根底装备

yum install epel-release
yum -y install ansible
ansible --version

Ansible 介绍与实战操作演示

1)开启记录日志

装备文件:/etc/ansible/ansible.cfg

# 去掉前面的'#'号
#log_path = /var/log/ansible.log ==> log_path = /var/log/ansible.log

2)去掉第一次衔接ssh ask确认

# 第一种(引荐)
vi /etc/ansible/ansible.cfg  
# 其实便是把#去掉
# host_key_checking = False  ==> host_key_checking = False
# 第二种
vi /etc/ssh/ssh_config
StrictHostKeyChecking ask  ==> StrictHostKeyChecking no

Ansible 介绍与实战操作演示

五、Ansible 的七个指令

装置完ansible后,发现ansible一共为咱们供给了七个指令:ansibleansible-docansible-galaxyansible-lintansible-playbookansible-pullansible-vault。这儿咱们只检查usage部分,详细部分能够经过 “指令 -h” 的方法获取。

1)ansible

ansible是指令中心部分,其首要用于履行ad-hoc指令,即单条指令。默许后面需求跟主机和选项部分,默许不指定模块时,运用的是command模块。不过默许运用的模块是能够在/etc/ansible/ansible.cfg 中进行修正的#module_name = command

ansible 192.168.182.130 -a 'date'

2)ansible-doc

该指令用于检查模块信息,常用参数有两个-l 和 -s

#列出所有已装置的模块ansible-doc  -l
ansible-doc  -l
#检查详细某模块的用法,这儿如检查command模块
ansible-doc  -s command

3)ansible-playbook

ansible-playbook 指令是运用最多的指令,其经过读取playbook 文件后,履行相应的动作,这个后面会做为一个要点来讲。

4)ansible-galaxy

ansible-galaxy 指令用于便利的从galaxy.ansible.com/ 站点下载第三方扩展模块,咱们能够形象的理解其类似于centos下的yum、python下的pip或easy_install 。如下示例:

ansible-galaxy install aeriscloud.docker

5)ansible-lint

ansible-lint是对playbook的语法进行检查的一个东西。用法如下:

ansible-lint playbook.yml

6)ansible-pull

该指令运用需求谈到ansible的另一种形式,pull 形式,这和咱们往常经常用的push形式刚好相反,其适用于以下场景:你有数量巨大的机器需求装备,即便运用十分高的线程还是要花费很多时间;你要在一个没有网络衔接的机器上运转Anisble,比方在启动之后装置。

7)ansible-vault

  • ansible-vault 首要运用于装备文件中含有灵敏信息,又不期望他能被人看到,vault能够帮你加密/解密这个装备文件,属高级用法。
  • 首要关于playbooks里比方涉及到装备暗码或其他变量时,能够经过该指令加密,这样咱们经过cat看到的会是一个暗码串类的文件,修正的时候需求输入事先设定的暗码才干翻开。
  • 这种playbook文件在履行时,需求加上 --ask-vault-pass参数,相同需求输入暗码后才干正常履行。

六、Ansible 首要组成部分

1)ansible 指令履行来历

  • USER,普通用户,即system administrator
  • USER -> ansile playbook -> ansible
  • CMDB,(装备办理数据库)API调用
  • PUBLIC / PRIVATE CLOUD API调用

2)ansible 办理方法

  • Ad-Hoc,即ansible指令,首要用于临时指令运用场景
  • Ansible-playbook,首要用于长时间规划好的,大型项目的场景,需求有条件的规划 ansible-playbook(剧本)履行过程:
    • 将已有编排好的使命集写入ansible-playbook
    • 经过ansible-playbook指令分拆使命集至逐条ansible指令,按预订规则逐条履行

3)ansible首要操作方针

注意事项:

  • 履行ansible的主机一般称为主控端,中控,master或堡垒机
  • 主控端python版别需求在2.6或以上
  • 被控端python版别小于2.4需求装置python-simplejson
  • 被控端如开启SELinux需求装置libselinux-python
  • windows不能作为主控端

七、Ansible 衔接被控端方法

1)ssh 密钥

# 生成秘钥
ssh-keygen
# 将秘钥拷贝到被办理服务器上
ssh-copy-id  -i ~/.ssh/id_rsa.pub -p 22 root@192.168.182.130

2)账号暗码

1、指令行装备

# -k:交互式
ansible -uroot -k 192.168.182.130 -m ping

2、装备文件中装备

# 默许主机装备文件:/etc/ansible/hosts
192.168.182.130 ansible_ssh_user=root ansible_ssh_pass=123456
[web]
192.168.182.130 ansible_ssh_user=root ansible_ssh_pass=123456

常用的装备参数如下:

Ansible 介绍与实战操作演示

八、Host Inventory(主机清单)

主机清单装备(默许装备文件:/etc/ansible/hosts

1)添加被管控节点

192.168.182.110

示例:

# -m:指定模块
# -a:指定参数
ansible 192.168.182.110 -m ping
ansible 192.168.182.110 -m shell -a "df -h"

Ansible 介绍与实战操作演示

2)装备主机组

# 界说webservers组
[webservers]
192.168.182.110
192.168.182.112

示例:

# -m:指定模块
# -a:指定参数
ansible webservers -m ping
ansible webservers -m shell -a "df -h"

Ansible 介绍与实战操作演示

3)装备衔接用户名和暗码

[webservers]
192.168.182.130 ansible_ssh_user=root ansible_ssh_pass=123456

常用装备参数如下:

Ansible 介绍与实战操作演示
示例:

ansible 192.168.182.130 -m ping

Ansible 介绍与实战操作演示

4)子分组

[web]
192.168.182.130
192.168.182.110
[mysql]
192.168.182.111
# 子分组
[nfs:children]
web
mysql
# 对分组统一界说变量
[nfs:vars]
ansible_ssh_user=root
ansible_ssh_pass=123456
ansible_ssh_port=22

示例:

ansible nfs -m ping
# -o:一行显现
ansible nfs -m ping -o

Ansible 介绍与实战操作演示

5)自界说主机列表文件

cat>hostlist<<EOF
[web]
192.168.182.130
192.168.182.110
[mysql]
192.168.182.111
# 子分组
[nfs:children]
web
mysql
# 对分组统一界说变量
[nfs:vars]
ansible_ssh_user=root
ansible_ssh_pass=123456
ansible_ssh_port=22
EOF

示例:

# -i:指定主机列表文件
ansible -i hostlist nfs -m ping

Ansible 介绍与实战操作演示

九、Ad-Hoc(点对点形式)

官方文档:docs.ansible.com/ansible/lat…

1)简介

ad-hoc 指令是一种能够快速输入的指令,而且不需求保存起来的指令,一般测试调试时用的多,ad-hoc简而言之,便是”临时指令“。

2)常用模块

1、command 模块(默许模块)

默许模块,没有shell强壮,基本上shell模块都能够支撑command模块的功用。

【1】协助

ansible-doc command
# 引荐运用下面这个
ansible-doc command -s

【2】参数解说

  • free_form——有必要参数,指定需求长途履行的指令。需求阐明一点,free_form 参数与其他参数(假如想要运用一个参数,那么则需求为这个参数赋值,也便是name=value形式)并不相同。比方,当咱们想要在长途主机上履行 ls 指令时,咱们并不需求写成”free_form=ls” ,这样写反而是过错的,因为并没有任何参数的名字是 free_form,当咱们想要在长途主机中履行 ls 指令时,直接写成 ls 即可。因为 command 模块的效果是履行指令,所以,任何一个能够在长途主机上履行的指令都能够被称为 free_form。

  • chdir——此参数的效果便是指定一个目录,在履行对应的指令之前,会先进入到 chdir 参数指定的目录中。

  • creates——看到 creates,你可能会从字面上理解这个参数,但是运用这个参数并不会协助咱们创立文件,它的效果是当指定的文件存在时,就不履行对应指令,比方,假如 /testdir/test文件存在,就不履行咱们指定的指令。

  • removes——与 creates 参数的效果正好相反,它的效果是当指定的文件不存在时,就不履行对应指令,比方,假如 /testdir/tests 文件不存在,就不履行咱们指定的指令,此参数并不会协助咱们删去文件。

【3】示例演示

# 上面指令表明在 web 主机上履行 ls 指令,因为运用的是 root 用户,所以默许情况下,ls 出的结果是 web 主机中 root 用户家目录中的文件列表。
ansible web -m command -a "ls"
# chdir 参数表明履行指令之前,会先进入到指定的目录中,所以上面指令表明检查 web 主机上 /testdir 目录中的文件列表,回来显现有2个文件。
ansible web -m command -a "chdir=/testdir ls"
# 下面指令表明 /testdir/testfile1 文件存在于长途主机中,则不履行对应指令。/testdir/testfile3 不存在,才履行”echo test”指令。
ansible web -m command -a "creates=/testdir/testfile1 echo test"
# 下面指令表明 /testdir/testfile3 文件不存在于长途主机中,则不履行对应指令。/testdir/testfile1 存在,才履行”echo test”指令。
ansible web -m command -a "removes=/testdir/testfile1 echo test"

2、shell 模块

shell模块 [履行长途主机的shell/python等脚本]。

【1】检查协助

ansible-doc shell -s

【2】示例演示

# -o:一行显现
# 装置httpd
ansible web -m shell -a 'yum -y install httpd' -o
# 检查时间
ansible web -m shell -a 'uptime' -o

3、script 模块

script模块 [在长途主机履行主控端的shell/python等脚本 ]。

【1】检查协助

ansible-doc script -s

【2】参数解说

  • free_form——有必要参数,指定需求履行的脚本,脚本坐落 ansible 办理主机本地,并没有详细的一个参数名叫 free_form,详细解说请参阅 command 模块。

  • chdir——此参数的效果便是指定一个长途主机中的目录,在履行对应的脚本之前,会先进入到 chdir 参数指定的目录中。

  • creates——运用此参数指定一个长途主机中的文件,当指定的文件存在时,就不履行对应脚本,可参阅 command 模块中的解说。

  • removes——运用此参数指定一个长途主机中的文件,当指定的文件不存在时,就不履行对应脚本,可参阅 command 模块中的解说。

【3】示例演示

# 下面指令表明 ansible 主机中的 /testdir/testscript.sh 脚本将在 web 主机中履行,履行此脚本之前,会先进入到 web 主机中的 /opt 目录
ansible web -m script -a "chdir=/opt /testdir/testscript.sh"
# 下面指令表明,web主机中的 /testdir/testfile1文件已经存在,ansible 主机中的 /testdir/testscript.sh 脚本将不会在 web 主机中履行。
ansible web -m script -a "creates=/testdir/testfile1 /testdir/testscript.sh"
# 下面指令表明,web 主机中的 /testdir/testfile1 文件存在,ansible 主机中的 /testdir/testscript.sh 脚本则会在 web 主机中履行。
ansible ansible-demo3 -m script -a "removes=/testdir/testfile1 /testdir/testscript.sh"

4、raw 模块

raw模块 [类似于command模块、支撑管道传递]。

【1】检查协助

ansible-doc raw -s

【2】示例演示

ansible web -m raw -a "ifconfig eth0 |sed -n 2p |awk '{print \$2}' |awk -F: '{print \$2}'"

5、copy 模块

copy 模块 从主控端仿制文件到被控端。

【1】检查协助

ansible-doc copy -s

【2】示例演示

# -a,--args:后面接参数
ansible web -m copy -a 'src=/etc/ansible/hosts dest=/tmp/hosts owner=root group=bin mode=777'
# backup=yes/no:文件存在且文件内容不一样是否备份,默许不备份
ansible web -m copy -a 'src=/etc/ansible/hosts dest=/tmp/hosts owner=root group=bin mode=777 backup=yes'

6、fetch 模块

copy 模块从被控端仿制文件到主控端,正好跟copy相反。

【1】检查协助

ansible-doc fetch -s

【2】示例演示

# 跟copy支撑的参数差不多,src:远端主机的目录,dest:主控端目录,其实真正存放的目录在:/tmp/192.168.182.129/tmp/up.sh,会按每台主机分组存放
#  This `must' be a file, not a directory:只支撑单个文件获取
ansible 192.168.182.129 -m fetch -a "src=/etc/fstab dest=/testdir/ansible/"

7、unarchive 模块(解包模块)

unarchive 模块是解包模块。

【1】检查协助

ansible-doc unarchive -s

【2】参数解说

  • copy——默许为yes,当copy=yes,那么拷贝的文件是从ansible主机仿制到长途主机上的,假如设置为copy=no,那么会在长途主机上寻找src源文件。

  • src——源途径,能够是ansible主机上的途径,也能够是长途主机上的途径,假如是长途主机上的途径,则需求设置copy=no。

  • dest——长途主机上的方针途径。

  • mode——设置解压缩后的文件权限。

【3】示例演示

ansible 192.168.182.129 -m unarchive -a 'src=/testdir/ansible/data.tar.gz dest=/tmp/tmp/'

8、archive模块(打包模块)

unarchive 模块是打包模块。

【1】检查协助

ansible-doc archive -s

【2】示例演示

# path:主控端目录,format:压缩格式,dest:被控端目录文件'
ansible 192.168.182.129 -m archive -a 'path=/tmp/ format=gz dest=/tmp/tmp/t.tar.gz'

9、user 模块

【1】检查协助

ansible-doc user -s

【2】示例演示

# 创立用户(present:默许,能够不写)
ansible web -m user -a 'name=test state=present'
# 删去用户(absent)
ansible web -m user -a 'name=test state=absent'
# 修正暗码
# 步骤一、生成加密暗码
echo '777777'|openssl passwd -1 -stdin
# 步骤二、修正隐秘
ansible web -m user -a 'name=test password="$1$Jo5FD9Jr$2QB.BuybbtR35ga4O5o8N."'
# 修正shell
ansible web -m user -a 'name=test shell=/sbin/noglogin append=yes'

10、group 模块

【1】检查协助

ansible-doc group -s

【2】示例演示

# 创立
ansible 192.168.182.129 -m group -a 'name=testgroup system=yes'
# 删去
ansible 192.168.182.129 -m group -a 'name=testgroup state=absent'

11、yum 模块

【1】检查协助

ansible-doc yum -s

【2】示例演示

# 晋级所有包
ansible web -m yum -a 'name="*" state=latest'
# 装置apache
ansible web -m yum -a 'name="httpd" state=latest'

12、service 模块

【1】检查协助

ansible-doc service -s

【2】示例演示

ansible web -m service -a 'name=httpd state=started'
ansible web -m service -a 'name=httpd state=started enabled=yes'
ansible web -m service -a 'name=httpd state=stopped'
ansible web -m service -a 'name=httpd state=restarted'
ansible web -m service -a 'name=httpd state=started enabled=no'

13、file 模块

【1】检查协助

ansible-doc file -s

【2】示例演示

# 创立文件
ansible web -m file -a 'path=/tmp/88.txt mode=777 state=touch'
# 创立目录
ansible web -m file -a 'path=/tmp/99 mode=777 state=directory'
# 删去
ansible web -m file -a 'path=/tmp/99 state=absent'

14、setup 模块

【1】检查协助

ansible-doc setup -s

【2】示例演示

ansible web -m setup
ansible web -m setup -a 'filter=ansible_all_ipv4_addresses'

15、cron 模块

【1】检查协助

ansible-doc cron -s

【2】示例演示

# 创立守时使命
ansible 192.168.182.129 -m cron -a 'minute=* weekday=1,3,5,6,7 job="/usr/bin/wall FBI warning" name=warningcron'
# 封闭守时使命
ansible 192.168.182.129 -m cron -a 'disabled=true job="/usr/bin/wall FBI warning" name=warningcron'
# 删去守时使命
ansible 192.168.182.129 -m cron -a ' job="/usr/bin/wall FBI warning" name=warningcron state=absent'

16、hostname 模块

【1】检查协助

ansible-doc hostname -s

【2】示例演示

ansible 192.168.182.129 -m hostname -a 'name=192.168.182.129'

Ansible 的介绍和简略运用就先到这儿了,还有一个ansible-playbook是十分重要,内容也是比较多,就放到下篇文章介绍了,有疑问的小伙伴欢迎给我留言,后续会持续更新相关技术文章!!!

Ansible 介绍与实战操作演示