linux ansible安装与常用工具

实验环境

网络环境

底层系统

系统都为:Red Hat Enterprise Linux release 8.0 (Ootpa)

 

Ansible安装

需要用到epel源仓库,先安装epel的rpm安装包,然后验证是否启用epel仓库

[root@ansible ~]# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y
[root@ansible ~]# dnf repolist epel

开始yum安装ansible

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

 

Ansible相关工具

  • ansible                       主程序,临时命令执行工具
  • ansible-doc               查看配置文档,模块功能查看工具
  • ansible-galaxy          下载/上传优秀代码或Roles模块的官网平台
  • ansible-playbook     定制自动化任务,编排剧本工具
  • ansible-vault            文件加密工具
  • ansible-pull              远程执行命令的工具
  • ansible-console       基于Console界面与用户交互的执行工具

ansible

此工具通过ssh协议,实现对远程主机的配置管理、应用部署、任务执行等功能。

ssh工作准备

第一步,添加被控主机

[root@ansible ~]# vi /etc/ansible/hosts
在最底部添加,其中我定义了一个组webserver,并添加了2个节点
[web1]
192.168.26.2
192.168.26.3
[web2]
192.168.26.4
:wq  保存退出

也可以修改主机清单的存放位置;

Inventory 是 Ansible 管理主机信息的配置文件,相当于系统 Hosts 文件的功能,默认存放在 /etc/ansible/hosts。

在 hosts 文件中,通过分组来组织设备,Ansible 通过 Inventory 来定义主机和分组,通过在 ansible 命令中使用选项-i—inventory-file来指定 Inventory。

[root@ansible ~]# ansible -i /etc/ansible/hosts

第二步,因为是通过ssh实现的功能,所以还需要设置免密登录ssh,不然一次一次输入密码十分的麻烦

[root@ansible ~]# ssh-keygen 
[root@ansible ~]# ssh-copy-id 192.168.26.2
[root@ansible ~]# ssh-copy-id 192.168.26.3
[root@ansible ~]# ssh-copy-id 192.168.26.4

如果主机数量过多的话,可以通过编写脚本

#!/bin/bash
ssh-keygen -f /root/.ssh/id_rsa -P ''
NET=192.168.26
export SSHPASS=magedu
for IP in {1..200};do 
    sshpass -e ssh-copy-id NET.IP 
done

正式使用

前面设置完成之后,可以正式开始使用ansible工具了

ansible指令的格式为

ansible <host-pattern> [-m module_name] [-a args]

对应选项说明

  • –version                 #显示版本
  • -m module             #指定模块,默认为command
  • -v                             #详细过程 –vv -vvv更详细
  • –list-hosts            #显示主机列表,可简写 –list
  • -k, –ask-pass       #提示输入ssh连接密码,默认Key验证
  • -C, –check            #检查,并不执行
  • -T, –timeout=TIMEOUT              #执行命令的超时时间,默认10s
  • -u, –user=REMOTE_USER         #执行远程执行的用户
  • -b, –become                                    #代替旧版的sudo 切换
  • –become-user=USERNAME       #指定sudo的runas用户,默认为root
  • -K, –ask-become-pass                  #提示输入sudo时的口令

示例

与所有节点测试网络连通性

[root@ansible ~]# ansible all -m ping

看到了2个节点都为SUCCESS成功,代表连通性没有问题,之后SUCCESS将会一直出现,代表成功的意思

且颜色代表更直观的变化:

  • 绿色:执行成功并且不需要做改变的操作;
  • 黄色:执行成功并且对目标主机做变更;
  • 红色:执行失败;

还需要知道常用的正则表达式中的通配符

*:通配符  代表所有

[root@ansible ~]# ansible "*" -m ping 
[root@ansible ~]# ansible 192.168.26.* -m ping

或关系

[root@ansible ~]# ansible "192.168.26.3:192.168.26.4" -m ping
# 表示测试192.168.26.3或者192.168.26.4节点的连通性,双引号内也可以填入组名

[root@ansible ~]# ansible 'web1:web2' -m ping

逻辑与

