absible原理及基础应用

一、ansible的作用及工作结构

1、ansible简介:
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务

2、ansible的总体架构:连接其他主机默认使用ssh协议

由上面的图可以看到 Ansible 的组成由 5 个部分组成:

Ansible: 核心
Modules: 包括 Ansible 自带的核心模块及自定义模块
Plugins: 完成模块功能的补充,包括连接插件、邮件插件等
Playbooks: 剧本(编排好一步一步的执行);定义 Ansible 多任务配置文件,有 Ansible 自动执行
Inventory: 定义 Ansible 管理主机的清单

二、ansible的安装以及常用的模块使用

1、ansible无服务器端,使用时直接运行命令即可,同时不需要在被管控主机上安装任何客户端,因此ansible是一个十分轻量级的工具,可以再epel源进行安装。

配置好epel源直接安装yum安装ansible

[root@centos7 ~]#yum -y install ansible

查看生成的主要文件:

[root@centos7 ~]#rpm -ql ansible
/etc/ansible
/etc/ansible/ansible.cfg   #配置文件
/etc/ansible/hosts   #主机库(host inventory)
/usr/bin/ansible   #主程序
/usr/bin/ansible-doc   #文档
/usr/bin/ansible-playbook   #剧本
......

2、ansible命令的使用方法
语法:

ansible <host-pattern> [-f forks] [-m module_name] [-a args]
    
    host-pattern:host inventory文件的一个组名,可以为all
    -f forks:并行处理的个数,默认为5
    -m module_name:模块名,默认为command
    -a args:参数
ansible-doc:
    -l:查看模块列表
    -s:查看相关模块参数

Ansible默认安装好后有一个配置文件/etc/ansible/ansible.cfg,改配置文件中定义了ansible的主机的默认配置部分,如默认是否需要输入密码、是否开启sudo认证、action_plugins插件的位置、hosts主机组的位置、是否需要开启log功能、默认端口、key文件位置等。

[defaults]
    # some basic default values...
    hostfile       = /etc/ansible/hosts   \\指定默认hosts配置的位置
    # library_path = /usr/share/my_modules/
    remote_tmp     = $HOME/.ansible/tmp
    pattern        = *
    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
    gathering = implicit
    host_key_checking = False    \\关闭第一次使用ansible连接客户端是输入命令提示
    log_path    = /var/log/ansible.log \\需要时可以自行添加。chown -R root:root ansible.log
    system_warnings = False    \\关闭运行ansible时系统的提示信息,一般为提示升级
    # set plugin path directories here, separate with colons
    action_plugins     = /usr/share/ansible_plugins/action_plugins
    callback_plugins   = /usr/share/ansible_plugins/callback_plugins
    connection_plugins = /usr/share/ansible_plugins/connection_plugins
    lookup_plugins     = /usr/share/ansible_plugins/lookup_plugins
    vars_plugins       = /usr/share/ansible_plugins/vars_plugins
    filter_plugins     = /usr/share/ansible_plugins/filter_plugins
    fact_caching = memory
    [accelerate]
    accelerate_port = 5099
    accelerate_timeout = 30
    accelerate_connect_timeout = 5.0
    # The daemon timeout is measured in minutes. This time is measured
    # from the last activity to the accelerate daemon.
    accelerate_daemon_timeout = 30

下面对一些常用的模块进行演示说明:
首先准备测试环境:四台主机,一台作为ansible的控制主机,另外三台作为被管理的机器节点

1、ansible的连接:
通过前面的介绍我们知道,ansible是基于ssh协议来进行数据传输,ssh连接一般由两种方法,一种是使用密码密钥,一种是使用公私密码免密码登陆,为了顺利使用ansible,下面配置基于公私密码免密码登录

(1)生成密钥对

[root@centos7 ~]#ssh-keygen -t rsa
\\-t表示使用的加密类型,其中rsa1表示version1版本,rsa、dsa、ecdsa的加密是对于version2版本

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):   \\这里询问你要把生成的密钥文件保存在哪里,默认是在家目录下的.ssh文件夹中,回车保存默认目录

Enter passphrase (empty for no passphrase):
\\ 这里是对密钥文件加密,不输入则表示不加密
 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
e3:39:0e:4b:f0:a1:4f:23:aa:f2:d2:5f:d6:90:8e:af root@centos7.3.zj.com
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|       .         |
|    . + S        |
|     * = o       |
| .  + X =        |
|o .. O = .       |
|o+o.E.+ .        |
+-----------------+

(2)查看已经成功生成了一对密钥

[root@centos7 ~]#ls /root/.ssh
id_rsa  id_rsa.pub  known_hosts
\\其中id_rsa为私钥,id_rsa.pub为公钥

(3)在生成完密钥对之后将公钥上传给服务器对应用户的家目录

[root@centos7 ~]#ssh-copy-id -i .ssh/id_rsa.pub root@172.16.252.190

[root@centos7 ~]#ssh-copy-id -i .ssh/id_rsa.pub root@172.16.252.192

