ansible

ansible功能:

1、远程造作主机功能

2、自动化运维(playbook剧本 yaml)

ansible概念:是基于python开发的配置管理和应用部署工具。在自动化运维中,现在是异军突起

ansible能批量配置、部署、管理上千台主机。类似于xshell,的一键输入的工具,不需要每次切换主机进行操作

只要有一台ansible的固定主机,就可以所有节点的操作

不需要agent,客户端。

只需要一台主机上配置了ansible

ansible是基于模块进行工作,只是提供了一种运行的架构,执行操作和辩证的是ansible的模块来实现的

copy

service

ansible默认是通过ssh的密钥队实现通信(可以改,但是一般不动)

ansible的另一个特点:所有模块都是幂等性

幂等性:指的是多次操作或者多次执行对系统资源的影响是一致的

例:

systemctl stop firewalld ×n次,只要发现要停止的目标服务已经停止了,不会改变任何结果,什么也不做。所以是幂等性

systemctl start firewalld ×n次,每一次的操作都会先停再起,所以不是幂等性

http get 是幂等性

post 多次执行相同的post,可能创建多个相同的资源。所以不是幂等性

ansible的幂等性决定了你可以放心大胆的使用,重复执行某个任务不会对结果产生任何影响(绝大多数情况)

ansible的四大组件:

1、Inventory(大写i) 主机清单(主机组)。定义ansible可以远程操作的服务器

2、模块(13个常用的) 通过模块可以实现远程的配置和操作

3、Plugins 插件

4、Playbook剧本(shell脚本) yaml格式

ansible的优缺点:

优点:

①部署较简单。主要在控制主机部署即可,被控制主机需要有ssh和python2.5以上版本。基本linux都是自带的

②ansible只能控制linux系统,windows不行

③基于模块工作,可以使用任意语言开发模块(二次开发。底层架构)

管理端:192.168.233.10 ansible

被管理端:20

30

备用: 40

10上操作

yum -y install epel-release.noarch

yum -y install ansible

yum -y install tree

