Ansible基础入门
1.Ansible基础概述
ansible是一个自动化统一配置管理工具,自动化主要体现在ansible集成了模块及功能组件,可以通过一行命令来完成一系列的操作,进而减少重复性的工作和维护的成本,提高工作效率
2.同类型软件对比
对比 |
puppet |
Ansible |
Saltstack |
开发语言 |
ruby |
python |
python |
远程执行功能 |
没有 |
有、串行 |
有、并行 |
客户端 |
没有 |
没有 |
有 |
架构 |
|
SSH |
C/S、也支持SSH |
3.Ansible的功能
1.远程执行
批量执行远程命令,可以对多台主机进行远程操作
2.配置管理
批量配置软件服务,可以进行自动化方式配置,服务的统一配置管理
3.事件驱动
通过Ansible的模块对服务进行不同的事件驱动:
1.修改配置后重启
2.只修改配置文件,不重启
3.修改配置文件后重新加载
4.远程启停服务管理
...
4.管理公有云
通过API接口的方式管理公有云
5.二次开发
6.任务编排
可以通过playbook的方式来统一管理服务
7.跨平台,跨系统
几乎不受平台和系统的限制
4.Ansible架构

1.连接插件connection plugins连接主机 用来连接被管理端
2.核心模块core modules连接主机实现操作,它依赖于用具体的模块做具体的事情
3.自定义模块custom modules根据自己的需求编写具体的模块
4.插件plugins完成模块功能的补充
5.剧本palybookansible的配置文件将多个任务定义在剧本中,由ansible自动执行
6.清单inventory定义ansible需要操作主机的范围,最重要的是ansible是模块化的,它所有的操作都依赖于模块
5.Ansible执行流程
1.Ansible读取playbook,剧本中会记录对哪些主机执行哪些任务
2.Ansible通过主机清单找到要执行的主机然后调用具体的模块
3.Ansible会通过连接插件连接对应的主机并推送对应的任务列表
4.最后被管理的主机会将Ansible发送过来的任务解析为本地shell命令执行
Ansible安装部署
环境准备
主机名 |
WanIP |
LanIP |
角色 |
m01 |
10.0.0.61 |
172.16.1.61 |
Ansible被控制端 |
web01 |
10.0.0.7 |
172.16.1.7 |
被控端 |
web02 |
10.0.0.8 |
172.16.1.8 |
被控端 |
安装ansible
[root@m01 ~]
--version:ansible版本信息
[root@m01 ~]
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
-v:显示详细信息
-i:主机清单文件路径,默认在/etc/ansible/hosts
-m:使用的模块名称,默认使用command模块
-a:使用的模块参数,模块的具体动作
-k:提示输入ssh密码,不适用基于ssh的密钥认证
-C:模拟执行测试
-T:执行命令的超时
ansible配置文件
1.$ANSBLE_CONFIG
2. ./ansible.cng
3.~/.ansible.cfg
4./etc/ansible/ansible.cfg
[root@m01 ~]
71 host_key_checking = False
111 log_path = /var/log/ansible.log
配置主机清单(Ansible Inventory)
1.使用IP+端口+用户+密码
[root@m01 ~]
[web_group]
10.0.0.7 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'
10.0.0.8 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'
[root@m01 ~]
10.0.0.7 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
10.0.0.8 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
2.主机名+密码
[root@m01 ~]
[web_group]
web0[1:2] ansible_ssh_pass='1
[root@m01 ~]# vim /etc/hosts
10.0.0.7 web01
10.0.0.8 web02
# 检测web_group里的主机是否可以连通
[root@m01 ~]# ansible web_group -m ping
web01 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
web02 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
3.使用变量方式 主机名+密码
[root@m01 ~]
[web_group]
web0[1:2]
[web_group:vars]
ansible_ssh_pass='1'
[root@m01 ~]
10.0.0.7 web01
10.0.0.8 web02
[root@m01 ~]
web02 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
web01 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
4.使用密钥连接
ansible web_group -m ping
10.0.0.7 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
10.0.0.8 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
1.先在管理机上生成密钥对
[root@m01 ~]
2.推送公钥
[root@m01 ~]
[root@m01 ~]
3.修改主机清单
[root@m01 ~]
[web_group]
10.0.0.7
10.0.0.8
[root@m01 ~]
10.0.0.7 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
10.0.0.8 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
5.最终用法
[root@m01 ~]
[web_group]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8
配置主机标签组
1.标签组配置语法
[标签组名字:children]
主机标签名1
主机标签名2
...
[root@m01 ~]
[web_group]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8
[db_group]
db01 ansible_ssh_host=10.0.0.51
db02 ansible_ssh_host=10.0.0.52
[lnmp:children]
db_group
web_group
ansible主机写法
1. 主机清单中的所有主机
[root@m01 ~]
2. 只针对一台主机
[root@m01 ~]
3. 指定某一个标签名中的所有主机
[root@m01 ~]
4. 指定某一个标签组中所有的主机
[root@m01 ~]
Ansible执行任务
ad-hoc语法:
ansible 主机 -m 模块 -a 动作
ad-hoc结果返回颜色
绿色:命令执行成功且结果无变化的颜色
黄色:命令执行成功但返回结果有变化
红色:命令执行失败,报错在msg行
粉色|紫色:Warning,警告,一般无需处理
ansible查看帮助
ansible-doc 模块名
找到帮助信息中的'EXAMPLES'
Ad-hoc常用模块
command模块:该模块通过-a跟上要执行的命令可以直接执行
shell模块:用法基本和command一样,不过其是通过/bin/sh进行执行,所以shell 模块可以执行任何命令,就像在本机执行一样
script模块
使用本机上的脚本控制其它机器上的动作,无需将脚本放在其它机器上
ansible文件管理模块
file模块
file模块动作:
src:指定软链接的源文件
dest:指定软链接的目标文件
path:指定文件路径
owner:指定文件属主
group:指定文件属组
mode:指定文件权限
recurse:递归
state:
touch:创建文件
absent:删除
directory:创建目录
link:软链接
hard:硬链接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!