ansible基础

简介

ansible是一个简单的it自动化工具,可以实现批量进行系统配置,软件部署和运行命令等功能。基于python语言实现,由于paramiko和PyYaml两个模块构成。

Ansible与Saltstack最大的区别是Ansible无需在被控主机部署任何客户端代理,默认直接通过SSH通道进行远程命令执行或下发配置

ansible架构图

模块 功能
connection plugins 远程连接插件
hosts 定义管理主机或主机组
modules 包含各个核心模块及自定义模块
Plugin 完成模块功能的补充,如日志插件、邮件插件等
Playbook ansible的任务配置文件,将多个任务定义在剧本中进行管理

安装ansible

默认ansible在epel源中

yum install ansible -y

[root@localhost ~]# ansible --version  #查看ansible版本
ansible 2.2.1.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides

生成文件

可以查看生成的文件

rpm -ql ansible 

由于文件太多可以只看前20行的

程序文件

/etc/ansible #ansible主程序

/usr/bin/ansible-doc #ansible文档查看器

/usr/bin/ansible-galaxy #你可以把他理解成ansible的pip,可以从galaxy.ansible.com下载官方收录的playbooks

/usr/bin/ansible-playbook#playbook就是 用这个跑的

/usr/bin/ansible-pull #支持直接从git下载playbook执行,需要遵循其规定的目录格式。

/usr/bin/ansible-vault # 如果你的配置文件中含有敏感信息,你可能并不希望他能被人看到,vault可以帮你加密/解密这个配置文件

配置文件

/etc/ansible/ansible.cfg #ansible主配置文件

/etc/ansible/hosts # ansible主机列表

ansible配置文件加载顺序:

Ansible配置文件是以ini格式存储配置数据的,在Ansible中,几乎所有的配置项都可以通过Ansible的playbook或环境变量来重新赋值。在运行Ansible命令时,命令将会按照预先设定的顺序查找配置文件,如下所示:

  1. ANSIBLE_CONFIG:首先,Ansible命令会检查环境变量,及这个环境变量将指向的配置文件。
  2. /ansible.cfg:接着ansible会检查当前目录下的./ansible.cfg文件
  3. ~/.ansible.cfg:接着检查当前用户home目录下的.ansible.cfg文件
  4. /etc/ansible/ansible.cfg:最后会检查/etc/ansible/ansible.cfg
    注意:如果你通过发行版的提供的软件包管理工具(yum之类的)或者pip安装的ansible,那么在你的/etc/ansible目录下已经有了ansible.cfg配置文件,如果你是通过GitHub仓库安装的,在你复制的仓库中examples目录下可以找到ansible.cfg,你可以把它拷贝到/etc/ansible目录下。

配置选项

可以使用环境变量的方式来进行配置:
大多数的ansible参数都可以通过使用带有ANSIBLE_开头的环境变量进行配置,参数名称必须都是大写字母。比如:

 export ANSIBLE_SUDO_USER=root 

设置了环境变量之后,ANSIBLE_SUDO_USER就可以在playbook中直接引用。

ansible.cfg配置参数

inventory

这个参数表示资源清单inventory文件的位置,资源清单就是一些Ansible需要连接管理的主机列表。这个参数的配置实例如下:

inventory = /etc/ansible/hosts

library

Ansible的操作动作,无论是本地或远程,都使用一小段代码来执行,这小段代码称为模块,这个library参数就是指向存放Ansible模块的目录。配置实例如下:

library = /usr/share/ansible

Ansible支持多个目录方式,只要用冒号(:)隔开就可以,同时也会检查当前执行playbook位置下的./library目录。

forks

设置默认情况下Ansible最多能有多少个进程同时工作,从Ansible 1.3开始,fork数量默认自动设置为主机数量或者潜在的主机数量,默认设置最多5个进程并行处理。具体需要设置多少个,可以根据控制主机的性能和被管节点的数量来确定,可能是50或100。默认值5是非常保守的值,配置实例如下:

forks = 5

sudo_user

这是设置默认执行命令的用户,也可以在playbook中重新设置这个参数。配置实例如下:

sudo_user = root

remote_port

这是指定连接被管节点的管理端口,默认是22。除非设置了特殊的SSH端口,不然这个参数一般是不需要修改的。配置实例如下:

remote_port = 22

host_key_checking

