Ansible:
远程操作主机功能:
自动化运维(playbook剧本YAML)
是基于Python开发的配置管理应用部署攻具,在自动化运维当中,现在是异军突起
Ansible能批量配置,部署,管理上千台主机,类似于xshe的一键输入工具,不需要每次都切换主机进行操作,只要一台ansible的固定主机,就可以所有节点操作
不需要agent,客户端
主需要一台主机上配置了ansible
是基于模块进行工作,只是提拱了一种运行的架构,执行操作和辩证的是ansible的模块来实现的
Copy
Service
Ansible默认是通过ssh的密钥队来实现通信的(可以改)
Ansible的另一个特点,
所有模块都是幂等性。
所谓幂等性,指的是多次操作多次执行对系统资源的影响是一致的。
例如:
Systemctl stop fierwalld 只要发现停止的目标服务已经停止了,后续同样的操作,不会改变任何结果,什么也不做
Systemctl restart firewallld 每一次操作都会先停止再起动
HTTP get 也是幂等性
Post:多次执行相同的post可能创建多个相同的资源,所以不具有幂等性
Ansible的幂等性,决定了你可以放心大胆的使用,重复执行某个任务,不会对结果产生仍和影响(绝大多数情况)
Ansible的四大组件:
- lnventory主机清单(主机组)定义ansible可以远程操作的服务器
- 模块ansible常用的模块有13个,通过这些模块可以实现远程的配置和操作
- Plugins插件
- Playbook剧本(shell脚本)YAML格式
Ansible的优缺点:
部署较为简单,只要在控制主机部署即可,被控制主机需要有ssh和pyhon2.5以上版本,基本上Linux都是自带的
Ansible只能控制liunx系统,windows不行
基于模块工作,可以使用任意语言开发模块(二次开发,底层架构)
环境:
管理端:20.0.0.51 ansible
被管理端:20.0.0.52 20.0.0.53
备用:20.0.0.54
管理端安装ansible
yum -y install epel-release
yum -y install ansible
安装tree,查看目录文件
tree /etc/ansible
Ansible.cfg:ansible的主配置文件,一般无需修改
Hosts:主机组,声明可以被控制的主机
Roles:公共角色目录
配置主机有两种方式:
- 直接声明主机的IP地址
- 主机名(/etc/hosts映射)
添加两个不同的主机
管理端配置密钥队
//配置密钥对验证
ssh-keygen -t rsa #一路回车,使用免密登录
sshpass -p '123' ssh-copy-id root@20.0.0.52
sshpass -p '123' ssh-copy-id root@20.0.0.53
分别传给20 30,在此重新配置密钥队,让其真正的生效
Ansible的命令格式:
Ansible组名/ip -m 模块名称 -a “参数列表”(执行的命令,单引号双引号都可以)
指定IP地址,只会目标主机执行
指定组,组内所有的声明的主机都会执行
所有声明的主机都会执行
不加-m也就是不声明使用的模块,默认就是command模块
Command的常用参数:
Chdir:在远程主机上运行命令,提前进入目录
Creates:判断指定的文件是否存在,如果存在,不执行后面的操作
Remove:判断指定的文件是否存在,如果存在,执行后面的操作
模块一:
Command模块,在远程主机执行Linux的命令,不支持管道符,重定向输出
远程执行命令
被管理主机查看日志,查看操作记录
主机名也可以用
模块二:
shell模块,在远程主机执行命令,相当于远程主机
需要交互的命令,ansible都不太行
例题:
切出IP地址
在ansible当中,多个引号之间要做隔离,
怎么把多个shell命令写一块,多个命令之间可以用&&连接在一起
&&表示逻辑且,前一个命令成功,才会执行下一个命令
写一个需求
定义一个需求:
;表示逻辑或,前一个命令成功与否,后面的命令都会执行
模块三:
cron模块
远程给主机设置定时任务
两种状态:present表示添加(默认就是添加,可以省略)
Absent:表示移除,#absent在整个ansible的语法当中都表示移除的意思(删除)
分 时 日 月 周
分=minute
时=hour
日=day
月=month
周=weekday
Job:任务执行的命令
Name:任务计划的名称
演示一个定时任务,每五分钟执行一次
写一个需求
删除定时任务:
如果是none,就直接等于none删除
如果有多个none,他就会删除多个none,多计划任务,如果不给名字,一旦删除none,全部删除,不推荐,最好是指定一个不重复的名称
模块四:
USER模块,用户管理模块
常用的参数:
Name:指定用户名,必须要有
State present absent 创建用户可以不加present,但是删用户一定要加absent
System=yes |no,标记用户是否是一个程序用户
Uid:用户的唯一标识
Group:用户的所在组
Create_home=yes|no,替换用户的家目录,不需要替换用户的家目录可以不写
Password:给用户创建密码
Command:用户的注释信息(可有可无)
Remove=yes|no 当删除用户时,加上remove=yes,删除用户的家目录,userdel -r,如果不需要删除家目录,可以不写
例:
在创建用户时,虽然声明了是一个程序用户,但是默认登录shell如果没有额外的声明,还是默认的/bin/bash.UID会按照程序用户来指定,程序用户没有家目录
那我们该怎么声明
使用ansible的USER模块创建用户时,如果创建普通用户可以不加system=no,指定shell类型也可以不加,默认就是/bin/bash
如果创建的是程序用户,一定声明system=yes,声明shell的类型,shell=/sbin/nologin
也可以指定uid的方式,给用户分配一个uid
举几个实例:
Create_home=yes|no,替换用户的家目录,不需要替换用户的家目录可以不写
如何删除用户:
模块五:
Group模块:用户组的管理模块
Name必须要有
Gid:设置组的ID
如何创建用户的时候添加组
Ansible不适合使用交互命令
如何删除组
要先删组用户,再删除用户
演示
模块六:
Ping模块