一、ansible介绍
1、ansible简介
ansible是一款自动化运维的工具,基于python开发,集合众多运维工具的优点,可以实现批量的系统配置、程序部署、命令执行等功能。
ansible基于模块工作,本身并没有批量部署的额能力。真正执行的是ansible运行的模块,而ansible只是提供一个框架。
2、ansible特点
①模块化。调用特定的模块完成特定的任务。
②轻量级,部署简单。没有客户端,节点无需任何操作,主机部署ansible。
③默认使用SSH协议。
④主从集中化管理。
⑤配置简单、功能强大、扩展性强。
⑥可以自定义模块,支持任何编程语言编写模块。
⑦通过playbooks(剧本)来定制强大的配置、状态管理。
⑧具有幂等性,一个操作在一台主机上执行一次和多次结果都一样。
3、核心组件
ansible(主体)
ansible的核心程序,提供一个命令行接口给用户对ansible进行管理操作。
host inventory(主机清单)
为ansible定义了管理主机的策略。一般小型环境下我们只需要在host文件中写入主机的ip地址即可。但是当中大型环境下,我们可能需要使用静态inventory或者动态主机清单来生成我们需要执行的目标主机。
core modules(核心模块)
ansible执行命令的功能模块,多数为内置的核心模块。
custom modules(扩展模块)
如果ansible本身自带的模块无法满足需求,用户可以自定义相应的模块来满足需求。
connection plugins(连接插件)
模块功能的补充,如链接类型插件、循环插件、变量插件、过滤插件等。(该功能不常用)
playbook(剧本)
编排定义ansible任务集的配置文件,由ansible顺序依次执行,通常是json格式的yml文件。
api
供第三方程序调用的应用程序编程接口。
二、ansible配置
1、安装epel仓库
yum install -y epel-release
2、安装ansible
yum install -y ansible
3、ansible命令参数
-v
详细模式,如果执行成功输出详细结果。
-i
指定host文件路径,默认在/etc/ansible/hosts。
-f,-forks=NUM
NUM默认是整数5,指定fork开启同步进程的个数。
-m
指定使用的moudule名称,默认command模块。
-a
指定模块参数
-k
提示输入SSH密码而不是使用基于ssh密钥认证。
-sudo
提权,使用root权限。
-K
提示输入sudo密码。
-u
指定移动端的执行用户。
-C
测试命令执行会改变什么内容,不会真正的去执行。
4、ansible配置文件
ansible/ansible.cfg
主配置文件,配置ansible工作特性。
ansible/hosts
主机清单
ansible/roles/
存放角色的目录
5、ansible命令工具
ansible-doc
查看配置文档,模块功能查看工具。
ansible-doc 模块名
ansible-doc -s 模块名
查看简单说明
ansible-galaxy
上传下载代码或模块的官网平台。
列出所有已安装的galaxy
ansible-galaxy list
安装galaxy
删除galaxy
ansible-playbook
定制自动化任务,编排剧本工具
ansible-pull
远程执行命令的工具
ansible-vault
文件加密工具
ansible-vault encrypt *.yml
加密yml文件
ansible-vault decrypt *.yml
解密yml文件
ansible-vault view *.yml
查看yml加密文件
ansible-vault edit *.yml
编辑加密文件
ansible-vault rekey *.yml
重新修改加密口令
ansible-vault create new.yml
创建新文件
ansible-console
基于console界面与用户交互的执行工具
用户名@当前操作的主机组(当前组的主机数量)[f:并发数]$
三、ansible应用
ansible 192.168.10.103
host1 192.168.10.101
1、定义主机清单
修改/etc/ansible/hosts文件
中括号中的是组名,下面可以是ip或者域名。多台主机可以用中括号括起来,用:作为分隔符。比如[1:100]就表示从1到100.
2、基于ssh免密登录
①创建密钥对
②分发密钥
3、ping模块测试连通性
-i 指定hosts文件地址,默认情况下在/etc/ansible/hosts,所以可以省略。
-m 指定使用的模块
①基于ip
②基于组名
4、ansible模块使用
command是ansible的默认模块不指定-m参数的时候使用的就是command模块。command模块常见的命令都可以使用但命令的执行不是通过shell来执行的,不支持管道,没法批量执行。
使用shell模块的时候默认是通过/bin/bash来执行的,所有在终端输入的命令都可以执行。
使用scripts模块可以在本地写一个脚本在远程服务器上执行。
①command模块
ansible -i /etc/ansible/hosts webserver -m command -a “命令”
②shell模块
ansible -i /etc/ansible/hosts webserver -m shell -a “命令”
③script模块
ansible -i /etc/ansible/hosts webserver -m script -a “/etc/ansible/hosts”
写一个脚本
远程执行
④copy模块
实现宿主机向目标主机拷贝文件,类似scp
ansible -i /etc/ansible/hosts webserver -m copy -a “src=文件 dest=目标位置 owner=属主 group=属组 mode=权限”
PS:如果目标位置不存在该目录时将会自动创建。
⑤file模块
修改目标文件权限
ansible -i /etc/ansible/hosts webserver -m file -a “path=目标文件 mode=权限”
也可以修改属主属组
⑥stat模块
获取远程文件信息
ansible -i /etc/ansible/hosts webserver -m stat -a “path=地址”
⑦get_url模块
实现远程主机下载指定的url地址支持sha256sum文件校验。
ansible -i /etc/ansible/hosts webserver -m get_url -a "url= 参数 "
url 资源在网上的地址
dest 文件下载位置的绝对路径
mode 文件下载位置的绝对路径
checksum 对下载的资源进行校验
timeout URL请求超时时间,默认10s
force 强制下载,有责覆盖。默认为no
⑧cron模块
远程配置crontab
ansible -i /etc/ansible/hosts webserver -m cron -a “name= ’ ’ minute=’ ’ job=’ '”
时间参数 默认为*
minute :指定分钟
hour :指定小时
day:指定日期
mouth:指定月份
weekday:指定周几
job/value:指定需要执行的命令
name:任务名称
state:present创建/absent移除
user:指定用户
special_time:指定特殊事件(annually每年,daily每天,hourly每小时,mouthly每月,reboot重启时,weekly每周,yearly每年)
disables:yes/no,是否禁用指定的任务,默认为no(只有在state=present时才有意义)
env:yes/no,是否是在设置cron的环境变量,默认为no。如果设为yes,那么name和value参数的值分别代表环境变量的名称和值。
⑨service模块
远程管理主机系统服务