ansible简介
1.什么是ansible
- ansible是2013年推出的一款I自动化和DevOps软件,2015年被RedHat收购。是基于Python研发, 糅合很多老运维工具的优点,实现了批量操作系统配置,批量程序部署,批量运行命令等功能
- ansible可以实现
- 自动化部署APP
- 一自动化管理配置项
- 一自动化持续交付
- 自动化(AWS)云服务管理
2.为什么选择ansible
- 活跃度(社区)
- 学习成本
- 使用成本
- 编码语言
- 性能
- 使用是否广泛
3.ansible优点
- 只需要SSH和Python即可使用
- 无客户端
- ansible功能强大,模块丰富
- 上手容易,门槛低
- 基于Python开发,做二次开发更容易-使用公司比较多,社区活跃
4.ansible特性
- 模块化设计,调用特定的模块完成特定任务
- 基于 Python语言实现
- paramiko
- PyYAML(半结构化语言)
- Jinja2
- 其模块支持JSON等标准输出格式,可以采用任何编程语言重写
- 部署简单
- 主从模式工作
- 支持自定义模块
- 支持playbook
- 易于使用
- 支持多层部署
- 支持异构IT环境
5.工作流程
ansible安装
- 对管理主机
- 要求Python 2.6或Python 2.7
- ansible使用以下模块,都需要安装
- Paramiko
- PyYAML
- Jinja2
- httplib2
- six
- 对被托管主机
- ansible默认通过SSH协议管理机器
- 被管理主机要开启SSH服务,允许 ansible主机登录
- 在托管节点上也需要安装 Python2.5或以上的版本
- 如果托管节点上开启了SElinux,需要安装 libselinux-python
环境准备
主机名 | IP | 角色 |
---|---|---|
ansible | 192.168.1.252 | 管理主机 |
web1 | 192.168.1.41 | 托管主机 |
web2 | 192.168.1.42 | 托管主机 |
db1 | 192.168.1.43 | 托管主机 |
db2 | 192.168.1.44 | 托管主机 |
cache | 192.168.1.45 | 托管主机 |
ad-hoc
1)主机管理
- 安装 ansible之后可以做一些简单的任务
- ansible配置文件查找顺序
- 首先检测 ANSIBLE_CONFIG变量定义的配置文件
- 其次检查当前目录下的./ansible.cfg文件
- 再次检查当前用户家目录下~/ansible. cfg文件
- 最后检查/etc/ansible/ansible.cfg文件
- /etc/ansible/ansible.cfg是ansible的默认配置文件路径
主机定义与分组
] vim /etc/ansible/ansible.cfg
14 inventory = /etc/ansible/hosts #定义托管主机地址配置和文件名,打开注释即可
61 host_key_checking = False #ssh主机验证配置参数,打开注释即可,效果为ssh需要输入yes时自动输入yes
] vim /etc/ansible/hosts # 主机定义方式
[web] # [组集合名称]
web[1:2] # HOST1
# HOST2
[db] # 主机名连续时
db[1:2] # web[1:10] # web1到web10十台主机
[other]
cache
] vim /etc/hosts #主机名解析,与/etc/ansible/hosts中对应
192.168.1.41 web1
192.168.1.42 web2
192.168.1.43 db1
192.168.1.44 db2
192.168.1.45 cache
2)ansible基础命令
ansible 主机集合 -m 模块名称 -a 模块参数
# 主机集合:主机名或分组名,多个使用逗号分隔
# -m 模块名称,默认command模块
# -a or --args 模块参数
# 其他参数
# -i inventory文件路径,或可执行脚本
# -k 使用交互式登录密码
# -e 定义变量
# -v 显示详细信息
ansible --version
ansible all --list-hosts # 列出所有定义了的主机
ansible all -m ping # 批量检测主机,ssh,不是ping
3)部署ssh证书文件
ssh-keygen
ssh-copy-id
# 所有主机全部部署
4)inventory扩展参数
ansible_ssh_port
: 如果ssh没有使用默认端口号,则使用该变量定义,例:
] vim /etc/ansible/hosts
[other]
cache ansible_ssh_port=222 #如果cache主机ssh服务使用了222端口
ansible_ssh_user
: ssh连接的用户ansible_ssh_pass
: ssh密码,不安全,建议使用ssh密钥ansible_ssh_private_key_file
: ssh使用的私钥文件,适用于有多个密钥时vars
变量定义,例:
] vim /etc/ansible/hosts
[all:vars] # 为所有主机定义变量
ansible_ssh_private_key_file="/root/.ssh/id_rsa"
[web:vars] # 为web组定义变量
ntp_server=ntp.aliyun.com
children
子组定义,用于引用其他组名称,例:
] vim /etc/ansible/hosts
[app:children]
web
db
] ansible app -m ping
db1 | SUCCESS => {
....
web2 | SUCCESS => {
....
web1 | SUCCESS => {
....
db2 | SUCCESS => {
....
- 自定义配置文件,根据ansible文件检测规则,当前目录下的配置文件
优先
于默认配置文件
] mkdir ansible_my
] cd ansible_my
] vim ansible.cfg
[defaults]
inventory = myhosts # 不写路径时为当前路径
host_key_checking = False
] vim myhosts
[app1]
web1
db1
....
5)动态主机
- ansible Inventory包含静态和动态的 Inventory,静态Inventory指在文件
etc/ansible/hosts
中指定的主机和组, 动态Inventory指通过外部脚本获取主机列表,按照其要求格式返回给 ansilbe命令 - json( JavaScript Object Notation, JavaScript对象表示法),一种基于文本独立于语言的轻量级数据交换格式