概念
- ansible是2013年退出的一款IT自动化和DevOps软件,2015年被RedHat收购.是基于Python研发,柔和很多老运维工具的优点,实现了批量操作系统配置,批量程序部署,批量运行命令的功能
- ansible可以实现:
- 自动化部署APP
- 自动化管理配置项
- 自动化持续交付
- 自动化(AWS)云服务管理
- ansible优点
- 活跃度高,学习成本低,适用范围广
- 只需要ssh和python即可使用
- 无客户端
- 功能强大,模块丰富
- 上手容易,门槛低
- 基于python开发,做二次开发容易
- 使用公司比较多,社区活跃
安装
软件依赖关系
- 管理主机要求Python2.6或者Python2.7以上
- ansible使用以下模块都需要安装: paramiko PyYAML Jinja2 httplib2 six
- 被托管主机需要:
- ansible默认通过ssh协议管理机器
- 被管理主机要开启ssh服务,允许ansible主机登录
- 在托管节点上也需要安装Python2.5或以上的版本
- 如果托管节点上开启了SELinux,需要安装libselinux-python
- 安装及验证
- 托管主机上配置yum配置文件,安装yum -y install ansible ,验证命令ansible --version
主机定义与分组
-
ansible配置文件查找顺序
- 首先检测ANSIBLE_CONFIG变量定义的配置文件
- 其次检查当前目录下的./ansible.cfg 文件
- 再次检查当前用户家目录下的 ~/ansible.cfg文件
- 最后检查/etc/ansible/ansible.cfg文件
-
/etc/ansible/ansible.cfg是ansible的默认配置文件路径
-
ansible.cfg配置文件
- inventory定义托管主机地址配置文件路径名
- inventory制定的配置文件,写入远程主机的地址
- ssh 主机 key 验证配置参数
- host_key_checking = False(如果为False,不需要输入yes,如果为True,等待输入yes)
-
格式
- [组名称]
- 主机名称或ip地址,其他参数
vim /etc/ansible/ansible.conf
14 inventory = /etc/ansible/hosts //inventory配置文件
61 host_key_checking = False //用户不用yes确认,取消交互
vim /etc/ansible/hosts
末尾添加:
[web] //分组
web1
web2
[db] //db分组
[other]
cache
ansible命令基础
- ansible主机集合 -m模块名称 -a模块参数
- 主机集合 主机名或分组名,多个使用"逗号"分隔
- -m 模块名称,默认command模块
- -a or --args 模块参数
- 其他参数
- -i inventory 文件路径,或可执行脚本
- -k 使用交互式登录密码
- -e 定义变量
- -v 显示详细信息
uptime – 查看系统负载,最后三个值分别代表1分钟,5分钟,15分钟平均负载
部署证书文件
ansible是通过SSH在远程执行命令的
SSH远程执行命令必须要通过认证才行
密码写入配置文件安全性很差
使用key方式认证
cd /root/.ssh
ssh-keygen -t rsa -b 2048 -N '' -f key
给所有主机部署公钥
ssh-copy-id -i key.put 主机名称
- 没有秘钥命令执行会出错
- ansible web -a 'uptime'
inventory扩展参数
1.ansible_ssh_port //ssh端口号:如果不是默认的端口号,通过此变量设置
2.ansible_ssh_user //默认的ssh用户名
3.ansible_ssh_pricate_key_file //ssh使用的私钥文件,适用于有多个密钥,并且不想使用ssh代理的情况
4.vars变量定义,用于组名后面,
[all:vars]
ansible_ssh_private_key_file="/root/.ssh/key"
5.自定义配置文件
创建文件夹myansible
创建配置文件ansible.cfg
[defaults]
inventory=myhost
host_key_checking=False
配置主机文件
[app1]
web1
db1
ansible app1 --list-hosts