Ansible自动化运维之介绍安装与简单使用
参考:http://blog.51cto.com/191226139/2066936
Ansible是什么
Ansible 简单的说是一个配置管理系统(configuration management system)。你只需要可以使用 ssh 访问你的服务器或设备就行。它也不同于其他工具,因为它使用推送的方式,而不是像 puppet 等 那样使用拉取安装agent的方式。你可以将代码部署到任意数量的服务器上。
Ansible能做什么
ansible可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作。
比如:同时在100台服务器上安装nginx服务,并在安装后启动它们。
比如:将某个文件一次性拷贝到100台服务器上。
比如:每当有新服务器加入工作环境时,你都要为新服务器部署某个服务,也就是说你需要经常重复的完成相同的工作。 这些场景中我们都可以使用到ansible。
Ansible特性
1 2 3 4 5 6 7 8 9 10 11 12 | 模块化:调用特定的模块,完成特定任务 有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块 支持自定义模块 基于Python语言实现 部署简单,基于python和SSH(默认已安装),agentless 安全,基于OpenSSH 支持playbook编排任务 幂等性:一个任务执行 1 遍和执行n遍效果一样,不因重复执行带来意外情况 无需代理不依赖PKI(无需ssl) 可使用任何编程语言写模块 YAML格式,编排任务,支持丰富的数据结构 较强大的多层解决方案 |
Ansible架构
Ansible工作原理
Ansible主要组成部分功能说明
1 2 3 4 5 6 7 8 9 10 11 12 | PLAYBOOKS: 任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件 INVENTORY: Ansible管理主机的清单 / etc / anaible / hosts MODULES: Ansible执行命令的功能模块,多数为内置的核心模块,也可自定义,ansible - doc –l 可查看模块 PLUGINS: 模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用 API: 供第三方程序调用的应用程序编程接口 ANSIBLE: 组合INVENTORY、 API、 MODULES、PLUGINS的绿框,可以理解为是ansible命令工具,其为核心执行工具 |
注意事项
1 2 3 4 5 | 执行ansible的主机一般称为主控端,中控,master或堡垒机 主控端Python版本需要 2.6 或以上 被控端Python版本小于 2.4 需要安装python - simplejson 被控端如开启SELinux需要安装libselinux - python windows不能做为主控端 |
安装Ansible
以CentOS为例
安装环境查看
安装
1 | yum - y install ansible |
查看版本
Ansible 功能详解
配置文件
1 2 3 4 5 6 7 8 9 10 11 | 配置文件或指令 描述 / etc / ansible / ansible.cfg 主配置文件,配置ansible工作特性 / etc / ansible / hosts 主机清单 / etc / ansible / roles / 存放角色的目录 / usr / bin / ansible 主程序,临时命令执行工具 / usr / bin / ansible - doc 查看配置文档,模块功能查看工具 / usr / bin / ansible - galaxy 下载 / 上传优秀代码或Roles模块的官网平台 / usr / bin / ansible - playbook 定制自动化任务,编排剧本工具 / usr / bin / ansible - pull 远程执行命令的工具 / usr / bin / ansible - vault 文件加密工具 / usr / bin / ansible - console 基于Console界面与用户交互的执行工具 |
Ansible 配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 | Ansible 配置文件 / etc / ansible / ansible.cfg (一般保持默认) [defaults] #inventory = /etc/ansible/hosts # 主机列表配置文件 #library = /usr/share/my_modules/ # 库文件存放目录 #remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录 #local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录 #forks = 5 # 默认并发数 #sudo_user = root # 默认sudo 用户 #ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码 #ask_pass = True #连接时提示输入ssh密码 #remote_port = 22 #远程主机的默认端口,生产中这个端口应该会不同 #log_path = /var/log/ansible.log #日志 #host_key_checking = False # 检查对应服务器的host_key,建议取消注释。也就是不会弹出 |
试验规划,两台主机192.168.56.11作为主控端,192.168.56.12被控端
修改配置文件/etc/ansible/hosts
1 2 3 | [webservers] 192.168 . 56.11 192.168 . 56.12 |
webserves代表一个组,下面有两台主机
执行命令
1 | ansible 192.168 . 56.11 - m ping |
执行失败
非常抱歉哦,竟然是失败的。为什么呢?Ansible是基于ssh进行工作的,那么当ssh一台远程主要的时候,是不是需要输入密码呢?可是这一条指令并没有提示输入口令呢
加参数-k输入密码
设置免密码登录 参考https://www.cnblogs.com/minseo/p/10043128.html
就不会提示需要输入密码了
Ansible常用命令语法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ansible <host - pattern> [ - m module_name] [options] 指令 匹配规则的主机清单 - m 模块名 选项 - - version 显示版本 - a 模块参数(如果有) - m module 指定模块,默认为command - v 详细过程 –vv - vvv更详细 - - list - hosts 显示主机列表,可简写 - - list - k, - - ask - pass 提示连接密码,默认Key验证 - K, - - ask - become - pass 提示使用sudo密码 - C, - - check 检查,并不执行 - T, - - timeout = TIMEOUT 执行命令的超时时间,默认 10s - u, - - user = REMOTE_USER 执行远程执行的用户 - U, SUDO_USER, - - sudo - user 指定sudu用户 - b, - - become 代替旧版的sudo 切换 |
1 2 3 4 5 6 7 8 9 10 11 12 | ansible - doc: 显示模块帮助 ansible - doc [options] [module...] - a 显示所有模块的文档 - l, - - list 列出可用模块 - s, - - snippet 显示指定模块的简要说明 例子: #ansible-doc ping 由于ansible的模块有 1378 个( 2.4 . 2.0 ),并且一直在持续更新。因此,这个指令必须要掌握的。 #ansible-doc -l |wc -l 1378 |
Ansible 的命令执行过程以 ansible all -m command -a 'ls -l /' -vvv 这条命令为例,根据显示的信息时行解读
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 1. 加载自己的配置文件,默认 / etc / ansible / ansible.cfg Using / etc / ansible / ansible.cfg as config file 2. 匹配主机清单 Parsed / etc / ansible / hosts inventory source with ini plugin 3. 加载指令对应的模块文件,如command,生成.py的文件到本机的临时目录,这个目录就是在 / etc / ansible / ansible.cfg定义的 Using module file / usr / lib / python2. 7 / site - packages / ansible / modules / commands / command.py PUT / tmp / tmp4JvsLH TO / root / .ansible / tmp / ansible - tmp - 1517301292.6 - 155771303493861 / command.py 4. 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME / .ansible / tmp / ansible - tmp - 数字 / XXX.PY文件, 这个目录就是在 / etc / ansible / ansible.cfg定义的 ( umask 77 && mkdir - p "` echo /root/.ansible/tmp/ansible-tmp-1517301292.6-155771303493861 `" ....) sftp> put / tmp / tmp4JvsLH / root / .ansible / tmp / ansible - tmp - 1517301292.6 - 155771303493861 / command.py\n' 5. 给文件 + x 权限 'chmod u+x /root/.ansible/tmp/ansible-tmp-1517301292.6-155771303493861/ /root/.ansible/tmp/ansible-tmp-1517301292.6-155771303493861/command.py && sleep 0' 6. 执行并返回结果 ' / usr / bin / python / root / .ansible / tmp / ansible - tmp - 1517301292.6 - 155771303493861 / command.py; 7. 删除临时py文件,sleep 0 退出 rm - rf "/root/.ansible/tmp/ansible-tmp-1517301292.6-155771303493861/" > / dev / null 2 >& 1 && sleep 0 8. 断开远程主机连接 'Shared connection to 7-db-3.hunk.tech closed.\r\n' ) |
执行结果状态
1 2 3 4 5 | 绿色:执行成功并且不需要做改变的操作 ×××:执行成功并且对目标主机做变更 红色:执行失败 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!