这是设置是否检查SSH主机的密钥。可以设置为True或False,配置实例如下:

host_key_checking = False

timeout

这是设置SSH连接的超时间隔,单位是秒。配置实例如下:

timeout = 60

log_path

Ansible系统默认是不记录日志的,如果想把Ansible系统的输出记录到日志文件中,需要设置log_path来指定一个存储Ansible日志的文件。配置实例如下:

log_path = /var/log/ansible.log

另外需要注意,执行Ansible的用户需要有写入日志的权限,模块将会调用被管节点的syslog来记录,口令是不会出现在日志中的。

ansible命令参数

ansible <host-pattern> [options]

-m MODULE_NAME, --module-name=MODULE_NAME     要执行的模块,默认为 command  
-a MODULE_ARGS, --args=MODULE_ARGS      模块的参数  
-u REMOTE_USER, --user=REMOTE_USER ssh      连接的用户名,默认用 root,ansible.cfg 中可以配置
-k, --ask-pass      提示输入 ssh 登录密码,当使用密码验证登录的时候用     
-s, --sudo      sudo 运行
-U SUDO_USER, --sudo-user=SUDO_USER     sudo 到哪个用户,默认为 root
-K, --ask-sudo-pass     提示输入 sudo 密码,当不是 NOPASSWD 模式时使用
-B SECONDS, --background=SECONDS       run asynchronously, failing after X seconds(default=N/A)
-P POLL_INTERVAL, --poll=POLL_INTERVAL      set the poll interval if using
-B (default=15)
-C, --check     只是测试一下会改变什么内容,不会真正去执行
-c CONNECTION   连接类型(default=smart)
-f FORKS, --forks=FORKS     fork 多少个进程并发处理,默认 5
-i INVENTORY, --inventory-file=INVENTORY      指定hosts文件路径默认 default =/etc/ansible/hosts
-l SUBSET, --limit=SUBSET       指定一个 pattern,对<host_pattern>已经匹配的主机中再过滤一次
--list-hosts        只打印有哪些主机会执行这个 playbook 文件:不是实际执行该 playbook
-M MODULE_PATH, --module-path=MODULE_PATH       要执行的模块的路径,默认为/usr/share/ansible/
-o, --one-line      压缩输出,摘要输出
--private-key=PRIVATE_KEY_FILE      私钥路径
-T TIMEOUT, --timeout=TIMEOUT   ssh 连接超时时间,默认 10 秒
-t TREE, --tree=TREE            日志输出到该目录,日志文件名会以主机名命名
-v, --verbose   verbose mode (-vvv for more, -vvvv to enable connection debugging)

配置登录

ansible使用ssh登录,所以要在两者之间配置秘钥登录,这样才能开始正常的工作

免密登录

ssh-keygen -t rsa -P ""#生成秘钥/root/.ssh/id_rsa.pub

ssh-copy-id -i ./.ssh/id_rsa.pub root@172.16.254.105 #将公钥传到172.16.254.105上

实现了master与其他节点之间的连接

定义ansible节点

[testgroup]  #服务器组名,统一管理用
172.16.254.103 # 节点地址

执行who查看信息

[root@localhost ~]# ansible testgroup -m command -a 'who' #组
172.16.254.103 | SUCCESS | rc=0 >>
root :0 2017-09-10 13:40 (:0)
root pts/0 2017-09-10 13:41 (:0)
root pts/1 2017-09-19 10:58 (gateway)
root pts/2 2017-09-19 14:48 (172.16.254.105)

[root@localhost ~]# ansible all -m command -a 'who'  #所有
172.16.254.103 | SUCCESS | rc=0 >>
root     :0           2017-09-10 13:40 (:0)
root     pts/0        2017-09-10 13:41 (:0)
root     pts/1        2017-09-19 10:58 (gateway)
root     pts/2        2017-09-19 14:49 (172.16.254.105)

[root@localhost ~]# ansible 172.168.x.x -m command -a 'who' #单个ip的

为更好的规范定义的主机与组变量,我们实际是不会在hosts里直接写的,将定义的主机名与组变量单独剥离出来放到指定的文件中,将采用YAML格式存放,存放位置规定:"/etc/ansible/group_vars/名"和"/etc/ansible/host_vars/主机名"分别存放指定组名或主机名定义的变量,如/etc/ansible/group_vars/mysql.yml

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容