[root@centos7 ~]#ssh-copy-id -i .ssh/id_rsa.pub root@172.16.250.129

已经配置好无需密码登录了,下面进行ansible的配置

2、配置ansible需要控制的主机列表,其配置在/etc/ansible/hosts文件中

[test表示控制的组可以根据实际进行定义,下面添加主机列表]

3、命令模块

这也是默认的模块,也就是不加-m指定模块时默认的模块,这个模块不能使用包含管道的命令。

[root@centos7 ~]#ansible-doc -s command

演示:

[root@centos7 ~]#ansible test -a 'date'

4、shell模块

shell模块也是可以执行命令,与command模块不同的是,command模块不能执行包含管道的模块,而shell可以

[root@centos7 ~]#ansible-doc -s shell

演示:

[root@centos7 ~]#ansible test -m shell -a 'echo 111 > /tmp/test.txt'
172.16.250.129 | SUCCESS | rc=0 >>


172.16.252.190 | SUCCESS | rc=0 >>


172.16.252.192 | SUCCESS | rc=0 >>

客户端查看已经生成文件

[root@centos7 ~]#cat /tmp/test.txt 
111

5、copy模块:可以把本机的文件拷贝至被管理的机器,通常用于分发配置文件

[root@centos7 ~]#ansible-doc -s copy

演示:

[root@centos7 ~]#ansible test -m copy -a 'src=/etc/issue dest=/tmp/issue.txt mode=600'

查看测试成功

[root@centos7 ~]#ansible test -a 'ls /tmp/issue.txt'

6、cron模块:分发定期任务

[root@centos7 ~]#ansible-doc -s cron

演示:每5分钟同步ntp服务器

[root@centos7 ansible]#ansible test -m cron -a 'name="test" minute=*/5 hour=* day=*  month=* weekday=* job="usr/sbin/ntpdate 172.16.0.1"'

7、yum模块:顾名思义,该模块可以管理软件的安装和卸载,state=present(安装) absent(卸载)

[root@centos7 ~]#ansible-doc -s yum

演示:

[root@centos7 ~]#ansible test -m yum -a 'name=tree state=present'

测试安装是否成功

[root@centos7 ~]#ansible test -a 'rpm -q httpd'

8、service模块
state=started/stopped/restarted

[root@centos7 ~]#ansible-doc -s service

演示:

现在的httpd服务是停止的,我们重启一下

[root@centos7 ~]#ansible test -m service -a 'name=httpd state=started '

查看已经启动成功

[root@centos7 ~]#ansible test -m shell -a 'ss -tnl|grep 80'

三、ansible的playbook使用

由上面的演示我们体会到了ansible的强大,但是上面的演示都是一条一条指令的输入,这样未免影响了效率,这里可以使用playbook剧本像shell脚本一样一次执行多条语句

1:playbook组织格式:YAML语言格式

playbook是ansible更强大的配置管理组件,实现基于文本文件编排执行的多个任务,且多次重复执行

(1)YAML简介

  • YAML:YAML Ain‘t Markup Language; Yet Another Markup Language;
  • 类似于半结构化数据,声明配置;可读性较高的用来表达资料序列的格式,易于与脚本语言交互
  • 官方站点:http://www.yaml.org
    (2)语法格式
  • 任何数据结构都用缩进来标识,可以嵌套
  • 每一行是一个键值数据key:value,冒号隔开。若想在一行标识需要用{ } 和,分隔格式
  • 列表用-标识
    (3)playbook组成结构
  • Tasks:任务,即调用模块完成的操作
  • Variables:变量
  • Templates:模板
  • Handlers:处理器,由某个条件触发执行的操作
  • Roles:角色
    基本结构:
- host:webservices
 remote_user:
   - tasks:
   - task1
   module_name

YAML文件扩展名通常为.yaml,如test.yaml

2、playbook的使用:
前面已经介绍了playbook的存储在*.yaml文件中,我们创建一个yaml文件验证一下

[root@centos7 ansible]#cat /etc/ansible/test.yaml
- hosts: test
  remote_user: root
  tasks:
  - name: user a group
    group: gid=1111 name=test system=no
  - name: show command
    shell: date

正式使用时我们最好先运行下看有没有错误

[root@centos7 ansible]#ansible-playbook --check test.yaml

没有问题就可以正式运行命令脚本了

[root@centos7 ansible]#ansible-playbook test.yaml 

检查测试成功

[root@centos7 ansible]#ansible test -a 'tail -1 /etc/group'

3、playbook变量
(1)变量命名:字母、数字和下划线组成,仅能以字母开头;
(2)变量种类:

  • facts:由远程主机发回主机特有的属性信息,这些信息被保存在ansible变量中;无需声明,可直接调用
  • 自定义变量:
  • 通过命令行传递:ansible-playbook test.yaml -extra-vars "host=www user=test"
  • 通过roles传递
  • 主机变量:定义在inventory中的主机之后的变量;直接传递给单个主机的变量
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容