一 ansible简介
1 ansible概述
- ansible是2013年推出的一款IT自动化和devops软件,redhat于2015年将其收购,基于python开发,融合了很多运维工具的优点.
- 可以实现:
- 自动化部署APP
- 自动化管理配置项
- 自动化持续交付
- 自动化(AWS)云服务管理
2 选择ansible的原因
- 社区活跃度高,使用广泛
- 学习成本低
- 使用成本低
- 编码语言是Python,做二次开发容易
- 性能强大
- 功能强大,模块丰富
- 只需要ssh和python即可使用
- 无客户端
3 ansible特性
模块化设计,调用特定模块完成特定任务
支持json等标准输出格式,可以采用任何编程语言重写
部署简单,支持主从模式,支持自定义模块,支持playbook,支持多层部署,支持异构IT环境
4 工作流程
二 ansible安装
1 软件依赖关系
管理主机:
要求python2.6或2.7或以上版本
需要安装模块:
- paramiko
- pyyaml
- jinja2
- httplib2
- six
被托管主机: - ansible需要通过ssh协议管理机器
- 需要安装python2.5
rsync 增量同步
rsync -a 基础命令合体
rsync -S 处理稀疏文件
2 安装ansible
yum -y install ansible
ansible --version
三 ad-hoc
1 主机管理
1.1 主机定义与分组
1.1.1 ansible配置文件查找顺序:
- 首先检查ansi_config变量定义的配置文件
- 其次检查当前目录下的./ansible.cfg文件
- 再次检查当前用户家目录下~/ansible.cfg文件
- 最后检查/etc/ansible.cfg是ansible的默认配置文件路径
1.1.2 ansible.cfg 配置文件
inventory 定义托管主机地址配置文件路径
inventory 指定的配置文件,写入远程主机的地址
1.1.3 进入配置文件
[组名称]
主机名称或ip地址
1.1.4 ansible.cfg 配置文件
ssh 主机 key 验证配置参数
host_key_checking = False
如果为false,不需要输入yes
如果为true,等待输入yes
1.1.5 分组定义 范围定义样例
[web]
web1
web2
[db]
db[1:2]
[other]
cache
2 ansible命令基础
absible 主机集合 -m 模块名称 -a 模块参数
- -i inventory文件路径,或可执行脚本
- -k 使用交互式登录密码
- -e 定义变量
- -v 显示详细信息
列出要执行的主机
ansible all --list-hosts
批量检测主机
ansible all -m ping -k
3 部署证书文件
ansible是通过ssh在远程执行命令的
ssh 远程执行命令必须要通过认证才行
密码写入配置文件安全性差
使用key方式认证
给所有主机部署公钥
- 没有秘钥命令执行会出错
- ansible web -a’uptime’
4 inventory 扩展参数
4.1 inventory 参数说明
ansible_ssh_port ssh端口号
ansible_ssh_user 默认ssh用户名
ansible_ssh_pass ssh密码
ansible_ssh_private_key_file ssh使用的私钥文件
4.1.1 vars变量定义,用于组名后面
[all:vars]
ansible_ssh_private_key_file="/root/.ssh/key"
4.1.2 children子组定义,用于引用其他组名称
[app:children]
web
db
四 模块
1 ansible-doc
模块手册
ansible-doc -l 列出所有模块
ansible-doc 模块名称 查看具体帮助
2 ping
测试网络连通性,没有参数
是测试ssh的连通性
ansible host-pattern -m ping
3 command
远程执行命令
ansible host-pattern -m command -a ‘[args]’
查看所有机器负载
uptime
最后三个值1分钟平均负载 5分钟平均负载 15分钟平均负载
ansible all -m command -a ‘uptime’
查看日期和时间
ansible all -m command -a ‘date +%F_%T’
4 shell
通过/bin/sh进行执行命令,可以执行任意命令
不能执行交互式的命令,例如vim top等
查看所有机器的负载
ansible all -m shell -a ‘uptime’
5 script
在本地写脚本,然后使用script模块批量执行
ansible web -m script -a ‘urscript’
6 yum
使用yum包管理器来管理软件包
name:要进行操作的软件包名字
state:动作(installed,removed)
7 service
name:必选项,服务名称
enabled:是否开机自启
sleep:执行restarted,会在stop和start之间沉睡几秒
state:对当前服务执行启动,停止,重启,重新加载等操作(started,stoped,restarted,reloaded)
8 copy
复制文件到远程主机
src:复制本地文件到远程主机,绝对路径和相对路径为目录时会递归复制.若路径以/结尾,只复制目录里的内容,若不以/结尾,则复制包含目录在内的整个内容,类似于rsync
dest:必选项.远程主机的绝对路径,如果源文件是一个目录,那该路径必须是目录
复制文件
ansible all -m copy -a ‘src=/etc/resolv.conf’
dest=/etc/resolv.conf
复制目录
ansible all -m copy -a ‘src=/etc/yum.repos.d/ dest=/etc/yum.repos.d’
9 lineinfile模块
类似sed的一种行编辑替换模块
path 目标文件
regrexp 正则表达式,要修改的行
line 最终修改的结果
例如修改my.cnf中bin-log的格式
mixed --> row
ansible db -m lineinfile -a ‘path="/etc/my.cnf" regexp="^binlog-format" line=“binlog-format = row”’
10 replace
类似sed的一种行编辑替换模块
path 目的文件
regexp 正则表达式
replace 替换后的结果
替换指定字符 row --> mixed
ansible db -m replace -a ‘path="/etc/my.cnf" regexp=“row” replace=“mixed”’
11 setup
主要用于获取主机信息,playbooks里经常会用的另一个参数gather_facts与该模块相关,setup模块下经常用的是filter参数
ansible cache -m setup -a ‘filter=ansible_distribution’
来源:CSDN
作者:你的男孩TT
链接:https://blog.csdn.net/wangteng19931203/article/details/103885085