[root@ansible ~]# ansible "web1:&web2" –m ping 
# 表示测试在web1组并且在web2组中的主机的连通性

逻辑非

[root@ansible ~]# ansible 'web1:!web2' –m ping 
# 表示测试在web1组,但不在web2组中的主机的连通性

使用示例

[root@ansible ~]# ansible all -m ping -u test -k
#以test用户执行ping存活检测

[root@ansible ~]# ansible all -m ping -u test -k -b
#以test sudo至root执行ping存活检测

[root@ansible ~]# ansible all -m ping -u test -k -b --become-user=mage
#以test sudo至mage用户执行ping存活检测

[root@ansible ~]# ansible all -m command -u test -a 'ls /root' -b --become-user=root -k -K
#以test sudo至root用户执行ls

ansible-doc

此工具用来显示模块帮助,相关格式:

ansible-doc [options] [module...] 
选项说明: 
-l, --list #列出可用模块 
-s, --snippet #显示指定模块的playbook片段

示例

[root@ansible ~]# ansible-doc -l
列出所有模块

[root@ansible ~]# ansible-doc -s ping
查看ping模块的相关用法

ansible-galaxy

此工具会连接 https://galaxy.ansible.com 下载相应的roles

示例

[root@ansible ~]# ansible-galaxy list
#列出所有已安装的galaxy

[root@ansible ~]# ansible-galaxy install test.mysql
[root@ansible ~]# ansible-galaxy install test.redis
#安装galaxy

[root@ansible ~]# ansible-galaxy remove test.redis
#删除galaxy

ansible-playbook

此工具用于执行编写好的 playbook (剧本)任务,yml文件,可以理解为脚本,后续会仔细讲解

示例

ansible-playbook hello.yml 
cat hello.yml 
--- 
#hello world yml file 
- hosts: web1
  remote_user: root 
  tasks: 
    - name: hello world 
      command: /usr/bin/wall hello world

ansible-vault

此工具可以用于加密解密yml文件

格式:

ansible-vault [options]
选项参数:
create     #创建新文件
decrypt    #解密
edit       #编辑加密文件
encrypt    #加密
rekey      #修改口令
view       #查看

示例

[root@ansible ~]# ansible-vault encrypt hello.yml
加密hello.yml剧本

ansible-pull

这和通常使用的push模式工作机理刚好相反,其适用于以下场景:①你有数量巨大的机器需要配置,即使使用高并发线程依旧要花费很多时间;②你要在刚启动的、没有网络连接的主机上运行Anisble。

格式

  • ansible-pull [options] [playbook.yml]
    选项参数:
    -C #分支
    -d #目的地
    -i #主机路径
    -e #添加参数
    -o #只有git仓库发生改变才执行playbook

通过ansible-pull结合Git和crontab一并实现,其原理如下:通过crontab定期拉取指定的Git版本到本地,并以指定模式自动运行预先制订好的指令。

示例

 */20 * * * * root /usr/local/bin/ansible-pull -o -C 2.1.0 -d /srv/www/king-gw/ -i /etc/ansible/hosts -U git:// git.kingifa.com/king-gw-ansiblepull >> /var/log/ansible-pull.log 2>&1

ansible-console

此工具可交互执行命令,支持tab,ansible 2.0+新增

格式:

执行用户@当前操作的主机组 (当前组的主机数量)[f:并发数]$

常用的子命令:

  • 设置并发数: forks n 例如: forks 10
  • 切换组: cd 主机组 例如: cd web
  • 列出当前组主机列表: list
  • 列出所有的内置命令: ?或help

示例

root@all (3)[f:5]$ list
192.168.26.2
192.168.26.3
192.168.26.4
root@all (3)[f:5]$ cd web1
root@web1 (2)[f:5]$ list
192.168.26.2
192.168.26.3
root@web1 (2)[f:5]$ forks 10
root@web1 (2)[f:10]$ cd web2
root@web2 (1)[f:10]$ yum name=httpd state=present
root@web2 (2)[f:5]$ service name=httpd state=started

 

作者: 红烧悠鸽
本文采用 CC BY-NC-SA 4.0 协议
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