ansible

1.ansible:一个批量的自动化部署工具

clip_image001

工作原理:ansible通过hosts文件和免秘钥(配置文件用户名密码端口号)来实现批量管理主机

ansible默认并发量-f:5

Ansible:Ansible的核心程序

Host Lnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载

Playbooks:YAML格式文件,多个任务定义在一个文件中,使用时可以统一调用,“剧本”用来定义那些主机需要调用那些模块来完成的功能.

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

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

Connection Plugins:连接插件,Ansible和Host通信使用

模块:1.yaml #用来编写yaml脚本的语言

2.paramiko #模拟ssh协议连接linux客户端

3.jinja2         #模板语言

2.Ansible优点:

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

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

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

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

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

●提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台 #web界面收费,因此企业中都不用

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

3.ansible安装

yum install epel-release

yum install ansible

4.ansible配置客户端(无密码登录)

服务端:192.168.88.5

客户端:192.168.88.10

192.168.88.12

第一种方法:

1.server: ssh-keygen

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

第二种方法:

第一步:[root@localhost ~]# vim /etc/ansible/hosts

在最后一行编写如下内容:

clip_image002

定义组名:[testhosts]

客户端用户名:ansible_ssh_user=root

客户端密码: ansible_ssh_pass=123456

第二步:[root@localhost ~]# vim /etc/ansible/ansible.cfg

clip_image003

将这行的注释去掉

第三步:测试跟客户端是否联通

[root@localhost ~]# ansible 192.168.88.10 -m ping

clip_image004

clip_image005

ansible all -m ping 查看所有客户端是否连通

ansible testhosts -m ping 查看testhosts组下的所以客户端是否连通

5.ansible常用命令hoc命令行下:

●查看支持的模块: ansible-doc -l

●查看模块用法:ansible-doc -s MODEL_NAME

●ansible命令应用基础

1.ansible <host-pattern> [options]6

-f forks:启动并发线程数

-m model_name:要使用的模块

-a args:特有的参数

设置forks数量:a.export ANSIBLE_FORKS=100在终端运行;

b.在配置文件ansible.cfg里设置forks=100即可;

c.运行命令时增加参数-f 100即可。

补充:线程是最小的调度单位,进程是最小的管理单元,一个进程里面至少1个线程,一个线程或者多个线程可以在一个进程里面

●查看client端是否正常ping通:ansible all -m ping

●查看客户端信息:ansible webserver -m setup

●copy文件到client端:ansible webserver -m copy -a 'src=/root/git_test/code.txt dest=/root/test'

实例:将服务端的liang文件复制到客户端下

[root@localhost ~]# ansible testhosts -m copy -a 'src=/root/liang dest=/root

clip_image006

●创建test用户:ansible webserver -m user -a "name=test state=present"

实例

  • clip_image007

● 删除test用户:ansible webserver -m user -a "name=test state=absent"

●yum安装:ansible webserver -m yum -a ‘name=epel-relese state=latest‘

实例:

[root@localhost ~]# ansible testhosts -m yum -a 'name=unzip state=latest'

clip_image008

●停止httpd服务:ansible webserver -m service -a ‘name=httpd state=stopped enabled=no‘

●运行脚本:ansible webserver -m script -a ‘/tmp/test.sh‘

●运行命令:ansible webserver -m command -a 'date'

实例:

clip_image009

如果命令模块使用的过程中出现告警的解决办法:

[root@localhost ~]# vim /etc/ansible/ansible.cfg

clip_image010

clip_image011

将该行的注释去掉即可。

6.playbook

●tasks

●variables

●templates

●handlers

●roles

yaml介绍(剧本)

  yaml是一个可读性高的用来表达资料序列的格式,yaml参考了其他多种语言,包括:xml,c语言,python,perl以及电子邮件格式RFC2822等,ClarkEvans在2001年在首次发表了这种语言。

●yaml的可读性好

●yaml和脚本语言的交互性好

●yaml使用实现语言的数据类型

●yaml有一个一致的信息模型

●yaml易于实现

●yaml可以基于流程来处理

●yaml表达能力强,扩展性好

创建的yaml的文件格式:.yml/.yaml

执行:ansible-playbook -C copy.yaml -C模拟执行

ansible-playbook copy.yaml

6.1 基础剧本

剧本说明:

- hosts: all 指定主机组,可以理解为这个最大,顶个写

tasks: 指定下面一系列的动作,这个是第二,需要有两个空格

- name: 指定名称,排行第三,需要有三到四个空格