root@10 \~\]# ****tree /etc/ansible/**** /etc/ansible/ ├── ansible.cfg ├── hosts └── roles ansible.cfg: ansible的主配置文件,一般无需修改 hosts: 主机组,声明可以被控制的主机 roles: 公共角色目录 配置主机有两种方式 1、直接声明主机的ip地址 2、主机名 (/etc/hosts做映射) ****cd /etc/ansible/**** ****vim hosts**** ![](https://file.jishuzhan.net/article/1738277443715731457/148277acd885a58a93f0aabba5cc87df.webp) 把30下面的##删掉 ****ssh-keygen -t**** ****rsa**** ****sshpass -p**** ****'123' ssh-copy-id root@192.168.233.20**** ****模块1:command模块**** 在远程主机执行linux命令,不支持管道符,重定向输出 ansible 的命令格式: ansible 组名/ip -m 模块名称 -a '参数列表(执行的命令)' ****sshpass -p**** ****'123' ssh-copy-id**** [**++**++root@192.168.233.++**++** **++**++3++**++** **++**++0++**++**](mailto:root@192.168.233.30) ****ansible 192.168.233.30 -m command -a**** ****'**** ****date**** ****'**** ****sshpass -p**** ****'123' ssh-copy-id**** [**++**++root@192.168.233.20++**++**](mailto:root@192.168.233.20) ****ansible 192.168.233.20 -m command -a**** ****'**** ****date**** ****'**** ![](https://file.jishuzhan.net/article/1738277443715731457/f28535c67e30b0a8ef15d55bb0ce1c88.webp) 20上操作 tail -f /var/log/messages ansible 192.168.233.20 -m command a 'date' 指定IP地址,只会目标主机执行 ansible webservers -m command -a 'ls /opt' 指定组,组内所有的声明的主机都会执行 ansible all -m command -a 'ls /opt' 所有声明的主机都会执行 ansible 192.168.233.20 -a 'ls /opt' 不加-m也就是不声明使用的模块,默认就是command模块 ![](https://file.jishuzhan.net/article/1738277443715731457/2f6961c398a6e0af3365ad6518ea1eaf.webp) command常用参数: 1、chdir 在远程主机上运行命令,提前进入目录 2、creates 判断指定的文件是否存在,如果存在,不指定后面的操作 3、removes 判断指定的文件是否存在,如果存在,执行后续的命令 ![](https://file.jishuzhan.net/article/1738277443715731457/b091b27cc6b0d26938112a29203c3799.webp) 模块2:shell模块 shell模块,在远程主机执行命令,相当于调用远程主机的shell禁止,支持管道符和重定向。在Ansible当中,多个引号之间要做隔离 ansible 192.168.233.30 -m shell -a touch /opt/123 \&\& echo 456 \> /opt/123 \&\& s /opt \&\& cat /opt/123' \&\&表示逻辑且,前一个命令成功才会执行后一个命令。 ansible 192.168.233.30 -m shell -a 'touch /opt/123 ; echo 456 \> /opt/123 ; s /opt ; cat /opt/123' ;表示逻辑或,前面都成功与否,后面的命令都会执行。 ![](https://file.jishuzhan.net/article/1738277443715731457/007fb01cd2301fb5c883b5fbcbfcc130.webp) ![](https://file.jishuzhan.net/article/1738277443715731457/893c732ad8d63b16594583520fa93e43.webp) 将192.168.233.20的ens33提取出来: ansible 192.168.233.20 -m shell -a 'echo $(ifconfig ens33 \| awk "NR==2{print $2}")\| cut -d " " -f2' ![](https://file.jishuzhan.net/article/1738277443715731457/57a178a836619abb8f6260964d37eff4.webp) ansible 192.168.233.20 -m shell -a "echo $(ifconfig ens33 \| awk 'NR==2{print $2}')" ![](https://file.jishuzhan.net/article/1738277443715731457/be554c8451d1022321035acec66dda96.webp) \&\&符 ansible 192.168.233.30 -m shell -a 'touch /opt/123 \&\& echo 456 \> /opt/123 \&\& ls /opt \&\& cat /opt/123' ![](https://file.jishuzhan.net/article/1738277443715731457/783bb3bc7410c16f033ecf9c39fc8e9f.webp) ;符 ansible 192.168.233.30 -m shell -a 'touch 456 ; echo "520" \> /opt/456 ; cat /opt/456' ![](https://file.jishuzhan.net/article/1738277443715731457/e64089c879dc6957066dc06bf4faff2b.webp) ansible 192.168.233.20 -m shell -a 'echo -e "#!/bin/bash\\nifconfig" \> /opt/a.sh \&\& sh /opt/a.sh' ![](https://file.jishuzhan.net/article/1738277443715731457/8555e3c84986eb5abf495ed051047a1e.webp) 在脚本中执行用位置变量,实现加法,然后运行脚本 ansible 192.168.233.20 -m shell -a 'echo -e "#!/bin/bash\\na=$((2+3))\\necho \\$a" \> /opt/test1.sh \&\& sh /opt/test1.sh' ![](https://file.jishuzhan.net/article/1738277443715731457/da5ef1d92b831bd97df6df3d222e9375.webp) 模块3:cron模块 远程设置定时任务 两种状态:present表示添加(默认就是添加,可以省略);absent表示移除(整个ansible语法中,都表示移除的意思(删除)) 分 时 日 月 周 分=minute 时=hour 日=day 月=month 周=weekday job:任务计划需要执行的命令或脚本(必须要有) name:计划任务的名称(可以不加) 多个计划任务,如果不给名字都是None,一旦删除None,全部删除,不推荐(最好是指定一个不重复的名称) 模块4:user模块 用户管理模块 常用的参数: name:指定用户名(必须要有) state:present absent system=yes/no 标记用户是否是一个程序用户 uid 用户的唯一标识 group 用户的所在组 create_home=yes/no 替换用户的家目录,不需要替换用户的家目录可以不写 password 创建用户的密码 command 用户的注释信息(可有可无) remove=yes/no 当删除用户时,加上remove=yes,删除用户的家目录,相当于userdel -r。如果不需要删除家目录,可以不写 ansible 192.168.233.20 -m user -a 'name=i system=yes' 在创建用户时,虽然声明了是一个程序用户,但是默认的登录shell如果没有额外的声明,还是默认的/bin/bash,UID会按照程序用户来指定 使用ansible的user模块创建用户时,如果创建普通用户,可以不加system=no,指定shell类型也可以不加,默认就是/bin/bash 如果创建的是程序用户,一定要声明system=yes,声明shell的类型shell=/sbin/nologin 也可以指定uid的方式给用户分配一个uid ![](https://file.jishuzhan.net/article/1738277443715731457/3984d31729d21a63f2d7612d2d214185.webp) 模块5:group模块 用户组的管理模块 gid 设置组的id name 必须要有 ansible不适用交互式的命令 ![](https://file.jishuzhan.net/article/1738277443715731457/89012246595a6be039d64026b919d564.webp) 模块6:ping模块 检测主机的 ![](https://file.jishuzhan.net/article/1738277443715731457/ce1416afbf060644175a131e79c8dba2.webp)

相关推荐
孙克旭_2 天前
day051-ansible循环、判断与jinja2模板
linux·运维·服务器·网络·ansible
leo__5204 天前
自动化运维:使用Ansible简化日常任务
运维·自动化·ansible
风清再凯9 天前
自动化工具ansible,以及playbook剧本
运维·自动化·ansible
IT乌鸦坐飞机9 天前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7
遇见火星22 天前
如何使用Ansible一键部署MinIO集群?
ansible
粥周粥22 天前
ANSIBLE
ansible
码农101号22 天前
Linux中ansible模块补充和playbook讲解
linux·运维·ansible
码农101号22 天前
Linux的Ansible软件基础使用讲解和ssh远程连接
ansible
烟雨书信24 天前
ANSIBLE运维自动化管理端部署
运维·自动化·ansible
碎碎-li24 天前
ANSIBLE(运维自动化)
运维·自动化·ansible