使用Ansible前需要进行ssh密钥认证
Ansible概述
自动化运维:批量管理、批量分发、批量执行
Ansible由python编写
批量管理工具 | 说明 |
Ansible | 无客户端,基于ssh进行管理与维护 |
Saltstack | 需要安装客户端,基于ssh进行管理与维护 |
Terraform | tf批量管理基础设施 |
Ansible管理架构
- Host Inventory(主机清单):被管理主机的ip列表、模块
- ad-hoc模式(点对点模式):命令行批量管理
- playbook模式(剧本模式):将对应操作写入脚本
部署与配置
# 部署ansible yum install -y ansible # 修改配置文件关闭主机Host_key_checking # 修改配置文件开启日志功能 [root@m01 ~]# egrep -vn '^$|#' /etc/ansible/ansible.cfg 10:[defaults] 71:host_key_checking = False 111:log_path = /var/log/ansible.log 327:[inventory] 340:[privilege_escalation] 346:[paramiko_connection] 370:[ssh_connection] 431:[persistent_connection] 445:[accelerate] 460:[selinux] 469:[colors] 485:[diff]
Ans-inventory主机清单
- 主机清单:ansible管理的节点的列表
- ansible默认读取/etc/ansible/hosts文件
主机清单格式
# 主机清单格式 [分类或分组名] # 分类要体现出对应节点的作用 ip地址/主机名/域名 # 对应的主机名需要能解析 #子组的格式 [组名:children] 子组名 子组名 [root@m01 ~]# cat /etc/ansible/hosts [web] 172.16.1.7 [backup] 172.16.1.41 [nfs] 172.16.1.31 [data:children] [nfs] [backup] # 指定用户、密码、端口(不推荐,推荐先进行ssh认证,再进行管理) 172.16.1.7 ansible_user=root ansible_password=root ansible_port=22
Ansible模块
- ansible中的模块类似于Linux中的命令
- Linux命令管理系统
- ansible模块实现批量管理
ansible选项 | 说明 |
-i | 指定主机清单文件 |
-m | 指定模块 |
-a | 指定模块中的选项 |
常见模块介绍
模块分类 | 模块 |
命令和脚本 | command模块:ans默认的模块,执行简单命令,不支持特使符号 |
shell模块:执行命令,支持特殊符号 | |
script模块:分发脚本命令 | |
文件 | file模块:创建目录、文件、软连接 |
copy:远程分发文件,修改权限,所有者,备份 | |
服务 | system模块:服务管理(旧版本的系统使用service模块) |
软件包 | yum源模块:yum_repository |
yum命令 | |
get_url下载软件 | |
系统管理 | mount模块:挂载 |
cron模块:定时任务 | |
用户管理 | group模块:管理用户组 |
user模块:管理用户 | |
调试 | ping模块:检查ansible与其他节点连通性 |
debug模块:用于检查/显示变量 |
命令与脚本类模块
command模块
ans默认的模块,适用于执行简单的命令,不支持特殊符号
# 案例:批量获取所有主机的主机名 ansible all -m command -a 'hostname' ansible all -a 'hostname'
shell模块
执行简单的命令,支持特殊符号
# 案例:批量删除/tm/下面所有的内容 ansible all -m shell -a 'rm -rf /tmp/*' # 案例:批量获取ip地址 ansible all -m shell -a "ip address show |awk -F'[ /]+' 'NR==3{print \$3}'"
script模块
# 案例:批量执行/server/scripts/create_distribute_keys.sh脚本 ansible all -m script -a '/server/scripts/create_distribute_keys.sh'
文件类模块
file模块
批量管理文件、目录、软连接
file模块 | 模块说明 |
path | 目录/文件路径(必须要写) |
src | source,源文件或目录(一般创建软连接时使用) |
state |
状态(模式):具体的操作
|
mode | mode=777 创建并修改问价 |
onwer | onwer=root |
group | group=root |
- 案例:批量创建/yuan/yuanxiaojiang.txt
ansible all -m file -a 'path=/yuan/yuanxiaojiang.txt state=touch state=directory'
- 案例:批量创建/etc/hosts的软连接到/opt下面
ansible all -m file -a 'src=/etc/hosts path=/opt/hosts state=link'
- 案例:批量创建/backup/host/目录,所有者所属组为root,权限为700
ansible all -m file -a 'path=/backup/host/ mode=700 owner=root group=root state=directory
- 案例:批量删除/bakcup/目录及目录下内容
ansible all -m file -a 'state=absent path=/backup'
copy模块
批量分发:管理节点发送文件或压缩包到被管理节点
copy模块 | 模块说明 |
src | source 管理端的文件或目录 |
dest | destination 被管理端的文件或目录 |
backup | backup=yes 覆盖前进行备份,文件内容要求有变化或区别 |
mode | 修改权限 |
owner | 修改为指定的所有者 |
group | 修改为指定的所属组 |
案例:批量分发/etc/hosts文件,文件存在则自动备份
ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts backup=yes'
标签:文件,Ansible,批量,--,state,ansible,集群,模块,root From: https://www.cnblogs.com/yuanxiaojiang/p/18593798