ansible自动化运维工具
ansible自动化运维工具一、ansible介绍ansible是一种自动化运维工具,基于paramiko模块开发,用于批量执行任务和发布工作,被广泛用于日常运维工作当中.二、ansible架构架构图:ansible核心模块介绍:Core Models: ansible自带的模块,file,shell,copy等Custom Models: ansible自带模块不足以满足工作需要时,用户添加扩展
ansible自动化运维工具
一、ansible介绍
ansible是一种自动化运维工具,基于paramiko模块开发,用于批量执行任务和发布工作,被广泛用于日常运维工作当中.
二、ansible架构
架构图:

ansible核心模块介绍:
Core Models: ansible自带的模块,file,shell,copy等
Custom Models: ansible自带模块不足以满足工作需要时,用户添加扩展模块
Host inventory: 清单,由ansible 管理的主机,包括主机名,ip,端口等
Playbook: yaml格式文件,多任务定义在一个yaml文件中,主要定义哪些功能由哪些模块完成,顺序执行
Connection plugins: ansible通过该插件连接到各个目标主机,内部默认使用paramiko模块ssh协议来完成
三、ansible特性
被管理端无需安装agnet,只要配置满足条件的python版本,和ssh服务
no server 只需要安装ansible软件,配置完之后,命令行完成工作
可以基于任何语言开发新模块
由于被控端没有安装agent软件,只能通过命令端推送任务
定义的任务已存在则不会做任何事情,意味着在同一台服务器上多次执行同一个playbook和执行一次,效果一样
四、ansible执行任务模式
1.ad-hoc模式
单模块,批量执行单条命令
2.playbook模式
批量执行多个任务,多个任务完成一个大的功能,相当于多个ad-hoc的配置文件
五、ansible工作流程

六、ansible安装流程
安装系统:rehat8.2
过滤本地yum查询有无ansible
[root@chenshunli yum.repos.d]# dnf list all | grep ansible
ansible-freeipa.noarch 0.1.8-3.el8 @AppStream
下载Centos网络源
[root@chenshunli yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
安装epel-release源码包,已安装则重新安装
[root@chenshunli yum.repos.d]# yum install -y epel-release
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
上次元数据过期检查:0:01:49 前,执行于 2021年07月13日 星期二 17时32分33秒。
软件包 epel-release-8-11.el8.noarch 已安装。
依赖关系解决。
无需任何处理。
完毕!
重新安装
[root@chenshunli yum.repos.d]# yum reinstall -y epel-release
再次过滤过滤本地yum查询有无ansible,发现多了很多包
[root@chenshunli yum.repos.d]# yum list all | grep ansible
CentOS Configmanagement SIG - ansible-29 669 kB/s | 1.8 MB 00:02
ansible-freeipa.noarch 0.1.8-3.el8 @AppStream
centos-release-ansible-29.noarch 1-2.el8 @extras
ansible.noarch 2.9.23-1.el8 centos-ansible-29
ansible-doc.noarch 2.9.17-1.el8 centos-ansible-29
ansible-freeipa.noarch 0.3.2-2.el8 AppStream
ansible-test.noarch 2.9.23-1.el8
安装ansible
[root@chenshunli yum.repos.d]# yum -y install ansible
查看ansible版本号
[root@chenshunli ~]# ansible --version
ansible 2.9.23
config file = /etc/ansible/ansible.cfg
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.6/site-packages/ansible
executable location = /usr/bin/ansible
python version = 3.6.8 (default, Dec 5 2019, 15:45:45) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]
七、ansible管理清单文件
静态清单文件
静态清单文件是指定Ansible目标受管主机的文本文件。可以使用多种不同的格式编写此文件,包括INI样式或YAML。
在最简单的形式中。INI样式的静态清单文件是受管主机的主机名或IP地址的列表,每行一个:
alpha.example.org
beta.example.org
192.168.1.100
默认静态清单的位置
/etc/ansible/hosts文件被视为系统的默认静态清单文件。不过,通常的做法是不使用该文件,而是在Ansible配置文件中为清单文件定义一个不同的位置。
验证清单文件
列出单个受管主机的清单
[root@localhost ansible]# ansible 172.16.1.1 --list-hosts
hosts (1):
172.16.1.1
列出组的受管主机清单
[root@localhost ansible]# ansible MOON --list-hosts
hosts (2):
172.16.1.1
172.16.2.2
列出所有受管主机的清单
[root@localhost ansible]# ansible all --list-hosts
hosts (3):
172.16.1.1
172.16.2.2
192.168.1.1
列出不属于任何组的受管主机
[root@localhost ansible]# ansible ungrouped --list-hosts
hosts (2):
172.16.1.1
172.16.2.2
列出属于某组的受管主机
[root@localhost ansible]# ansible moon --list-host
hosts (1):
192.168.1.1
自定义清单文件
修改配置文件,更改默认请问文件
[root@localhost ~]# vim /etc/ansible/ansible.cfg
过滤此行
#inventory = /etc/ansible/hosts
修改后,wq保存退出
inventory = /etc/ansible/inventory
创建inventory文件,并写入受管主机
创建清单文件
[root@localhost ansible]# touch inventory
写入受管主机
[root@localhost ansible]# cat inventory
172.16.1.1
172.16.2.2
[moon]
192.168.2.2
192.168.3.3
验证清单
[root@localhost ansible]# ansible all --list-host
hosts (4):
172.16.1.1
172.16.2.2
192.168.2.2
192.168.3.3
指定清单文件位置验证清单
[root@localhost ansible]# mv inventory /opt/
[root@localhost ansible]# ansible all -i /opt/inventory --list-hosts
hosts (4):
172.16.1.1
172.16.2.2
192.168.2.2
192.168.3.3
八、配置ansible清单文件,连接被控节点
如果不想使用IP地址想使用主机名,可在/etc/hosts中配置域名解析:
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.85.135 node1
192.168.85.136 node2
如果不想手动ssh远程连接到被控节点上,可以如下配置
关闭ssh远程连接询问是否输入yes
[root@localhost ~]# vim /etc/ssh/ssh_config
将
# StrictHostKeyChecking ask
修改为
StrictHostKeyChecking no
配置清单文件
设定用户名/密码
可以看到缺省的情况下SSH: EXEC ssh -C -o会被调用,根据ssh的设定选项,可以不必打通ssh通道,但是实际在执行的时候需要输入用户名和密码,而这两个信息,可以通过如下选项进行设定
| 设定项 | 说明 |
|---|---|
| ansible_ssh_user | 用户名 |
| ansible_ssh_pass | 密码 |
[root@localhost ~]# vim /etc/ansible/inventory
node1 ansible_ssh_user=root ansible_ssh_pass=1
node2 ansible_ssh_user=root ansible_ssh_pass=1
使用临时命令测试是否能ping通
[root@localhost ~]# ansible all -m ping
node2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
node1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
更多推荐




所有评论(0)