linux下如何安装ansible、ansible配置文件讲解

Ansible是一款轻量级的自动化运维工具,基于Python开发,通过SSH进行远程管理,无需在受控节点安装代理。它包括连接插件、主机清单、模块等组件,支持批量配置、部署和命令执行。Ansible的优点包括无需客户端、幂等性、支持sudo等。安装完成后,可以通过配置ssh免密登陆简化管理。主机清单文件(hosts)用于定义管理主机,可通过组和变量进行灵活管理。推荐使用免密登陆方式进行连接。
摘要由CSDN通过智能技术生成

前言

版本:CentOS Linux release 7.9.2009 (Core) ansible 2.9.27 python 2.7.5

什么是Ansible

随着Linux的运维的飞速发展,目前市场上出现了很多自动化运维工具,Ansible就是其中一款非常出色的自动化运维工具,ansible是基于Python开发的以及基于SSH远程管理,Ansible集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:

(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务

Ansible自动化运维工具的优点:

(1)、轻量级,更新时只需要在操作机上做一次更新即可;
(2)、采用SSH协议;
(3)、不需要客户端安装agent;
(4)、批量任务执行可以写成脚本;
(5)、只有Python编写,维护更简单;
(6)、支持sudo普通用户命令;
(7)、去中心化;
(8)、具备幂等性(idempotence),所谓幂等性,指的是多次操作或多次执行不影响结果。

ansible常用术语

控制节点(Control node):指安装了Ansible的主机,也叫Ansible服务器端,管理机,主控机,主控端。 Ansible控制节点主要用于发布运行任
务,执行控制命令。Ansible的程序都安装在控制节点上,控制节点需要安装Python和Ansible所需的各种依赖库。
受控节点(Managed nodes):也叫客户机,被控机,被控端,就是Ansible执行任务的目标服务器。
Inventory:主机清单,一个写有被控服务器IP的host文件,清单列表通常保存在一个名为host文件中。在host文件中,可以使用IP地址或者主机名来
表示具体的管理主机和认证信息,并可以根据主机的用户进行分组。默认hosts文件为:/etc/ansible/hosts,在执行ansible命令是还可以通过-i指定
自定义的host文件。
模块(Modules):模块是Ansible执行特定任务的代码块。比如:添加用户,上传文件和对客户机执行ping操作等。Ansible现在默认自带450多个模
块,,Ansible Galaxy公共存储库则包含大约1600个模块。
任务(Task):是Ansible客户机上执行的操作。可以使用ad-hoc单行命令执行一个任务,所谓ad-hoc就是指在窗口直接执行ansible命令。
剧本(Playbook):一种利用yaml标记语言编写的可重复执行的任务的列表文件,playbook实现任务的更便捷的读写和执行。
角色(roles):角色是Ansible 1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks
以及handlers等内容,其实roles就是相当于把剧本解耦了,一个剧本能编写hosts、tasks、handlers等各个步骤,为了让剧本不那么冗余,为了更好
的解耦,把这些步骤单独抽解出来,形成有层次结构分明的组织,这称之为角色。

Linux下安装ansible

安装完的ansible就是一个命令行工具,没有后台服务进程,无需启动任何后台进程。
注意:ansible需要Python2.7及以上版本。

# 1、有外网直接yum安装
yum install epel*
yum install  ansible -y
# 2、没有外网,可以先在有外网的Linux服务器上下载rpm安装包,再传到服务器上安装
# yum下载rpm包到指定目录,只下载不安装
yum install  --downloadonly --downloaddir=/tmp/  ansible

配置受控端免密登陆

ansible是基于ssh协议的,也就是说,ansible执行命令的时候登陆被控主机是需要账号密码进行认证了,为了方便管理,我们一般会做ssh免密登陆,如下所示:

#在ansible服务器上生成密钥对,下面的选项按回车默认即可
ssh-keygen -t rsa
#分发公钥给受控服务器
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.101
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.102
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.103

ansible主配置文件ansible.cfg讲解

yum安装好后的ansible配置文件默认在/etc/ansible/ 下,如下所示:

[root@master ~]# cd /etc/ansible/
[root@master ansible]# ll
-rw-r--r-- 1 root root 19985 Jan 16 05:55 ansible.cfg			#ansible的主配置文件
-rw-r--r-- 1 root root  1016 Jan 16 05:55 hosts					#主机清单文件
drwxr-xr-x 2 root root     6 Jan 16 05:55 roles					#角色目录		
[root@master ansible]# 

[root@master ansible]#  cat ansible.cfg							#下面讲解大部分配置选项的含义
[defaults] 														#默认配置
inventory      = /etc/ansible/hosts								#默认的主机清单文件为/etc/ansible/hosts	
library        = /usr/share/my_modules/							#库文件存放位置
module_utils   = /usr/share/my_module_utils/					#默认模块文件目录
remote_tmp     = ~/.ansible/tmp									#ansible执行时被控主机脚本临时存放目录
local_tmp      = ~/.ansible/tmp									#管理节点脚本临时存放目录 ~/.ansible/tmp
plugin_filters_cfg = /etc/ansible/plugin_filters.yml			#插件的配置文件
forks          = 5												#ansible执行时的并发数,默认为5
poll_interval  = 15												#ansible异步任务查询间隔 15
sudo_user      = root											#ansible sudo用户root
ask_sudo_pass = True											#sudo 时是否要密码
ask_pass      = True											#sudo 时是否要密码
transport      = smart											#ansible远程传输模式 smart
remote_port    = 22												#远程主机SSH端口22
module_lang    = C												#ansible模块运行默认语言环境C
module_set_locale = False										#是否运行在Ansible playbook中使用模块来设置系统语言环境
roles_path    = /etc/ansible/roles								#默认role存放路径
host_key_checking = False										#是否进行主机key检查,默认是检查,建议取消注释,如果你是第一
                                                                #次ssh登陆目标服务器默认会进行登陆检查,输出一大串字符,让你输
                                                                #入yes,当很多目标服务器时此项就会异常麻烦,所以建议取该注释
timeout = 10													#SSH连接超时时间,默认10s
log_path = /var/log/ansible.log									#ansible默认日志记录文件,建议取消该项注释来启用日志记录
remote_user = root												#使用playbooks未指定远程用户则默认是root,使
																#用/usr/bin/ansible命令时默认当前登录的用户
module_name = command											#指定ansible的默认模块

hosts主机清单文件讲解

ansible默认主机清单文件是/etc/ansible/hosts,用于配置远程主机IP。

vim  /etc/ansible/hosts

[db]						#定义一个db组,这个组下有2个服务器,默认做了免密登陆
192.168.118.131
192.168.118.132

[nfs]						#定义一个nfs组,这个组下有2个服务器,默认做了免密登陆
192.168.118.133
192.168.118.134

[backup]					#定义一个backup组,这个组下有2个服务器,默认做了免密登陆
192.168.118.136
192.168.118.137

[master:children]			#定义一个master组,这个master组下面有db、nfs、backup 3个组,使用children关键字,如下
db
nfs
backup
指定连接时使用的用户名和密码的设置3种方式:
1、在上面的例子中,直接写了ip地址,并没有指定用户名和密码,是因为我们在ansible主控端和受控主机之间做了免密登陆,而且直接使用ansible命令时默认远程主机的执行用户就是和当前管理端登录的用户一样
2、当在hosts文件中指定了受控主机的sshd端口则使用该端口,为指定则默认是配置文件里面的remote_port参数配置的端口
3、手动在组中指定连接用户名和密码和ssh端口,如下所示
#定义一个lb组,这个lb组的服务器如果没有做免密登陆,所以需要写上用户名和密码
[lb]
192.168.118.138	ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="admin123"
192.168.118.139 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="admin123"
3、指定组或所有组都使用相同的用户名和密码
[lb]
192.168.118.138	
192.168.118.139 
[lb:vars]						#vars是一个变量,前面lb是组名,表示lb组使用下面这些变量,这样就能实现lb组使用相同的用户名密码
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_pass="admin123"

[all:vars]						#vars是一个变量,all表示全部的组使用下面这些变量,这样就能实现全部的组使用相同的用户名密码
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_pass="admin123"

我们比较推荐使用免密登陆的方式。
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值