ansible
1.概述
ansible是基于python语言开发,配置管理和部署应用的工具。批量的配置,部署,管理"上千台"主机 (实际一次100台左右),ansible只要在一台主机上就可以对其他主机进行操作。
(1)功能
- 实现远程连接主机
- 批量配置,批量操作,ansible可以对主机进行组划分,也可以把名下所有的主机进行划分,进行批量操作
- 远程自动化运维(脚本--->playbook)
(2)ansible的工作模式
没有固定的客户端,不是C/S
使用模块来进行工作,ansible有很多模块,copy shell... 真正在主机上执行任务的是模块。
(3)ansible的特性
幂等性,计算机中的概念,在幂等操作中,无论执行多少次,结果都是一样的,多次执行相同的操作,不会产生不同的结果。
在ansible中,如果操作符合幂等性,那么不会对目标主机产生额外的副作用。
(4)ansible的组件
-
lnventory 主机清单 主机组
-
modules 模块*
-
plugins 插件
-
playbook 剧本(脚本)*
(5)ansible的优缺点
优点:部署快,只要能上网,或者有源码包,安装部署很简单;基于yaml格式编写的脚本,同一台服务器上多次执行同一个任务没有任何副作用。
缺点:语法要专门学;主机和控制主机必须都是linux,至少有两台服务器,主机和server。
2.安装
#安装ansible (ubuntu系统)
apt -y install ansible #在主机192.168.206.30上安装
#免密登录
ssh-keygen -t rsa
apt -y install sshpass
sshpass -p '1' ssh-copy-id root@192.168.206.50 #-p 登录密码
sshpass -p '1' ssh-copy-id root@192.168.206.55
#配置文件
mkdir /etc/ansible
cd /etc/ansible
vim hosts
[web]
192.168.206.50
[web1]
192.168.206.55
#主机50在web组,主机55在web1组
#如果不想要设置免密登录,可以手动创建ansible.cfgvim ansible.cfg
[defaults]
host_key_checking = False #禁止使用ssh的秘钥检查
inventory=/etc/ansible/hosts #指定主机清单的文件
forks = 20 #同时可以对多少主机进行配置,默认是5,可以提高执行速度
pipelining = True #减少对ssh会话中的操作,提高性能
strategy = free #任务会立即对下一个主机并行执行,不用等待其他主机完成
retry_files_enabled = False #如果任务失败,禁用自动重试的功能
vim hosts
[web]
192.168.206.5[0:9] #表示50,51,52,53...59
[all:vars] #组内所有主机统一用root登录,登录密码为1,端口为22
ansible_user=root
ansible_password=1
ansible_port=22
#如果是centos系统,yum -y install ansible之后在/etc/ansible下有配置文件直接修改即可
vim /etc/ansible/ansible.cfg
#71行取消注释
host_key_checking = False
vim hosts
[web]
192.168.206.5[0:9] #表示50,51,52,53...59
[all:vars] #组内所有主机统一用root登录,登录密码为1,端口为22
ansible_user=root
ansible_password=1
ansible_port=22
3.ansible模块
command模块
就是在目标主机执行命令,不支持管道符,也不能使用重定向。----默认模块
ansible all -m command -a 'chdir=/opt tar -xf nginx-1.22.tar.gz'
ansible 固定开头
all:<组名,ip,all,> 声明操作的对象
-m 指定模块
command 就是模块名
-a 指定参数(指定操作)
'chdir=/opt tar -xf nginx-1.22.tar.gz': 具体要执行的命令
chdir=/opt 声明目标主机的目录
creates 判断指定的文件是否存在,如果存在,不执行后续的操作
removes 判断指定的文件是否存在,如果存在,执行后续的操作
shell模块
是command模块的升级,但是可以使用管道符,可以重定向还可以使用连接符链接多个命令。
可以用 && 或者 ; 连接多条命令
cron模块
分、时、日、月、周
minute/hour/day/month/weekday
-m cron
name 计划任务的名称 不是必须的
job 计划执行的命令
state: present 表示添加,默认就是添加,可以不写
absent 表示移除
user和group
-m user
-m group
name 用户名或者组名 必有参数
state=present/absent 创建/删除
uid 数字
gid 数字
shell 默认就是/bin/bash
create_home yes/no 是否替换用户的家目录
remove=yes/no 删除用户时是否删除家目录
password 创建用户的登录密码
system yes/no 表示用户是否是系统用户
copy模块
dest: 文件复制到目标主机的位置
src: 源文件,主机的文件 --->目标主机
mode: 修改目标文件权限
owner: 文件的所有者
group: 文件的所在组
content: 复制输出的内容到目标主机,使用content就不能使用src
如果复制目录,源文件的路径是目录,目标主机的路径也必须是目录才可以复制
file模块
和copy有相似之处,
mode: 修改目标文件权限
owner: 文件的所有者
group: 文件的所在组
path----> 目标主机的文件路径
state:
link 做软连接 touch 创建 absent 删除
#特殊情况下才会有src
src ----> 指定创建的文件为软连接
hostname和ping
hostname 设置目标主机的主机名
ping 测试目标主机的连通性
yum/apt模块---安装和卸载
ansible web -m apt -a 'name=nginx' #安装
ansible web -m apt -a 'name=nginx state=absent' #删除
ansible web -m shell -a 'apt -y install nignx' #安装用shell模块也可以
service模块
也可以用command或者shell模块---相当于systemctl 对服务的状态进行控制
name=软件名
enabled=true--->开机自启
state:
started/stopped/restarted 开/停/重启
runlevel=40 设定开机自启的运行级别,数字越大,优先级越高
#ubuntu安装软件完毕自启,cnetos要设置开机自启
iptables模块
iptables模块 -- 支持centos和ubuntu
firewalld -- 仅支持centos
script模块
指定本地的脚本,然后脚本中的命令在目标主机执行,结果也是输出到目标主机。
创建完脚本后要赋权
setup 模块
收集节点信息,查看目标主机的配置信息
通过facts组件收集
filter是过滤,不加filter就显示全部