Ansible 工具参数详解自动化运维
一、Ansible基本概述:
Ansible是一个配置管理系统(configuration management sysytem )你只需要可以使用ssh访问你的服务器或设备就行
Ansible 是近年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误。
Ansible 通过本身集成的非常丰富的模块可以实现各种管理任务,其自带模块超过上千个。更为重要的是,它操作非常简单,即使小白也可以轻松上手,但它提供的功能又非常丰富,在运维领域,几乎可以做任何事。
1、Ansible特点
- ansible不需要单独安装客户端,ssh相当于ansible客户端
- ansible不需要启动任何服务,仅需要安装对应工具即可
- ansible依赖大量的python模块来实现批量管理
- ansible配置文件 /etc/ansible/ansible.cfg
2. ansible批量管理服务介绍
ansible批量管理服务意义
- 提高工作的效率
- 提高工作准确度
- 减少维护的成本
- 减少重复性工作
ansible批量管理服务功能
可以实现批量系统操作配置
- 可以实现批量软件服务部署
- 可以实现批量文件数据分发
- 可以实现批量系统信息收集
3.Ansible基本架构
- 连接插件(connector plugins)用于连接主机 用来连接被管理端
- 核心模块(core modules)连接主机实现操作,它依赖具体的模块来做具体的事情
- 自定义模块(custom modules)根据自己的需求编写具体的模块
- 插件(plugins)完成模块功能的补充
- 剧本(playbooks ansible)的配置文件,将多个任务定义在剧本中,由ansible自动执行
- 主机清单(host inventory)定义ansible需要操作主机范围
最重要的一点是ansible是模块化的 它所有的操作都依赖于模块
二、Ansible安装配置
ansible的环境:
环境部署
m01 192.168.1.66 ansible管理端
backup 192.168.1.69 ansible受控端
nfs 192.168.1.70 ansible受控端
web01 192.168.1.67 ansible受控端
1、安装ansible,需先安装epel扩展源
- [root@localhost yum.repos.d]# rpm -Uvh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
- [root@localhost yum.repos.d]# yum install eprl-release
检查epel源中有无ansible
- [root@localhost ~]# yum list ansible
- Loaded plugins: fastestmirror
- Repository base is listed more than once in the configuration
- Repository updates is listed more than once in the configuration
- Repository extras is listed more than once in the configuration
- Repository centosplus is listed more than once in the configuration
- Repository mysql57-community is listed more than once in the configuration
- Loading mirror speeds from cached hostfile
- * base: mirrors.aliyun.com
- * extras: mirrors.aliyun.com
- * updates: mirrors.aliyun.com
- Available Packages
- ansible.noarch 2.9.14-1.el7 epel
安装ansible
- [root@localhost ~]# yum install -y ansible
查看版本号
- [root@m01 ~]# ansible --version
hosts:被管理机的IP或主机名列表
ansible.cfg:主配置文件
roles: 角色或插件路径
2、ssh部署公钥认证
#利用非交换工具实现批量分发公钥与批量管理服务器
- [root@m01 ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
- [root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.69
- [root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.70
- [root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.67
3、配置ansible主机清单
主机清单配置文件 /etc/ansible/hosts
- [root@m01 ~]# vim /etc/ansible/hosts
4、验证ansible
- [root@m01 ansible]# ansible cm -m ping
如果报一下错误
- 192.168.1.11 | FAILED! => {
- "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."
- }
产生原因:控制端与被控制端第一次通讯,需要先添加指纹信息
解决方法:ssh 192.168.1.11 (被控制端ip)
如果被控制端机器比较的情况下:
修改 /etc/ansible/ansible.cfg 中的host_key_checking = False
三、ansible服务架构信息
主机清单配置
- 软件模块信息 OK
- 基于秘钥连接主机 OK
- 主机需要关闭selinux OK
- 软件剧本功能
四、Ansible常见模块
调用模块来部署架构
安装软件包
修改配置文件
创建程序用户组
创建目录,并修改所属和权限
启动服务
挂载
测试
在ansible中时指需要快速执行一条命令,并且不需要保存的命令,对于复杂的命令则为playbook
模块的应用语法格式:
ansible 主机名称/主机组名称/主机地址信息/all -m(指定应用的模块信息) 模块名称 -a(指定动作信息) "执行什么动作"
Ansible注意事项--->提示颜色信息说明
黄色:对远程节点进行相应的修改
绿色:对远程节点不进行相应修改,或者只对远程节点信息进行查看
红色:操作执行命令有异常
紫色:表示对命令执行发出警告信息(可能存在问题)
1.command模块
主要执行Linux的基础命令,可以执行远程服务器命令执行、任务执行
- [root@localhost ansible]# ansible -k -i /etc/ansible/hosts all -m command -a 'date'
- SSH password:
- 192.168.1.11 | CHANGED | rc=0 >>
- Thu Dec 29 15:30:11 CST 2022
- 192.168.1.6 | CHANGED | rc=0 >>
- Thu Dec 29 15:30:12 CST 2022
all:代表/etc/ansible/hosts内所有机器
- [root@localhost ansible]# ansible -k -i /etc/ansible/hosts all -m command -a 'ping www.baidu.com -c 1'
- SSH password:
- 192.168.1.6 | CHANGED | rc=0 >>
- PING www.a.shifen.com (180.101.49.13) 56(84) bytes of data.
- 64 bytes from 180.101.49.13 (180.101.49.13): icmp_seq=1 ttl=54 time=6.22 ms
- --- www.a.shifen.com ping statistics ---
- 1 packets transmitted, 1 received, 0% packet loss, time 0ms
- rtt min/avg/max/mdev = 6.229/6.229/6.229/0.000 ms
- 192.168.1.11 | CHANGED | rc=0 >>
- PING www.a.shifen.com (180.101.49.13) 56(84) bytes of data.
- 64 bytes from 180.101.49.13 (180.101.49.13): icmp_seq=1 ttl=54 time=5.89 ms
- --- www.a.shifen.com ping statistics ---
- 1 packets transmitted, 1 received, 0% packet loss, time 0ms
- rtt min/avg/max/mdev = 5.890/5.890/5.890/0.000 ms
2.shell模块
用于远程客户端上执行各种shell命令或运行脚本
#默认模块,执行命令
[root@m01 ansible]# ansible cm -m command -a "hostname"
#如果需要一些管道操作,则使用shell
[root@m01 ansible]# ansible cm -m shell -a "df -h | grep /$" -f 3
# -f=forks /etc/ansible/ansible.cfg #结果返回的数量
注意:command和shell模块的区别:
command只能调用一条指令
shell可以使用管道
3.yum模块
用于软件的安装、升级、卸载
[root@m01 ansible]# ansible web -m yum -a "name=httpd state=installed"
name ---指定要安装的软件包名称,如果有多个,用","隔开
state ---指定使用yum的方法
installed,present ---安装软件包
removed,absent ---移除软件包
latest ---安装最新软件包
4.copy模块
src ---推送ansible的源文件或目录,空文件不能复制
dest ---推送客户端的目录或文件,需要绝对路径
backup ---对推送传输过去的文件,先备份原始文件
content ---将指定文件的内容复制到远程文件内
group ---将本地文件推送到远端,指定文件属组信息
owner ---讲本地文件推送到远端,指定文件属主信息
mode ---将本地文件推送到远端,指定文件权限信息
force --覆盖远程主机不一致的内容
#推送文件模块
[root@m01 ansible]# ansible cm -m copy -a "src=/etc/hosts dest=/tmp/test.txt"
#在推送覆盖远程端文件前,对远端已有文件进行备份,按照时间信息备份
[root@m01 ansible]# ansible cm -m copy -a "src=/etc/hosts dest=/tmp/test.txt backup =yes"
#直接向远端文件内写入数据信息,并且会覆盖远端文件内原有数据信息
[root@m01 ansible]# ansible cm -m copy -a "content='cm' dest=/tmp/cm"
案例:批量推送hosts文件,并备份
- [root@m01 ~]# ansible cm -m copy -a "src=/etc/hosts dest=/etc/hosts backup=yes"
案例2:添加rsync认证文件和rsync客户端密码文件
添加rsync服务端认证文件:
- [root@m01 ~]# ansible backup -m copy -a "content='rsync_backup:1' dest=/etc/rsync.password owner=root group=root mode=600"
- [root@m01 ~]# ansible backup -m shell -a "ls -l /etc/rsync.password"
- 192.168.1.69 | CHANGED | rc=0 >>
- -rw------- 1 root root 14 Nov 13 10:50 /etc/rsync.password
- [root@m01 ~]# ansible backup -m shell -a "cat /etc/rsync.password"
- 192.168.1.69 | CHANGED | rc=0 >>
- rsync_backup:1
添加rsync客户端密码文件
- [root@m01 ~]# ansible cm -m copy -a "content='1' dest=/etc/rsync.pass owner=root group=root mode=600"
5.service模块
用于远程客户端的各种服务管理,包括启动、停止、重启、重新加载
- [root@m01 ~]# ansible cm -m service -a "name=crond state=stopped enabled=yes"
name #定义要启动服务的名称
state #指定服务状态时停止或是运行,停止和运行指令要写成过去式
started #启动
stopped #停止
restarted #重启
reloaded #重载
enabled #是否让服务开启启动
6.user模块
主要用于操作系统用户、组、权限、密码
7.cron模块
用于添加、删除、更新crontab任务计划
8.synchronize 模块
用于目录、文件同步,主要基于命令rsync命令工具同步目录和文件
Ansible 工具参数详解自动化运维的更多相关文章
- 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路
做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感 ...
- 详解Linux运维工程师
运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感知前方潮流变化.如:今年大数据,人工智能比较火……(相对表示就是 Python 比较火) 之前写过运维 ...
- 详解linux运维工程师入门级必备技能
详解linux运维工程师入门级必备技能 | 浏览:659 | 更新:2013-12-24 23:23 | 标签:linux it自动化运维就是要很方便的运用各种工具进行管理维护,有效的实施服务器保护 ...
- 详解Linux运维工程师高级篇(大数据安全方向).
hadoop安全目录: kerberos(已发布) elasticsearch(已发布)http://blog.51cto.com/chenhao6/2113873 knox oozie ranger ...
- 3.3、Ansible命令参数详解
0.ansible 命令参数详解: [root@localhost ~]# ansible Usage: ansible <host-pattern> [options] Options: ...
- 详解Linux运维工程师应具备的十大技能
Linux系统如果是学习可以选用Redhat或CentOS,特别是CentOS在企业中用得最多,当然还会有其它版本的,但学习者还是以这2个版本学习就行,因为这两个版本都是兄弟,没区别的,有空可以再研究 ...
- 详解Linux运维工程师必备技能
张戈大神是腾讯的一名运维,张戈博客也是我接触到第一个 Linux 运维师的博客,最近也在接触 Linux,说到工具,在行外可以说是技能,在行内一般称为工具,就是运维必须要掌握的工具. 我就大概列出这几 ...
- 详解Linux运维工具:运维流程管理、运维发布变更、运维监控告警
概述 应用上线后,运维工作才刚开始,具体工作可能包括:升级版本上线工作.服务监控.应用状态统计.日常服务状态巡检.突发故障处理.服务日常变更调整.集群管理.服务性能评估优化.数据库管理优化.随着应用 ...
- ansible puppet saltstack三款自动化运维工具的对比
一.基础介绍 ansible基础介绍可参考:http://www.linuxidc.com/Linux/2017-12/149671.htm puppet基础介绍可参考:http://www.linu ...
- nginx 编译参数详解(运维必看--转)
nginx参数: –prefix= 指向安装目录 –sbin-path 指向(执行)程序文件(nginx) –conf-path= 指向配置文件(nginx.conf) –error-log-path ...
随机推荐
- unity学习笔记03-渲染管线
图形数据在GPU上经过运算处理,最后显示在显示器上的过程 游戏→图形API→cpu→(DRAW CALL)交给GPU→顶点处理→图元装配→光栅化→像素处理→缓存 减少DRAW CALL 增加性能 O ...
- Jmeter(三十九) - 从入门到精通进阶篇 - Jmeter配置文件的刨根问底 - 上篇(详解教程)
------------------------------------------------------------------- 转载自:北京-宏哥 https://www.cnblogs.co ...
- C语言学习--指针函数与函数指针
#include<stdio.h> #include<string.h> //指针函数: 是一个函数, 但是这个函数的返回值类型是一个指针 //函数指针: 是一个指针, 这个指 ...
- interpreting non ascii codepoint
ProtoBuf 在Windows VS2019 C++平台上的使用 这两天想着了解一下protobuf,搜索了一篇博客照着弄了一下 https://blog.csdn.net/weixin_4478 ...
- [转]failed to recv data in handshakeReceive2Callback
转自:http://xiaix.me/blog/27.html "failed to recv data in handshakeReceive2Callback"错误 一直用的好 ...
- JS篇(009)-javascript 对象的几种创建方式
答案: 第一种:Object 构造函数创建 var Person = new Object(); Person.name = "Nike"; Person.age = 29; 这行 ...
- mysql5.7主从多线程同步
数据库复制的主要性能问题就是数据延时 为了优化复制性能,Mysql 5.6 引入了 "多线程复制" 这个新功能 但 5.6 中的每个线程只能处理一个数据库,所以如果只有一个数据库, ...
- Python批量修改文件名中所包含指定关键字的文件
1.去掉下图中各文件名中的'xx' 2.Python代码如下(仅供参考) import os, os.path, time def rename(file, keyword): #file: 需要修改 ...
- 生产者消费者demo
using System; using System.Collections.Generic; using System.Threading; namespace 生产者消费者 { class Pro ...
- 第二章:用Python对不同的商品销售数据进行预测分析
文章目录 项目背景 获取数据 线性数据预测 非线性数据预测 源码地址 本文分享知识: os 模块获取上一级目录的绝对地址 pands 读取 sqlite3 数据库中的数据 用sklearn中的线性回归 ...