- 一、Ansible介绍
- 二、安装Ansible
- 三、Ansible管理方式
- 1、ssh密码认证管理方式
- 2、 免密登入
- 四、Ansible模块
- 1、command
- 2、shell
Ansible 是一个简单,强大且无代理的自动化运维工具,基于Python语言编写,Ansble无需代理,不需要在客户端安装额外的 agent 。
架构:
-
清单(inventory): 受控节点设备的列表。在这个列表中,你可以根据某些标准(如,作用,服务等)将拥有相同属性的计算机组织到一个组中。Ansible 清单,支持静态清单(一旦定义好,除非你修改配置文件,不然不会发生改变。),也支持动态清单(通过脚本从外部源获取清单,该清单可以随着环境的改变而改变。)。
-
Playbook: 需要在被控节点主机上运行的任务列表,从而让他们达到我们预期的状态。Playbook 中包含一个或多个 play,每个 play 会在一组或多组计算机上按顺序执行已经定义好的一系列 task,每个 task 都是一个执行模块。
-
模块(Module): 用于确保主机处于某一个特定的状态,例如可以使用 yum(对于不同发行版本的 Linux,模块名可能有所不同个,如,在 Ubuntu 中与之对应的是 apt 模块。) 模块确保主机已经安装了某个软件,如果主机状态已经是预期的了(已经安装了该软件),那么就不会执行任何操作,执行下一个模块(task)。
-
Plugin 添加到 Ansible 中的代码段,用于扩展 Ansible 平台
环境:
| IP地址 | 主机名 | 介绍 |
|---|---|---|
| 10.10.14.50 | ansible | 管理端 |
| 10.10.14.51 | node1 | 被管理端节点1 |
| 10.10.14.52 | node2 | 被管理端节点2 |
1、安装ansible
# 1、配置时间同步&时区同步 ntpdate ntp1.aliyun.com ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 2、安装ansible yum -y install epel-release.noarch yum -y install ansible # 3、检查ansible是否安装成功! ansible-2.9.25-1.el7.noarch ansible --version三、Ansible管理方式
ansible 批量管理主机方式主要又两种:
- 传统的输入ssh密码验证
- 密钥管理(免密)
# 1、备份原ansible的hosts文件
cp /etc/ansible/hosts{,.bak}
# 2、添加清单(被管理端机器)地址。
tail -3 /etc/ansible/hosts
[node]
10.10.14.51
10.10.14.52
1、ssh密码认证管理方式
# 语法:ansible 主机列表 -m command -a "hostname" -k -u root -m: 指定模块 -a: 指定在被管理端执行的命令 -k: 询问密码 -u: 指定用户 ansible node -m command -a "hostname" -k -uroot
//密码验证方式,如果主机列表中机器密码不一致 会出现下面这种错误。只会返回密码正确机器的信息。
所以密码验证的这种方式并不实用。一般都是实用下面的免密登入方式!
1、修改hosts配置文件实现免密登入。
# 1、可以在/etc/ansible/hosts文件中定义密码,即可实现快速的免密认证! # 参数: ansible_host 主机地址 ansible_port 端口,默认22 ansible_user 认证用户 ansible_ssh_pass 认证用户密码 # 2、修改hosts配置文件如下: tail -3 /etc/ansible/hosts [node] 10.10.14.51 ansible_user=root ansible_ssh_pass=111 10.10.14.52 ansible_user=root ansible_ssh_pass=Qinziteng666. # 3、验证 ansible node -m command -a "hostname" -uroot 10.10.14.51 | CHANGED | rc=0 >> node1 10.10.14.52 | CHANGED | rc=0 >> node2 //可以看到 验证都成功了 但是这种在配置文件中填写主机密码极其不安全!不推荐
2、ssh密钥方式实现免密登入。
[root@ansible ~]# ssh-keygen [root@ansible ~]# for i in 51 52 ;do ssh-copy-id 10.10.14.$i;done # 验证 [root@ansible ~]# ansible node -m command -a "hostname" 10.10.14.52 | CHANGED | rc=0 >> node2 10.10.14.51 | CHANGED | rc=0 >> node1 //这种方式相对还是比较安全的。四、Ansible模块
# 1、查看ansible所有模块 ansible-doc -l # 2、过滤command模块 ansible-doc -l | grep command # 3、查看command模块使用帮助 ansible-doc -s command1、command
作用:在远程节点上执行命令
缺点:
- 使用command模块不支持shell变量 $name 等
- 使用command模块不支持特殊符号> < | ; * 等
参数: chdir : 在执行命令之前,先通过cd到指定的目录 create : 在创建一个文件之前,判断该文件是否存在,如果存在则跳过前面命令,如果不存在则执行前面命令 removes : 和create相反,判断文件是否存在,如果存在则执行前面命令,不存在则跳过命令 free_from : 该参数可以输入任何的系统命令,实现远程管理 warn : 取消告警
command 是 ansible 默认模块 也就是说 不指定模块默认使用的模块是 command 如下:
[root@ansible ~]# ansible node -a "hostname" 10.10.14.52 | CHANGED | rc=0 >> node2 10.10.14.51 | CHANGED | rc=0 >> node1
练习:
# 1、获取所有被管理端的负载信息 [root@ansible ~]# ansible all -m command -a "uptime" 10.10.14.52 | CHANGED | rc=0 >> 05:05:10 up 51 min, 2 users, load average: 0.02, 0.02, 0.03 10.10.14.51 | CHANGED | rc=0 >> 05:05:11 up 51 min, 2 users, load average: 0.00, 0.01, 0.05 # 2、进入被管理端/tmp目录下 输出当前路径 [root@ansible ~]# ansible node -m command -a "pwd chdir=/tmp/" 10.10.14.51 | CHANGED | rc=0 >> /tmp 10.10.14.52 | CHANGED | rc=0 >> /tmp # 3、判断t2目录是否存在 不存在则创建 存在则跳过 [root@ansible ~]# ansible node -m command -a " mkdir /root/t2 create=t2" # 4、盘算t2目录是否存在 存在则执行hostname指令 不存在则跳过 [root@ansible ~]# ansible node -m command -a "hostname removes=/root/t2" 10.10.14.51 | CHANGED | rc=0 >> node1 10.10.14.52 | CHANGED | rc=0 >> node2 # warn参数 取消告警信息 [root@ansible ~]# ansible node -m command -a "chmod 000 /etc/hosts" //正常使用chmod命令会出现报警信息 如下:
//使用warn参数取消告警 [root@ansible ~]# ansible node -m command -a "chmod 000 /etc/hosts warn=False"2、shell