yum: 模块名 排行第四,需要有四到五个空格

handlers:指定处理器(触发器),排行第二,需要与tasks对齐

实例1:

clip_image012

6.2 剧本中使用变量

自定义变量的实现方式

1. 直接写在yaml文件中

2. 在Inventory file中定义

3. 变量的声明:

vars:

- 变量名: 变量值

4. 变量的引用:{{ var }}

5. vars和tasks同级,并要写在tasks前面

实例

clip_image013

clip_image014

6.3 剧本中使用触发器notify

clip_image015

notify触发的条件是当notify上边第一个命令执行成功(copy执行成功),会执行下面相对应的任务(systemctl restart httpd),handlers为触发的任务内容,- name必须和notify下的名字相同。handlers必须在最后。

6.4 剧本中使用迭代

clip_image016

迭代中的变量必须用item,固定格式

clip_image017

clip_image018

出现这个告警,进行如下操作即可

[root@localhost ~]# vim /etc/ansible/ansible.cfg

clip_image019

6.5 剧本中模板templates

clip_image020

将模块换成template,固定格式

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

clip_image021

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

clip_image022

7.roles介绍:提高代码的重用性

什么情况下用到roles

假如我们现在有3个被管理主机,第一个要配置成httpd,第二个要配置成php服务器,第三个要配置成MySQL服务器。我们如何来定义playbook?

第一个play用到第一个主机上,用来构建httpd,第二个play用到第二个主机上,用来构建php,第三个play用到第三个主机上,用来构建MySQL。这些个play定义在playbook中比较麻烦,将来也不利于模块化调用,不利于多次调。比如说后来又加进来一个主机,这个第4个主机既是httpd服务器,又是php服务器,我们只能写第4个play,上面写上安装httpd和php。这样playbook中的代码就重复了。

clip_image023

1)tasks目录 tasks目录用于存放ansible执行的任务,tasks目录下必须存在main.yml文件,main.yml为主函数,用于导入需要执行的任务。

2)handlers 目录 handlers经常和notify搭配使用,当文件、进程及返回状态发生变化时,notify通过handlers做响应的变更。handlers目录下也需要包含main.yml,包含在在main.yml中的handlers将被执行

3)templates及file目录 templates目录及file目录均用于ansible目录文件处理,两个目录下均用于存放传输的文件,但templates目录下存放的是”.j2”格式的文件模板,文件中可以写变量。

4)vars目录 vars目录下用于定义当前roles执行时使用的变量,应当存在main.yml文件。

第一步:创建roles文件

[root@localhost ~]# mkdir -pv playbooks/roles/{webservers,dbservers}/{files,handlers,tasks,vars,templates}

[root@localhost ~]# tree playbooks/

clip_image024

第二步:编辑启动roles文件

[root@localhost playbooks]# vim site.yml #固定格式

clip_image025

roles:写你定义的角色

site.yml这个启动文件下可以添加不同的组(hosts)

第四步:启动

[root@localhost playbooks]# ansible-playbook site.yml

第三步:

编辑tasks下的文件

[root@localhost ~]# vim playbooks/roles/webservers/tasks/main.yml #固定格式

clip_image026

file文件配置:

[root@localhost ~]# vim playbooks/roles/webservers/tasks/main.yml

clip_image027

[root@localhost ~]# cp /etc/httpd/conf/httpd.conf /root/playbooks/roles/webservers/files/ #将要复制的文件复制到files中

[root@localhost playbooks]# ansible-playbook site.yml

handlers

[root@localhost playbooks]# vim roles/webservers/tasks/main.yml

clip_image028

[root@localhost playbooks]# vim roles/webservers/handlers/main.yml

clip_image029

[root@localhost playbooks]# ansible-playbook site.yml

templates

[root@localhost playbooks]# vim roles/webservers/tasks/main.yml

clip_image030

将要操作的文件复制到templats中。

[root@localhost playbooks]# cp roles/webservers/files/httpd.conf roles/webservers/templates/

[root@localhost playbooks]# vim roles/webservers/templates/httpd.conf

clip_image031

[root@localhost playbooks]# vim /etc/ansible/hosts

clip_image032

[root@localhost playbooks]# ansible-playbook site.yml

vars

[root@localhost playbooks]# vim roles/webservers/vars/main.yml

clip_image033

[root@localhost playbooks]# vim roles/webservers/tasks/main.yml

clip_image034

原文地址:https://www.cnblogs.com/liangzb310/p/11026448.html